- 引擎
- 索引
- 部署
- 复制
- 分片
19、MongoDB存储引擎
MongoDB从3.0开始引入可插拔存储引擎的概念。目前主要有MMAPv1、WiredTiger 存储引擎可供选择。3.2之前,MMAPv1是默认存储引擎,它采用linux的内存映射技术,但一直饱受诟病;3.4以上版本默认的存储引擎是 WiredTiger,相对于MMAPv1其具有如下优势:
- 读写性能更好,WiredTiger能更好的发挥多核系统的处理能力;
- MMAPv1殷勤使用表级锁,WiredTiger使用文档级锁;
- 相比MMAPv1存储,索引时WiredTiger使用前缀压缩,更节省对内存的损耗;
- 提供压缩算法,可以大大降低对硬盘资源的消耗,节省60%以上的硬盘资源;
WiredTiger存储引擎
- Concurrency 并发,文档级别
- Snapshots and Checkpoints 快照和检查点
- Journal 在检查点之间把操作以日志的方式写入journal,用来恢复检查点之间的数据
- Compression 压缩算法,节约硬盘
- Memory Use 使用内存
Journal
恢复检查点之间的数据,默认压缩算法snappy 最小的记录文件128B 如果内容小于128B不会采用压缩算法
压缩算法
消耗CPU资源进行计算,来减少存储空间的消耗
分块压缩 -> 压缩collection集合的数据 -> snappy压缩算法 -> 索引(前缀压缩)
设置collection压缩算法:storage.wiredTiger.collectionConfig.blockCompressor
设置index压缩算法:storage.wiredTiger.indexConfig.prefixCompression
设置可用内存大小:storage.wiredTiger.engineConfig.cacheSizeGB
MMAPv1存储引擎
- Journal
- 每60s从journal写入磁盘一次
- storage.syncPeriodSecs 设置写Journal文件的时间间隔
- storage.journal.commitIntervalMs 设置写Journal文件的时间间隔
- 这些是理论值,实际可能更快更频繁的刷新数据
- Record Storage
- MongoDB在磁盘中都是连续的存储,如果数据的修改使得空间变大或变小,就不得不移动数据,非常消耗资源
- Memory Use
InMemory存储引擎
- Concurrency
- Memory Use