MongoDB3.0之后,引入了可插拔的存储引擎。3.2之前的存储引擎默认为MMAPv1、3.2之后默认的存储引擎为WiredTiger。
WiredTiger引擎
WiredTiger是个高性能的、可伸缩的、开源的数据存储引擎,它专注于多核伸缩性和最佳的内存使用。
注:书中使用大量的篇幅对比MMAPV1与WiredTiger的性能,由于从4.0后MMAPV1已经不建议使用,这里就不在赘述。
WiredTiger配置参数
- engineConfig.cacheSize 配置wiredTiger 使用内存的大小,可以加速数据的查询,默认是物理内存的一半,最少是1GB
- engineConfig.journalCompressor 配置压缩算法,默认snappy,也可以设置为none,获取最佳性能
- collectionConfig.blockCompressor 配置wiredTiger对集合数据的压缩算法,支持none 、snappy、zlib,默认是snappy
- indexConfig.prefixCompression 配置是否压缩索引数据,默认true
其他可插拔的存储引擎
RocksDB
由Facebook开发,基于Google的LevelDB数据库,受到Apache的HBase启发,RocksDB是个键值对存储库,通过LSM树来提供低延迟数据库。RocksDB的写入性能较高。
TokuteDB
是另外一个键值存储引擎,使用分形树索引来替换WiredTiger默认的B-树数据结构。
锁
在MongoDB3.0后的wiredTiger存储引擎支持文档级别的锁。