本文作者是来自Percona的支持工程师 Vinodh Krishnaswamy 和 Aayushi Mangal。主要介绍了MongoDB中两个引擎之间的差异,并在文章结尾处给出了表格对比总结。文章由腾讯云数据库团队翻译整理,全文约2050字,阅读需要5分钟。
在这篇文章中,我们将了解到MongoDB中MMAP和WiredTiger引擎之间的差异。很多客户都咨询过这两个引擎的问题,这篇文章将为你们解决难题。我们将告诉您这些引擎的主要特性,您可以根据自己的需求选择合适的引擎。
在MongoDB中,主要使用的是MMAPV1和WiredTiger引擎。当然,我们也可以使用其他引擎,如使用Percona Server for MongoDB(PSMDB)的rocksdb,以及使用MongoDB Enterprise版本的内存引擎。
MongoDB刚发布时,MMAPV1是默认引擎,它至今仍然是MongoDB发行版本的引擎。但根据MongoDB的计划,4.2版本之后将不再有MMAP。那些使用1.8版本的老哥用户可能会怀念MMAP。MongoDB收购了wiredTiger Inc(见https://www.mongodb.com/press/wired-tiger),从版本3.2开始,它成为MongoDB的默认引擎。WiredTiger引擎启用了多文档事务的引入,主要用于压缩和文档级锁定等功能。在这里,我们将看到wiredTiger和MMAPV1的主要功能,并将它们总结在文末的表格中。
MongoDB存储引擎用于管理内存和磁盘上的BSON数据,以支持读写操作。
MMAPV1:这是MongoDB的原始存储引擎,在第一个版本中被引入,但从版本4.0开始,它已被弃用
WiredTiger:这是MongoDB在3.0版本中引入的可插拔引擎,它成为3.2版本的默认存储引擎
MMAPV1:不支持数据压缩,它基于内存映射文件。所以当你可以将你的写集保存在内存中时它会很好用。它擅长处理大容量写入,读取和就地更新的工作场景。
WiredTiger:支持snappy和zlib压缩。因此,与MMAP相比,带有WiredTiger的MongoDB占用的空间非常小。它有自己的写缓存和文件系统缓存。
Snappy:这是默认算法,合理压缩的高效计算。具体算法参见here.
Zlib:以CPU为代价提高压缩率。具体算法参见 here.
让我们看一下支持每个引擎的相同数据和副本集成员的文件系统。


日志
MMAPV1:确保写入是原子的。 如果MongoDB在提交对数据文件的更改之前发生故障或终止,MongoDB可以使用日志文件将写操作应用于数据文件并保持一致状态。
WiredTiger:它使用写入之间的检查点,并且日志将持续检查点之间的所有数据修改。 因此,对于从数据库崩溃或突然终止的任何恢复,它使用自上一个检查点以来的日记条目。 在大多数情况下,此引擎不需要日志,只有在需要确保恢复到日志崩溃之前的最后一次成功写入之前,才启用日志。 否则,通常MongoDB可以从最后一个有效检查点恢复。 默认情况下,检查点每分钟发生一次。

MMAPV1:版本2.6之前:使用读写锁锁定,允许对数据库进行并发读取访问,但允许对单个写入操作进行独占访问。 当存在读锁时,许多读操作可能使用此锁。 但是,当存在写锁定时,单个写入操作将独占地保持锁定,并且没有其他读取或写入操作可以共享锁定。
从3.0开始:MMAPv1存储引擎在3.0版本系列中使用了集合级别锁定,这是对早期版本的改进,其中数据库锁定是最精细的锁定。
WiredTiger:支持文档级锁定。 对于大多数读写操作,WiredTiger使用乐观并发控制。 WiredTiger仅在全局,数据库和集合级别使用意图锁。
例如:从集合“testData”中删除值为{x:1}的文档,将在集合级别为每个存储引擎获取不同的写入“LOCK”。

MMAPv1:MongoDB自动使用计算机上的所有可用内存作为缓存。 系统资源监视器显示MongoDB使用大量内存,但其使用是动态的。 如果另一个进程突然需要服务器RAM的一半,MongoDB也会为该进程分配出缓存。搜索关注腾讯云数据库官方微信,立得10元腾讯云无门槛代金券,体验移动端一键管理数据库,学习更多数据库技术干货。
从技术上讲,操作系统的虚拟内存子系统管理着MongoDB的内存使用。 这意味着MongoDB将尽可能多地使用可用内存,并根据需要交换到磁盘。 具有足够大的内存来适应RAM中的应用程序工作数据集的部署将实现最佳性能。
WiredTiger:使用wiredTiger,MongoDB同时使用WiredTiger内部缓存和文件系统缓存。 通过文件系统缓存,MongoDB自动使用未被使用的所有空闲内存。 从3.4开始,WiredTiger内部缓存默认设置为以下两者中较大的一个:
以下是对两个引擎差异总结,可以通过表格进行快速查询。

以上信息并没有包含MongoDB中两个引擎的所有差异对比,如果您有补充的,欢迎在评论中发言和讨论。
往期推荐
《磊哥测评:自建数据库VS云数据库,到底怎么选?》
《云测评:RedisGraph 1.0的基准测试》
《磊哥测评之MongoDB篇》
《如何利用MongoDB打造TOP榜小程序》
《云MongoDB优化使LBS服务性能提升10倍》

羊毛速薅
腾讯云数据库新春采购秒杀低至2.8折,09:00, 11:00, 14:00, 16:00, 19:00每天五场秒杀嗨购新春!点阅读原文即可进入会场,记得定好闹钟抢购哦~

↓↓点这儿抄底价
好文和朋友一起看!
var first_sceen__time = (+new Date());if ("" == 1 && document.getElementById('js_content')) { document.getElementById('js_content').addEventListener("selectstart",function(e){ e.preventDefault(); }); } (function(){ if (navigator.userAgent.indexOf("WindowsWechat") != -1){ var link = document.createElement('link'); var head = document.getElementsByTagName('head')[0]; link.rel = 'stylesheet'; link.type = 'text/css'; link.href = "//res.wx.qq.com/mmbizwap/zh_CN/htmledition/style/page/appmsg_new/winwx45ba31.css"; head.appendChild(link); } })();
Aayushi Mangal
赞赏
长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
阅读原文
阅读
分享 在看
已同步到看一看
取消 发送
我知道了
确定

已同步到看一看写下你的想法
最多200字,当前共字 发送
已发送
确定
写下你的想法...
取消
确定
最多200字,当前共字
发送中
微信扫一扫 关注该公众号
微信扫一扫 使用小程序
即将打开""小程序
取消 打开