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 服务的用户应仅拥有必要的系统权限
相关推荐
Hello.Reader3 小时前
Redis 延迟监控深度指南
数据库·redis·缓存
ybq195133454313 小时前
Redis-主从复制-分布式系统
java·数据库·redis
好奇的菜鸟6 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°6 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
满昕欢喜6 小时前
SQL Server从入门到项目实践(超值版)读书笔记 20
数据库·sql·sqlserver
Hello.Reader7 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
简佐义的博客8 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法8 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
老纪的技术唠嗑局11 小时前
OceanBase PoC 经验总结(二)—— AP 业务
数据库
阿里云大数据AI技术11 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm