mongodb主要利用存储引擎来管理数据。mongodb为我们提供了多种存储引擎,我们可以根据不同需求来选择最合适的一个。
一、mongodb存储引擎种类
mongodb主要有3种存储引擎,分别是:
(1) WiredTiger
(2) MMAPv1
(3) In-Memory
下面分别介绍这三种存储引擎。
二、WiredTiger
MongoDB 3.0版本开始启用,64位版本。
MongoDB 3.2 成为默认存储引擎
(1) 文档级别的并发
WiredTiger 对写操作执行文档级别的并发控制,也就是说,在同一时间,可以修改一个集合中的不同文档。
针对大多数的读写操作,WiredTiger采取乐观的并发控制机制。WiredTiger 在全局、数据库和集合级别身上仅使用意向锁。当存储引擎检测到两个操作产生冲突时,其中一个操作会引发一个写冲突,促使mongodb显式的的重新执行该操作。
一些全局的操作,典型的有涉及多个库的短暂操作,需要实例锁;
一些像删除集合的操作,还需要排他锁。
(2) 快照和检查点
WiredTiger 使用多版本的并发控制(MVCC)。
一个操作开始时,WiredTiger 会为事务提供一个实时的数据快照,快照呈现内存中数据的一致性视图。
将数据写入磁盘时,WiredTiger 以一致性的方式将快照中的所有数据写入磁盘。检查点确保数据文件中所有的数据是一致的,并且包含最后一个检查点。检查点可以作为回复数据的点。mongodb配置WiredTiger 来创建检查点(即将快照数据写入磁盘),创建的时机是:每60秒或者当日志文件达到2G。
在写一个新检查点的过程中,上一个检查点仍然是有效的,如果写的过程中出现宕机或者其他异常,一旦重启成功,mongodb会从上一个有效的检查点恢复数据。
当WiredTiger的元数据表关联到新的检查点时,该新的检查点才是可访问和持久的,此时,会释放老检查点的页。
(3) 日志文件系统Journal
默认提交时间间隔为100毫秒。
WiredTiger使用预写事务日志与检查点结合的方