数据库的存储引擎组件,负责管理存储在内存和硬盘上的数据。MongoDB支持多个存储引擎,为特定的工作指派合适的存储引擎为您的用例可以显著提高应用程序的性能。
**MongoDB WiredTiger**存储引擎是主要的组件负责管理数据。MongoDB提供各种存储引擎,允许您选择一个最适合您的应用程序。
** WiredTiger存储引擎是Mongodb3.0新加的,在很普通的机器上就能超过2w的写频率,并发读写比以前提高了很多,mongodb3.2默认使用这个引擎。**
特性:
** 1、只支持64位系统**
**并发**
2、支持文档级别的并发(多用户可能同时操作同集合内不同文档)
3、对于大多数读写操作,wiredtiger优化了控制并发。它的锁包含,全局锁,数据库锁,文档级别锁。当存储引擎检查到两个操作冲突操作时,其中一个写操作会默认进行一次重试。
一些涉及到多个库的短时全局操作,任然需要一个实例级别的全局锁。例如删除一个集合,仍然需要数据库锁。
**快照和检查点**
wiredtiger使用多版本并发控制(MVCC),当开始一个操作时wiredtiger会给这个事物提供一个当前时间点的数据快照,内存中的快照数据提供一个一致性视图。
当数据写入硬盘时,wiredtiger将所有的数据以快照方式写入硬盘保证数据的一致。当前持久化的文件就是一个“检查点”,这个“检查点”需要确保和最新数据的一致性,这个“检查点”也可以唤作恢复点。
WiredTiger使用写前事务日志和检查点,以确保数据持久性。即使没有日志“检查点”也可以用于恢复数据。
即使写入新的“检查点”,之前的“检查点”依然有效,所以当mongodb终止或者在创建新的“checkport”发生错误时,重启后依然可以保留最近一次有效的“检查点”的数据,直到新的“检查点”可访问以后mongodb才会释放“旧检查点”。
MongoDB配置WiredTiger创建"检查点"(即写快照数据到磁盘)每隔60秒或2 g的journal data写到磁盘。这样就意味着
服务器突然宕机的话,这部分内存数据是会丢失的。
**Journal**
**journal** 是一个日志,在发生问题时候帮助你恢复数据。有几个可配置选项使你在平衡性能和可靠性之间调试适用于您的特定用例。
所有的“检查点”之间的修改都有日志的记录,可以通过这些记录恢复之前修改的数据到最近的检查点。
所以你会看到日志进程会频繁的把信息写到硬盘。
wiredtiger journal 默认使用快速压缩库写入。你可以修改“storage.wiredTiger.engineConfig.journalCompressor”设置。
**注意**
wiredtiger的最小日志记录是128byte,如果一条日志小于等于128byte将不记录。
如果单机的情况下,不使用journal将会意味着出现问题将会丢失一部分数据。
**压缩**
WiredTiger引擎支持所有的集合和索引压缩存储。这是以消耗额外的CPU为代价的来节省存储空间.
WiredTiger默认使用snappy算法压缩,也可以使用zlib。
参数介绍:
“[storage.wiredTiger.collectionConfig.blockCompressor](https://docs.mongodb.org/manual/reference/configuration-options/#storage.wiredTiger.collectionConfig.blockCompressor)”zlib算法压缩。
“[storage.wiredTiger.indexConfig.prefixCompression](https://docs.mongodb.org/manual/reference/configuration-options/#storage.wiredTiger.indexConfig.prefixCompression)”关闭索引压缩
**内存使用**
mongodb WiredTiger引擎和文件都需要在内存中缓存。
在mongodb3.2中变化较大,WiredTiger使用缓存将会更多,内存使用达到“60%-1G”或者1G。
而文件缓存则使用剩余的内存或者“WiredTiger”和其它进程释放的内存。
“[storage.wiredTiger.engineConfig.cacheSizeGB](https://docs.mongodb.org/manual/reference/configuration-options/#storage.wiredTiger.engineConfig.cacheSizeGB)"
![](http://new.nginxs.net/storage/74a5ad0d.jpg)
[[运维博客](http://new.nginxs.net)]