文章中如果有图看不到,可以点这里去 csdn 看看。从那边导过来的,文章太多,没法一篇篇修改好。

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 的提升总结

特性MMAPv1WiredTiger
锁粒度DB/collection 级文档级(更细粒度)
并发控制写操作容易阻塞MVCC,读写不互相阻塞
缓存操作系统内存映射WiredTiger 内部缓存 + OS Cache
压缩不支持Snappy/zlib 压缩
崩溃恢复日志有限,恢复慢WAL + checkpoint,恢复快
事务单文档原子性多文档事务(4.0+)
碎片化问题严重相对较轻,支持压缩和 compaction
多核利用一般优化并发,充分利用多核

四、总结

MongoDB 存储引擎经历了 MMAPv1 → 可插拔架构 → WiredTiger 默认化 → 全面事务化 的过程。
WiredTiger 的核心优势在于:

  • 文档级并发控制(高并发能力)
  • MVCC(读写分离,事务支持)
  • 写前日志 + checkpoint(持久化和恢复能力)
  • 压缩机制(磁盘利用率更高)
  • 可扩展性(多核优化,支撑大规模业务场景)

因此,WiredTiger 成为 MongoDB 的核心基石,支撑了 MongoDB 从早期 NoSQL 到现代分布式数据库的转型。

posted @ 2025-09-28 14:27  NeoLshu  阅读(1)  评论(0)    收藏  举报  来源