MongoDB 存储引擎
Contents
20240417 Mongodb Engine
MongoDB支持多种存储引擎,最常用的是WiredTiger存储引擎和MMAPv1存储引擎。
-
WiredTiger存储引擎(3.2开始为默认引擎)
-
提供文档级锁定
-
内存和磁盘的性能都很好
-
支持文档级的并发
-
高压缩率
-
写入优化(日志先行)
-
多版本控制(MVCC)
-
事务支持(ACID)
-
-
-
从 MongoDB Enterprise 版本 3.2.6 开始
-
不维护任何磁盘数据
-
-
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,可以使用以下命令:
|
|
内存引擎启动:
|
|
如果你想要确认当前MongoDB实例使用的是哪种存储引擎,可以连接到数据库,并检查storageEngine的值:
|
|
要注意的是,一旦数据库实例初始化并开始使用特定存储引擎,你不能在运行时更改存储引擎。因此,在生产环境中选择存储引擎时,需要仔细考虑你的数据访问模式和需求。