Mongodb--存储引擎

综述

mongodb 3.0 的存储引擎默认是MMAPV1,还有一个新引擎wiredTigger,wiredTigger具有很高的性能。建议在生产环境上升级到wiredTigger。

MMAPV1引擎

mongodb原生的存储引擎,比较简单,直接使用系统级的内存映射文件机制。对于insert,read,update(upate 不导致文档的size变大)具有较高的性能。

MMAPV1并发级别

支持collection级别,对于同一个collection同时只能有一个write操作执行。
此引擎不会使用到swap空间。

wiredTigger引擎

是Mongodb3.0后新增的引擎,无论在read、insert、update上都有很好的性能。所有的insert都是“文档”级别的lock。因此多个客户端可以同时更新collection中的document。在生产环境下,更多的内存可以有效提升wiredTigger的性能,因为他是IO多线程。wiredTigger不会像MMAPV1那样尽可能的耗尽内存,它可以通过在配置文件中指定“cacheSizeGB”参数来设定引擎使用的内存量。此内存用于缓存工作集(索引,namespace,未提交的write,query缓冲等)。

journal就是一个预写事务日志,来确保数据的持久性,wiredTiger每隔60秒(默认)或者待写入的数据达到2G时,mongodb将对journal文件提交一个checkpoint(检测点,将内存中的数据变更flush到磁盘中的数据文件中,并做一个标记点,表示此前的数据表示已经持久存储在了数据文件中,此后的数据变更存在于内存和journal日志)。对于write操作,首先被持久写入journal,然后在内存中保存变更数据,条件满足后提交一个新的检测点,即检测点之前的数据只是在journal中持久存储,但并没有在mongodb的数据文件中持久化,延迟持久化可以提升磁盘效率,如果在提交checkpoint之前,mongodb异常退出,此后再次启动可以根据journal日志恢复数据。journal日志默认每个100毫秒同步磁盘一次,每100M数据生成一个新的journal文件,journal默认使用了snappy压缩,检测点创建后,此前的journal日志即可清除。mongod可以禁用journal,这在一定程度上可以降低它带来的开支;对于单点mongod,关闭journal可能会在异常关闭时丢失checkpoint之间的数据(那些尚未提交到磁盘数据文件的数据)

wiredTigger的存储引擎图

这里写图片描述

wiredTigger cache的数据结构

wiredTigger cache的内部存储结构使用Btree的方式进行组织。每个树节点为一个page。叶子节点是真正存储数据的节点。btree的数据以page为单位按需写入磁盘或从磁盘读入页。

参考:http://shift-alt-ctrl.iteye.com/blog/2255580
http://www.mongoing.com/archives/2540

猜你喜欢

转载自blog.csdn.net/ai_xiangjuan/article/details/78545041
今日推荐