MongoDB知识框架

简介:MongoDB 是一个基于分布式文件存储的数据库,属于 NoSQL 数据库产品,以下是其知识框架总结:

一、数据模型

  • 文档:MongoDB 中的数据以 BSON(二进制形式的 JSON)格式存储在集合中,文档类似于关系型数据库中的行,但结构更灵活。
  • 集合:是文档的容器,类似于关系型数据库中的表,但集合中的文档不需要有相同的字段结构。
  • 数据库:多个集合组成一个数据库,一个 MongoDB 实例可以包含多个数据库。

二、数据库操作

  • 创建数据库 :使用 use 命令,若数据库不存在则会在插入数据时自动创建。
  • 查看数据库 :使用 show dbs 命令列出所有数据库。
  • 删除数据库 :使用 db.dropDatabase() 方法删除当前数据库。

三、集合操作

  • 创建集合 :使用 db.createCollection('集合名') 创建集合。
  • 查看集合 :使用 show collections 命令查看当前数据库中的所有集合。
  • 删除集合 :使用 db.集合名.drop() 方法删除指定集合。

四、文档操作

  • 插入文档 :使用 db.集合名.insertOne({字段:值}) 插入单个文档,db.集合名.insertMany([{文档1},{文档2}]) 插入多个文档。
  • 查询文档 :使用 db.集合名.find({查询条件}) 查询文档,支持多种查询操作符,如 $eq(等于)、$gt(大于)、$in(包含)等。
  • 更新文档 :使用 db.集合名.updateOne({查询条件}, {$set:{字段:新值}}) 更新单个文档,db.集合名.updateMany() 更新多个文档。
  • 删除文档 :使用 db.集合名.deleteOne({查询条件}) 删除单个文档,db.集合名.deleteMany({查询条件}) 删除多个文档。

五、索引

  • 创建索引 :使用 db.集合名.createIndex({字段:1}) 创建升序索引,{字段:-1} 创建降序索引,还支持复合索引、文本索引等。
  • 查看索引 :使用 db.集合名.getIndexes() 查看集合的索引信息。
  • 删除索引 :使用 db.集合名.dropIndex({索引名:1}) 删除指定索引,db.集合名.dropIndexes() 删除所有索引。

六、聚合操作

  • 聚合管道 :使用 db.集合名.aggregate([{阶段1},{阶段2}]) 进行聚合操作,常见的聚合阶段有 $match(筛选)、$group(分组)、$project(投影)等。

七、副本集

  • 概念:是一组 MongoDB 实例,其中一个为主节点,其余为从节点,用于数据冗余和高可用性。
  • 配置 :需要在每个节点的配置文件中设置相关参数,并使用 rs.initiate() 初始化副本集。

八、分片集群

  • 概念:将数据分散存储在多个服务器上,以提高存储和查询性能。
  • 组件:包括分片服务器(Shard)、配置服务器(Config Server)和路由服务器(Mongos)。

九、性能优化

1、索引优化
  • 合理创建索引:根据查询条件创建复合索引、唯一索引等,避免全表扫描。
  • 避免冗余索引:定期使用 db.collection.getIndexes() 检查并删除无用索引。
  • 索引覆盖查询:确保查询的字段都在索引中,减少文档扫描。
2、查询优化
  • 避免大查询:使用分页(limitskip)处理大量数据,避免一次性返回过多结果。
  • 优化聚合管道:在管道开头使用 $match 尽早过滤数据,减少后续阶段的处理量。
3、内存管理
  • WiredTiger 存储引擎:调整 wiredTigerCacheSizeGB 参数,通常设置为系统内存的 50%。
  • 监控内存使用:通过 db.serverStatus().wiredTiger.cache 查看缓存命中率。
4、分片与副本集
  • 分片策略:选择合适的分片键(如哈希分片、范围分片),避免数据倾斜。
  • 读写分离:在副本集从节点上处理读请求,减轻主节点压力。
5、硬件与存储
  • 使用 SSD:提升 I/O 性能,尤其是写入密集型工作负载。
  • 禁用交换空间:避免内存交换导致的性能骤降。

十、安全配置

1、认证与授权
  • 启用身份验证:在配置文件中设置 security.authorization: "enabled",创建管理员用户。
  • 基于角色的访问控制(RBAC):为不同用户分配不同角色(如 readWritedbAdmin),使用 db.createUser() 创建用户。
2、网络安全
  • 绑定 IP 地址:在配置文件中设置 net.bindIp: 127.0.0.1 或指定允许访问的 IP。
  • 使用防火墙:限制 MongoDB 端口(默认 27017)的访问,仅允许授权 IP 连接。
  • 启用 TLS/SSL:配置证书实现加密通信,设置 net.ssl.mode: requireSSL
3、数据加密
  • 静态数据加密:使用 MongoDB Enterprise 版本的加密功能或操作系统级加密(如 LUKS)。
  • 传输加密:通过 SSL/TLS 加密客户端与服务器之间的通信。
4、审计与监控
  • 启用审计日志:配置 auditLog 参数记录关键操作(如用户认证、敏感命令)。
  • 定期安全审计:检查用户权限、网络配置和日志,识别潜在风险。
5、版本更新与漏洞修复
  • 及时更新 MongoDB:修复已知安全漏洞,建议使用 LTS 版本。
6、敏感操作限制
  • 禁用危险命令:如 $where 操作符,防止 JavaScript 注入攻击。
  • 限制 MongoDB 进程权限:运行 MongoDB 服务的用户应仅拥有必要的系统权限
相关推荐
欢呼的太阳4 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
喜欢的名字被抢了6 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
Elastic 中国社区官方博客6 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
DLYSB_7 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔7 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
观远数据7 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华7 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
哥是强混9 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
ffqws_9 小时前
redis面试:如何保证双写一致
数据库·redis·缓存
水无痕simon9 小时前
6 数据库同义词
数据库