绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
云测评 | MongoDB两代引擎谁更强?
2020-01-02 14:02:57

本文作者是来自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内部缓存默认设置为以下两者中较大的一个:

  • 50% of (RAM – 1 GB), or

  • 256 MB.


总结 MMAPV1 vs WiredTiger


以下是对两个引擎差异总结,可以通过表格进行快速查询。



以上信息并没有包含MongoDB中两个引擎的所有差异对比,如果您有补充的,欢迎在评论中发言和讨论。


分享好友

分享这个小栈给你的朋友们,一起进步吧。

腾讯云数据库
创建时间:2019-12-03 15:25:28
本栈主要分享云数据库技术前沿资讯、实战案例、数据库产品功能、应用场景和行业应用解读,帮助您根据实际业务需求进行数据库选型,更好的运维管理数据库。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 腾讯云数据库
    栈主

小栈成员

查看更多
  • 栈栈
  • 小尾巴鱼
  • youou
  • ?
戳我,来吐槽~