插件式存储引擎API
插件式存储引擎API的引入为处理更多不同类型的业务提供了无限可能,内存存储引擎、事务存储引擎甚至Hadoop在未来都有可能接入进来。
MMAP存储引擎
缺陷:耗费磁盘空间和内存空间且难以清理,库级别锁,存储引擎消耗内存
WiredTiger存储引擎
- 文档级别并发控制
通过MVCC实现文档级别的并发控制,即文档级别锁;
提升数据库读写性能的同时,大大提高了系统的并发处理能力; - 磁盘数据压缩
支持对所有集合和索引进行Block压缩和前缀压缩(如果数据库启用了journal,journal文件一样会压缩),已支持的压缩选项包括:不压缩、Snappy压缩和Zlib压缩;
默认:Snappy压缩;
Snappy压缩速度快,压缩率OK,而Zlib压缩率高,CPU消耗多且速度稍慢;
关于journal查看官网
数据存储
旧版本Mongo在数据库级别分配文件,数据库中的所有集合和索引都混合存储在数据库文件中,导致占用的磁盘空间也很难及时自动回收;
在集合和索引级别分配文件,数据库中的所有集合和索引均存储在单独的文件中,集合或者索引删除后,对应的存储文件随即删除;
由于存储方式不同,低版本的数据库无法直接升级到WiredTiger存储引擎,只能通过导出导入数据的方式来实现。可配置内存使用上限
内存使用容量配置,storage.wiredTiger.engineConfig.cacheSizeGB和 [–wiredTigerCacheSizeGB参数,默认值为物理内存大小的一半;
MongoDB 3.0的一些主要特性和修改
使用createIndexes命令可以同时建立多个索引,并且只扫描一遍数据,提升了建索引的效率
MongoDB 4.0的一些主要特性和修改
- 内部缓存
同时使用WiredTiger内部缓存和文件系统缓存,从MongoDB 3.4开始,是两者中的较大者:50%(内存大小 – 1 GB)或 256 MB - 默认对索引前缀压缩,使用 db.collection.stats()方法并检查返回文档中的 indexSizes字段;