当前位置: 首页 > news >正文

MongoDB 研究报告

MongoDB 研究报告


1. 产品定位

MongoDBMongoDB Inc.(纳斯达克上市,代码 MDB)推出的文档型 NoSQL 数据库。最新版本是MongoDB 8.0(2024年发布)。

一句话定位:基于 JSON/BSON 文档模型的数据库,通过分片集群水平扩展,支持分布式事务,主打灵活 Schema 和高并发写入。

跟关系型数据库的区别:MongoDB 不是关系型数据库,不支持标准 SQL JOIN。它用嵌套文档和数组替代多表关联,以换取 Schema 的灵活性——字段随时可以增减,不用改表结构。

跟竞品的区分:同样是分布式数据库,TiDB/OceanBase 兼容 MySQL 协议,MongoDB 则完全走了另一条路:放弃 SQL 兼容,换取文档模型的表达力和灵活度。


2. 技术架构

2.1 两种核心架构:副本集 vs 分片集群

MongoDB 实际上只有两种部署形态,搞清楚这个就理解了一半:

架构适用场景
副本集(Replica Set)中小规模,高可用优先,写入不需扩展
分片集群(Sharded Cluster)TB 级数据,高并发写入,需要水平扩展

两种架构的核心区别在于"写入能不能分布到多台机器"。副本集写入都在一个主节点,分片集群则分散到多个 Shard。

2.2 副本集架构

应用层 │ │ 读写都连 Primary ▼ ┌───────────────┐ │ Primary │ ◄── 唯一可写节点 └───────┬───────┘ │ oplog 异步复制 ▼ ┌───────────────┐ ┌───────────────┐ │ Secondary │ │ Secondary │ │ (可读) │ │ (可读) │ └───────────────┘ └───────────────┘

三个节点之间通过oplog(操作日志)保持数据同步。Primary 挂了之后,两个 Secondary 会自动投票选出新主,这个过程通常 10-30 秒。

节点角色一览:

节点类型可写可读投票存数据
Primary
Secondary
Arbiter

2.3 分片集群架构

这是生产环境最常用的形态:

应用层 │ │ 标准 Wire Protocol ▼ ┌─────────────────┐ │ mongos │ ◄── 查询路由器,客户端唯一入口(无状态,可多实例) └────────┬────────┘ │ ▼ ┌─────────────────┐ │ Config Server │ ◄── 元数据中心,存储"分片键范围→Shard映射" │ 副本集(3节点) │ └────────┬────────┘ │ ├────────────────────┬────────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Shard1 副本集 │ │ Shard2 副本集 │ │ Shard3 副本集 │ │ · Primary │ │ · Primary │ │ · Primary │ │ · Secondary │ │ · Secondary │ │ · Secondary │ │ · Secondary │ │ · Secondary │ │ · Secondary │ └──────────────┘ └──────────────┘ └──────────────┘

三个组件各司其职:

组件做什么能否水平扩展
mongos路由查询,解析分片键,查询 Config Server 找目标 Shard✅ 无状态,随便加
Config Server存集群元数据(数据库/集合定义、分片键范围、Chunk 分布)❌ 3节点固定
shard存实际数据,每个 shard 都是一个副本集✅ 核心扩展点

2.4 MongoDB vs MySQL 数据结构对比

这是理解 MongoDB 的关键:

MySQLMongoDB说明
DatabaseDatabase同一层,概念一致
Schema❌ 不存在MySQL 里 Database = Schema
TableCollection集合,存文档
RowDocument文档(BSON),可嵌套对象和数组
ColumnField文档里的字段

MySQL 的关联 vs MongoDB 的嵌套

MySQL 需要多表 JOIN:

-- MySQL:两张表 + JOIN SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id WHERE o.amount > 100;

MongoDB 把有关联的数据直接嵌套进去:

// MongoDB:一个文档搞定,不用 JOIN db.users.insertOne({ _id: 1, name: "张三", orders: [ { id: "o1", amount: 150 }, { id: "o2", amount: 200 } ] }) // 查询直接对嵌套字段操作 db.users.find({ "orders.amount": { $gt: 100 } })

这种设计叫做“反范式化”——用数据冗余换查询效率。代价是更新嵌套数据时需要整体更新,但 MongoDB 的原子操作保证了不会读到不一致的数据。

2.5 存储引擎

引擎默认版本适用场景
WiredTiger(默认)MongoDB 3.2+通用 OLTP,文档级锁,压缩存储
In-Memory企业版低延迟,但断电会丢数据
静态加密企业版TDE,敏感数据合规

3. 部署架构

3.1 最小配置

场景最小配置
开发测试1 台机器跑单节点
生产最小3 节点副本集
分片集群9 台机器(3 mongos + 3 Config Server + 3 Shard,每个 Shard 配 3 副本)

3.2 硬件配置建议

角色CPU内存磁盘说明
mongos8-16 核16-32 GB无数据盘纯路由,CPU 密集
http://www.jsqmd.com/news/618439/

相关文章:

  • 全国自动提升料斗混合机个性化定制,靠谱的厂家有哪些 - myqiye
  • Linux Test Project (LTP):专业级Linux内核测试工具完全指南 [特殊字符]
  • 西安市长安区鑫宝通建筑设备租赁部:长安区围挡租赁 围挡出售公司电话 - LYL仔仔
  • Claude读论文系列(八)
  • 【人工智能】Codex Windows 离线安装(无需微软商店)完整教程
  • 国产工业秤哪家性价比高?聚焦国内生产厂家的真实口碑 - 品牌推荐大师1
  • 以实锤!爱零食的喵具备特许经营资质,“快招”抹黑可以停了 - 速递信息
  • 分析高品质折弯机厂家,航力重工在江浙沪口碑如何? - 工业品网
  • 使用Proteus进行电路仿真:为Pixel Script Temple生成的作品设计虚拟展示屏
  • 分析广东金属基板定制制造商,深圳聚多邦靠谱吗? - myqiye
  • 你的SSH密钥可能已经过期了恢
  • GKD订阅管理终极指南:如何用3步轻松解决订阅混乱难题
  • 苏州市吴江区星汇耀再生资源经营部:酒店物资回收哪家好 - LYL仔仔
  • Beyond Compare 5专业激活方案:RSA密钥生成技术深度解析
  • 梅花手表官方售后维修服务中心新址实地考察报告(2026年4月权威发布) - 速递信息
  • 电子电路中的“心脏”:电源怪
  • SDD实战:如何写出让AI听得懂的规格文档
  • 网络安全风险评估:完整流程、方法与实施步骤
  • 破解骨骼修复营养痛点:骨全素FIVE-A全维度修复体系如何加速愈合? - 速递信息
  • 解决ComfyUI-BrushNet张量维度不匹配的3个实用方法
  • 24765 vs 23966:Polysciences PEI MAX与PEI 25K转染试剂对比指南【曼博解析-Polysciences中国官方提供商】 - 上海曼博生物
  • 讲讲2026年值得推荐的折弯机供应商,专业厂家费用多少 - 工业品牌热点
  • 半自动水滴角测试仪哪家靠谱?生产商 / 供应商精选指南 - 品牌推荐大师
  • 金蝶云星辰标准版:财务模块操作指南
  • ESP8266轻量级Mesh同步库:基于ESP-NOW的固件与内存数据一致性方案
  • JPEXS Free Flash Decompiler架构集成与系统对接实施指南
  • 终极指南:3分钟实现Figma中文界面,彻底告别英文设计困扰
  • 2026年6月PMP考试:最后60天,“优先级”比“努力”更重要
  • 2026年卷板机靠谱品牌排名,航力重工服务厂商值得选吗 - 工业推荐榜
  • 高端项目泰科石怎么选?从基材配方到全案服务,这份白皮书请收好 - 深度智识库