前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云测评 | MongoDB两代引擎谁更强?

云测评 | MongoDB两代引擎谁更强?

作者头像
腾讯云数据库 TencentDB
发布2019-05-16 15:00:20
1.6K0
发布2019-05-16 15:00:20
举报

本文作者是来自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中两个引擎的所有差异对比,如果您有补充的,欢迎在评论中发言和讨论。

往期推荐

《磊哥测评:自建数据库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字,当前共字

发送中

微信扫一扫 关注该公众号

微信扫一扫 使用小程序

即将打开""小程序

取消 打开

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云数据库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 存储引擎
  • 数据压缩
  • 数据目录
  • 日志目录
  • 锁和并发
  • 内存使用
  • 总结 MMAPV1 vs WiredTiger
    • 朋友会在“发现-看一看”看到你“在看”的内容
      • 朋友将在看一看看到
        • 发布到看一看
        相关产品与服务
        云数据库 MongoDB
        腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档