Section 12.1: WiredTiger
WiredTiger 支持使用 LSM 树来存储索引。当需要写入大量随机插入的数据时,LSM 树的写入速度更快。
在 WiredTiger 中,不存在就地更新。如果需要更新文档中的元素,则会插入一个新文档,同时删除旧文档。
WiredTiger 还提供文档级并发性。它假定两个写入操作不会影响同一个文档,但如果影响了,其中一个操作将被后退并在稍后执行。如果回退操作很少发生,这将大大提高性能。
WiredTiger 支持 Snappy 和 zLib 算法,用于压缩文件系统中的数据和索引。Snappy 是默认算法。它对 CPU 的消耗较少,但压缩率低于 zLib。
如何使用 WiredTiger 引擎
mongod --storageEngine wiredTiger --dbpath <newWiredTigerDBPath>
注意
1 mongodb 3.2 之后,默认引擎为 WiredTiger。
2 newWiredTigerDBPath 不应包含其他存储引擎的数据。要迁移数据,必须先转储数据,然后在新的存储引擎中重新导入。
mongodump --out <exportDataDestination>
mongod --storageEngine wiredTiger --dbpath <newWiredTigerDBPath>
mongorestore <exportDataDestination>
Section 12.2: MMAP
MMAP 是一种可插拔的存储引擎,以 mmap() Linux 命令命名。它将文件映射到虚拟内存,并优化读取调用。如果你有一个大文件,但只需要读取其中的一小部分,那么 mmap() 要比将整个文件带入内存的 read() 调用快得多。
它的一个缺点是不能并行处理同一个集合的两个写调用。因此,MMAP 具有集合级锁定(而不是 WiredTiger 提供的文件级锁定)。这种集合锁定是必要的,因为一个 MMAP 索引可以引用多个文档,如果这些文档同时更新,索引就会不一致。
Section 12.3: In-memory
所有数据都存储在内存(RAM)中,读取/访问速度更快。
Section 12.4: mongo-rocks
为与 Facebook 的 RocksDB 集成而创建的键值引擎。
Section 12.5: Fusion-io
闪迪创建的存储引擎,可绕过操作系统文件系统层,直接写入存储设备。
Section 12.6: TokuMX
由 Percona 创建的存储引擎,使用分形树索引。