主题
MongoDB 学习路线:从文档模型到分布式架构
按「先理解模型,再理解存储与索引,最后理解分布式与设计」的顺序排列。每一层都建立在前一层之上。 生产检查项单独放在 99-生产检查清单,正文讲机制。
学习顺序
L1: MongoDB 是什么、什么时候用
→ 01-核心概念与对比 文档模型、与 MySQL/PgSQL 的定位差异
L2: 数据怎么存、怎么查得快
→ 02-存储模型与WiredTiger BSON、cache、journal、checkpoint、文档级并发
→ 03-索引 B 树、ESR、覆盖查询、多键索引、explain
L3: 怎么写查询、怎么优化
→ 04-聚合管道与查询优化 $match/$group/$lookup、管道优化、慢查询
L4: 怎么高可用、怎么扩展
→ 05-副本集与分片 多数派选举、写/读关注、分片键、chunk 与 balancer
L5: 怎么保证多条写原子、怎么订阅变更
→ 06-事务与ChangeStream 多文档事务、两阶段提交、oplog 与 resume token
L6: 数据模型怎么设计
→ 07-Schema设计模式 内嵌 vs 引用、六种模式、查询驱动设计
L7: 生产上容易踩什么、怎么提前发现
→ 08-MongoDB生产踩坑 写关注、分片键、16MB、cache、oplog
→ 10-MongoDB监控指标与告警 主机/进程/副本集与分片/业务四层指标 + cache 与 oplog 两条雪崩链路
L8: AI 场景怎么用
→ 09-MongoDB与AI $vectorSearch、Atlas 依赖、混合检索为什么是这个顺序
先理解文档模型(L1),才知道 Schema 设计(L6)为什么是核心决策,
而不是「随便存 JSON」。
先理解 WiredTiger(L2),才知道 cache、journal、checkpoint 分别影响
什么:cache 影响常态性能,journal + 写关注影响丢不丢数据,
checkpoint 影响恢复时间。
先理解索引(L2)和聚合(L3),才知道慢查询该补索引、改管道,
还是该换数据模型。
先理解副本集(L4),才知道写关注和读关注不是「越高越好」,
而是在一致性、延迟和可用性之间做取舍。
最后用生产踩坑(L7)和 Schema 设计(L6)把前面的机制落到模型上:
MongoDB 与关系库最大的差异,不是语法,而是「查询驱动设计」。核心链路
应用写入
│
▼
WiredTiger Cache(内存脏页)── 02-存储模型
├── journal(WAL,100ms 批量提交)── 崩溃恢复
└── checkpoint(至少每 60s)── 一致快照落盘
│
▼
索引定位(B 树 + ESR)── 03-索引
│
▼
聚合管道($match → $group → $lookup)── 04-聚合管道
│
▼
副本集复制(oplog → Secondary)── 05-副本集
├── Write Concern:写到多少个节点才算成功
├── Read Concern:读到哪个一致点
└── Read Preference:从主节点还是从节点读
│
▼
分片路由(mongos → Config Server → Shard)── 05-分片
│
▼
事务协调(跨分片 2PC)── 06-事务
│
▼
Change Stream(oplog 变更订阅)── 06-ChangeStream顺着链路理解
- 和关系库怎么选:L1 的模型差异 + L6 的 Schema 设计共同决定;事务和复杂关联留在 MySQL/PgSQL。
- 为什么写快、读也快:L2 的文档级并发和 cache,加上 L3 的索引设计;不是「MongoDB 一定比 MySQL 快」。
- 怎么保证不丢:L4 的写关注 + L2 的 journal,两者回答不同层面的问题;
w:"majority"防切换丢数据,j:true防进程崩溃丢数据。 - 怎么提前发现故障:10 篇用「连接与队列 → oplog → cache 脏页 → 磁盘 → 慢查询」的处置顺序,把 cache/checkpoint 和复制窗口这两条雪崩链路串起来。
- Schema 怎么设计:L6 的内嵌 vs 引用,判据是查询模式和数据增长边界,不是「关系看起来像一对多」。
- AI 场景怎么用:L8 的
$vectorSearch与 Atlas/自建版本绑定,先确认部署形态再决定。