MongoDB知识框架

发布于:2025-05-09 ⋅ 阅读:(11) ⋅ 点赞:(0)

简介: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、查询优化

  • 避免大查询:使用分页(limit 和 skip)处理大量数据,避免一次性返回过多结果。
  • 优化聚合管道:在管道开头使用 $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 服务的用户应仅拥有必要的系统权限


网站公告

今日签到

点亮在社区的每一天
去签到