20240417 Mongodb Engine

MongoDB支持多种存储引擎,最常用的是WiredTiger存储引擎和MMAPv1存储引擎。

  1. WiredTiger存储引擎(3.2开始为默认引擎)

    • 提供文档级锁定

    • 内存和磁盘的性能都很好

    • 支持文档级的并发

    • 高压缩率

    • 写入优化(日志先行)

    • 多版本控制(MVCC)

    • 事务支持(ACID)

  2. 内存存储引擎

    • 从 MongoDB Enterprise 版本 3.2.6 开始

    • 不维护任何磁盘数据

  3. MMAPv1存储引擎

    • 3.0以前版本的默认存储引擎,自4.0开始弃用

    • 对于大数据集的插入和查询性能较好,基于内存映射

    • 不支持文档级的并发写入,不支持事务

    • 集合级别的锁定

WiredTiger存储引擎基于B+Tree结构组织数据,相比MongoDB早期的MMAPv1存储引擎性能提升明显,且支持数据压缩,存储成本更低。

使用 B+ 树时,WiredTiger 以 page 为基本单位往磁盘读写数据。B+ 树的每个节点为一个 page,共有三种类型的 page:

  • root page(根节点) :B+ 树的根节点。
  • internal page(内部节点) :不实际存储数据的中间索引节点。
  • leaf page(叶子节点):真正存储数据的叶子节点,包含一个页头(page header)、块头(block header)和真正的数据(key/value),其中页头定义了页的类型、页中实际载荷数据的大小、页中记录条数等信息;块头定义了此页的checksum、块在磁盘上的寻址位置等信息。

可以在启动MongoDB时通过--storageEngine选项来指定存储引擎。例如,要使用WiredTiger存储引擎启动MongoDB,可以使用以下命令:

1
mongod --storageEngine=wiredTiger

内存引擎启动:

1
mongod --storageEngine inMemory --dbpath <path> --inMemorySizeGB <newSize>

如果你想要确认当前MongoDB实例使用的是哪种存储引擎,可以连接到数据库,并检查storageEngine的值:

1
db.serverStatus().storageEngine

要注意的是,一旦数据库实例初始化并开始使用特定存储引擎,你不能在运行时更改存储引擎。因此,在生产环境中选择存储引擎时,需要仔细考虑你的数据访问模式和需求。

参考