mongodb 核心设计和集群运维



  1. 引擎
  2. 索引
  3. 部署
  4. 复制
  5. 分片

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

20、Journal工作原理