Wiredtiger 在MONGODB 中的疑问

本文探讨了MongoDB中的WiredTiger存储引擎,对比了其与MMAPv1的优势,包括多线程支持、压缩率提升、B+Tree缓存等特性,并分析了日志系统Journal和oplog的工作机制。

MongoDB 中也有类似MYSQL 的数据库引擎的插件化的概念,虽然MYSQL 被ORACLE 搞得现在对这个数据库的引擎认知都存在于INNODB,但实际上MYSQL 在之前的存储引擎还是丰富多彩的,MONGODB 的存储引擎也是如此,目前MONGODB 主推的(官方)的数据库引擎是 WIREDTIGER ,之前MONGODB 官方的数据库引擎是 MMAP1, 而实际上MONGODB 还有一个数据库引擎脚ROCKS DB,听说是不错,至少和WIRETIGER 平分秋色,甚至略胜一筹。

那今天我们主要来看看WIREDTIGER 为什么是目前MONGODB 的主力数据库引擎,有点在哪里,浅层的原理是什么。

下面的图是MONGO DB wiredtiger的数据库引擎的架构图。

可能看到图,传统DBA就会马上又一个反向,cursors ,一个性能差,有慢,应该被绝迹的词汇。 实际上在MONGODB 中,快速的返回结果其实cursors的功劳不小,首先不要用传统的数据库思维来去想MONGODB,他返回的数据结果集,要比传统的数据结果集大的多,(言外之意就是MONGODB 处理的数据量(吞吐)比传统数据库要大的多)。使用传统的方法,将结果集缓存在OUTPUT 这样显然对MONGODB 不是一个好的处理方式。

OK,我们不在此做过多纠缠,

和众多数据库一样,提高系统的性能,在于修改数据的时候并不是马上将磁盘的数据进行修改,而是通过多版本控制,来决定哪些数据应该被显示,哪些数据要被修改并刷盘,这里面通过 transactions 和  snapshots 来进行传统数据库的 MVCC的活动,而数据则通过 CACHE 给出。

同时wiredtiger与 mmvp1 引擎比较,有以下优势

1 比传统引擎更多使用 CPU CORES 和  内存

2 插入免锁逻辑,多线程不会阻塞

3 采用更高的压缩率,降低I/O的使用,提高I/O性能

4  将文件的 b+ TREE  放入 cache, 加快数据的读取

5 使用了Hazard pointers 来处理,dirty page 的问题,所以才成就了插入免锁逻辑

注:删除需要锁,所以MONGODB 中,删除操作应该好好考虑如何处理。

2 作为WIREDTIGER 中的两个日志系统,Journal and oplog ,系统他们的负责的任务是不同的,(如不清楚  Journal  & oplog 是什么请百度),那么这里有一个问题,Journal   和 oplog 在记录日志的物理顺序是否一致。

答案是,oplog 与实际的操作顺序是一致的而 Journal log 与操作结果的顺序一致。这也是由于两者在对MONGODB 数据库在功能上的主责不同。一个是负责系统crash后的恢复,自然以结果为ORDER ,而OPLOG 则是要对 REPL负责,所以操作的顺序是ORDER。

最后,mongodb 的高速插入与wiredtiger使用的 lSM 也有关系,找一个时间可以研究一下 LSM的原理,可以更加理解MONGODB 插入速度快的秘诀。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值