Wiredtiger 在MONGODB 中的疑问_数据库

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 不是一个好的处理方式。

Wiredtiger 在MONGODB 中的疑问_数据_02

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 在记录日志的物理顺序是否一致。

Wiredtiger 在MONGODB 中的疑问_数据_03

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go