MongoDB 存储引擎的演进历程 & WiredTiger 的特性与机制
一、MongoDB 存储引擎迭代历程
MongoDB 在发展过程中,多次更换和迭代存储引擎,以适应数据规模和业务需求的快速增长:

1. MMAPv1 引擎(默认至 3.2)
-
设计背景:MongoDB 初期的默认存储引擎,基于内存映射文件(memory-mapped file)。
-
特性:
- 文档级存储,集合数据直接映射到文件。
- 写操作需要加全局锁或数据库级锁(后来优化到 collection 级锁),并发性有限。
- 支持预分配数据文件,保证写扩展性能。
- 缺点:更新和删除会导致碎片化严重;大规模写入时性能下降。
2. 早期可选引擎(3.0 引入)
MongoDB 3.0 开始引入可插拔存储引擎架构,用户可选择不同引擎。
-
MMAPv1:继续支持,但逐渐被淘汰。
-
WiredTiger(3.0 作为默认引擎引入):目标是高并发和高压缩比。
-
其他实验性引擎:
- TokuMX(基于 fractal tree,第三方扩展)。
- RocksDB 引擎(社区实验性尝试)。
- In-Memory 引擎(MongoDB 3.2 后可选)。
3. WiredTiger 成为主流(3.2+)
- 从 MongoDB 3.2 开始,WiredTiger 成为默认引擎。
- 提供文档级锁,取代 collection/db 级锁,极大提升并发。
- 提供更优的压缩机制和内存管理,适合大规模数据存储。
4. 后续发展
- MMAPv1 在 MongoDB 4.2 被彻底移除。
- WiredTiger 持续迭代,加强事务支持、分布式一致性和多核性能。
- MongoDB 4.0 起支持 多文档事务(ACID),依赖 WiredTiger 的 WAL 机制。
- MongoDB 4.2 引入可插拔加密存储引擎(Encryption at Rest)。
- MongoDB 5.0+ 强化 WiredTiger 在副本集与分片场景下的事务性能。
二、WiredTiger 引擎的核心特性

WiredTiger 是一个高性能存储引擎,由 MongoDB Inc. 收购的 WiredTiger 公司开发。它具备以下特性:
1. 并发控制:文档级锁
-
MMAPv1 使用 collection/db 级锁,并发差。
-
WiredTiger 使用 文档级别的并发控制:
- 基于 乐观并发控制 (Optimistic Concurrency Control, OCC)。
- 多线程可同时访问不同文档,避免全表阻塞。
- 通过 Latch-free/Lock-free 设计 在多数读场景中减少锁冲突。
2. 写前日志(WAL, Write-Ahead Logging)
- 保证崩溃恢复与持久性。
- 所有修改先写入日志,再落盘。
- 结合 checkpoint 机制,减少频繁 fsync 的开销。
3. 多版本并发控制(MVCC)
- 每个读操作基于数据快照,不会阻塞写操作。
- 事务在开始时获取一致性视图,保证快照隔离(Snapshot Isolation)。
- 提供与关系型数据库类似的事务模型(MongoDB 4.0 起支持多文档事务)。
4. 压缩与存储效率
-
内置 两种压缩算法:
- Snappy:轻量、快速,适合通用场景。
- zlib:压缩率高,适合存储密集型场景。
-
数据文件和索引均可单独配置压缩方式。
-
减少磁盘空间使用,提高 I/O 效率。
5. 内存与缓存管理
- WiredTiger 使用 内部缓存(类似于 buffer pool,但不是 mmap 直映射)。
- 典型大小:可用内存的 50%(默认策略)。
- 使用 LRU 策略管理页缓存,冷热数据分离。
- 避免了 MMAPv1 的 “全量依赖操作系统缓存” 的问题。
6. Checkpoints 与崩溃恢复
- 定期创建一致性 checkpoint(快照)。
- 恢复时先加载 checkpoint,再回放 WAL。
- 避免长时间的恢复过程,降低宕机恢复成本。
7. 事务支持
- WiredTiger 原生支持 ACID。
- MongoDB 3.x 使用单文档事务,4.0 扩展为多文档事务。
- MVCC + WAL 提供可靠的事务保证。
8. 可扩展性与并发优化
- 设计面向多核:读写操作可分散在多个 CPU 核心。
- 并发写性能远超 MMAPv1。
- 在分布式环境(分片、副本集)下提供更稳定的一致性基础。
9. 数据加密(Encryption at Rest)
- MongoDB 3.2+ 企业版支持。
- WiredTiger 集成 AES256 加密,提供数据文件透明加密。
三、WiredTiger 相比 MMAPv1 的提升总结
| 特性 | MMAPv1 | WiredTiger |
|---|---|---|
| 锁粒度 | DB/collection 级 | 文档级(更细粒度) |
| 并发控制 | 写操作容易阻塞 | MVCC,读写不互相阻塞 |
| 缓存 | 操作系统内存映射 | WiredTiger 内部缓存 + OS Cache |
| 压缩 | 不支持 | Snappy/zlib 压缩 |
| 崩溃恢复 | 日志有限,恢复慢 | WAL + checkpoint,恢复快 |
| 事务 | 单文档原子性 | 多文档事务(4.0+) |
| 碎片化问题 | 严重 | 相对较轻,支持压缩和 compaction |
| 多核利用 | 一般 | 优化并发,充分利用多核 |
四、总结
MongoDB 存储引擎经历了 MMAPv1 → 可插拔架构 → WiredTiger 默认化 → 全面事务化 的过程。
WiredTiger 的核心优势在于:
- 文档级并发控制(高并发能力)
- MVCC(读写分离,事务支持)
- 写前日志 + checkpoint(持久化和恢复能力)
- 压缩机制(磁盘利用率更高)
- 可扩展性(多核优化,支撑大规模业务场景)
因此,WiredTiger 成为 MongoDB 的核心基石,支撑了 MongoDB 从早期 NoSQL 到现代分布式数据库的转型。
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19120284

浙公网安备 33010602011771号