就个人而言,由于以下三个原因,我现在更喜欢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却闻所未闻。此外,对于这样的项目,迁移成本可能会非常昂贵。