MongoDB MMAPv1与WiredTiger存储引擎


25

在mongoDB3中出现了一个新的存储引擎:WiredTiger但是,MMAPv1仍然是Mongo中的默认选择

一个可能不会比另一个更好,这通常是一个用例问题,并为工作选择了正确的工具。但是,哪种发动机最适合什么工作?

实际上,虽然MMAPv1是默认引擎,但 WiredTiger在几乎每个领域似乎都更好。它具有与MMAPv1 plus相同的功能:

  • 更好的写入性能,
  • 文档级并发,
  • 压缩,
  • 快照和检查点系统。

我在MongoDB的博客上找到了一个比较表:

WiredTiger和MMAPv1比较

因此,除非您使用Solaris,否则是否有理由不选择WiredTiger?


编辑

这是两个视频,详细介绍了WiredTigerMMAPv1的内部 。


所有在这里的人...您可以访问blog.clevertap.com / ...,以获取有关该主题的很好的解释
realprashant

Answers:


26

就个人而言,由于以下三个原因,我现在更喜欢mmapv1存储引擎。

原因1:成熟度

不是说WiredTiger不成熟。但是mmapv1已广为人知,并且在上下,前后,上下等方面进行了全面的测试。WiredTiger最近有一些严重的问题(有关详细信息,请参见http://jira.mongodb.com),并且我不愿意让我的客户艰难地找到下一个问题。

原因2:功能

鉴于此,WT具有一些非常重要的功能。问题是:我还没有看到任何人从中受益。压缩?无论哪种方式,您都很难牺牲相当便宜的磁盘空间来获得性能。缺少用于扩展文档的文档迁移问题?好吧,我们仍然有16MB的大小限制,并增加了嵌入式文档的复杂性,尤其是在嵌入过度的情况下。

还有其他功能,但总的来说:到目前为止,我看不出它们多少好处。

原因3:总拥有成本

对于新项目,WT可能很好,尤其是从3.2开始,因为以下内容不适用。

进行数据迁移非常昂贵。它需要进行计划,所有利益相关者都必须同意该计划,必须制定并商定紧急应变计划,需要准备,执行和审查迁移。现在,将所需时间与参与此过程的利益相关者相乘,从而使数据迁移的成本飞涨。另一方面,投资回报似乎很小。如果考虑到这些因素,则可以扩展很多而不是进行迁移。给您一个印象:如果适当地计划,执行和审查了迁移,我估计每个利益相关者大约一个“人工周”。以每人每小时100美元的成本,仅涉及三个人(经理,DBA和开发人员),总计为12.000美元。请注意,这是一个保守的估计。

结论

以上所有这些因素使我得出结论,无论如何都不要使用WT。在这一刻。


更新资料

这篇文章已有几个月的历史了,因此值得更新

成熟期

我对成熟度的原始评论有些过时了。WiredTiger暂时没有任何重大问题,并且已成为MongoDB 3.2的默认存储引擎。

关于功能

我的原始评论仍然有效,恕我直言。

压缩

但是,当预算紧张,或更笼统地说,性能不是主要问题时,性能的折衷就很小,您基本上会在磁盘空间上对性能造成轻微影响(与未压缩的WT相比),要利用空闲的空间周围:CPU。

加密

MongoDB 3.2 Enterprise引入了加密WiredTiger存储的功能。对于具有增强的安全性需求的数据,这是一项杀手级功能,并且使WT从技术上(MMAPv1不支持加密)和概念上成为唯一的选择存储引擎。当然,尽管可能在某些环境中没有该选项,但请排除加密磁盘分区的可能性。

文件级锁定

我必须承认,我在上面的分析中基本上省略了WT的功能,主要是因为在我写原始答案时,它不适用于我或我的客户。

根据您的设置,主要是当您有多个并发写入客户端时,此功能可能会大大提高性能。

关于总拥有成本

进行迁移仍然很昂贵。但是,考虑到成熟度的更改和对功能的更改的看法,如果满足以下条件,则迁移可能值得投资:

  • 您需要加密(仅企业版!)
  • 性能不是您的首要考虑因素,从长远来看,使用压缩可以节省金钱(保守地计算)
  • 由于性能的提高可能会节省垂直或水平缩放比例,因此您有很多进程在同时写入。

结论更新

对于新项目,我现在使用WiredTiger。由于从压缩的WiredTiger存储器到未压缩的WiredTiger存储器的迁移非常容易,因此我倾向于从压缩开始以提高CPU利用率(“物有所值”)。如果压缩对性能或UX有显着影响,我将迁移到未压缩的WiredTiger。

对于有大量并发作者的项目,是否迁移的答案也几乎总是“是”,除非项目预算禁止投资。从长远来看,如果以其他合理的方式计划部署,则性能提升应该是值得的。但是,您需要在计算中增加一些开发时间,因为在某些情况下需要更新驱动程序,并且可能需要解决一些问题。

对于预算紧张且暂时无法提供更多磁盘空间的项目,可以选择迁移到压缩的WiredTiger,但是压缩会给CPU带来一点负担,而MMAPv1却闻所未闻。此外,对于这样的项目,迁移成本可能会非常昂贵。


谢谢Markus的协助。我理解你的论点。对于新项目,您甚至建议将默认值恢复为MMAPv1吗?我的意思是,如果要考虑性能,也可以完全禁用压缩。磁盘空间很便宜,但压缩可能有助于将工作集放入RAM中,从而提高性能。还是我错了?
Buzut 2015年

1
据我所知,压缩仅应用于数据文件。至于新项目,让我这样说:我要做出管理决定,展示优缺点。我个人在其中一个项目中使用了WT,但尚未遇到问题,但可能还有其他因素,例如SLA(根据mmapv1的经验我可以算得上不错),预算紧张(这要求压缩WT来处理)。节省磁盘空间)和许多其他因素。权衡风险和机遇不是DBA的决定。DBA必须提供拨打电话所需的信息。
Markus W Mahlberg 2015年

1
本文似乎表明索引的存储方式是一个巨大的好处,因为它可以将索引占用的空间减少10倍:ilearnasigoalong.blogspot.com/2015/03/…。磁盘空间很便宜,但ram却不是。
BT

我对您对功能的观点有些困惑,您是说MMAPv1具有WiredTiger没有的功能吗?如果该部分再清楚一点,那就太好了。
英国电信2015年

@BT一点也不。我要说的是WT具有一些非常酷的功能,在某些用例中可能会有所帮助,但总的来说不是。在数据存储方面,我更喜欢经过考验的存储引擎,而不是最前沿的引擎。如文章所述:是的,可以通过前缀压缩来节省RAM,如果没有其他问题,这可能是一个好主意。想象一下,您可以在数据丢失或性能问题上保持可靠。
Markus W Mahlberg 2015年

5

我的两分钱:

WiredTiger中的日记功能会在硬关闭中丢失更新,因为它使用内存中缓冲来存储日记记录。

在两次写操作之间,虽然日记记录保留在WiredTiger缓冲区中,但是在mongod硬关闭后,更新可能会丢失。

MMAPv1中的日记功能会将更改写入磁盘日记文件中。

如果mongod实例在未将写入应用于数据文件的情况下崩溃,则日志可以将写入重播到共享视图,以最终写入数据文件。


4

我们从MMAPv1转移到WiredTiger,从而将性能提升了7倍至10倍。当WiredTiger缓存达到100%时,MongoDB会锁定,因此我们不得不恢复到MMAPv1。我们在这里记录了我们的经验-https: //blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/


2
不错的文章。Kinda让我想起Uber在2013年从MySQL到PostgreSQL,然后在2016
MySQL。– RolandoMySQLDBA 16/09/28

很好地解释我们也有与有线老虎一样的体验,因此revreted到MMAPV1
viren
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.