上下文注意事项:
这个问题是在 2012 年提出的,但直到今天仍然看到流量和投票。最初的答案是专门驳斥在问题发生时流行的特定帖子。自从写下这个答案以来,事情已经发生了巨大的变化(并且还在继续变化)。与 2012 年相比,MongoDB 无疑变得更加耐用和可靠,即使是像基本日志这样的东西也相对较新。我对这个答案投了反对票和评论,因为人们觉得我没有解决名义问题(不是细节)的当前(对于当前的给定值)一般答案:“丢失的数据批评仍然有效吗?”。我试图在下面的更新中澄清,但这个问题基本上没有完美的答案,这取决于你的观点,你的期望是什么,你使用的是什么版本,
原答案:
MongoDB 首席技术官兼联合创始人艾略特·霍洛维茨(Eliot Horowitz)在此处逐点揭穿了该特定帖子:
http://news.ycombinator.com/item?id=3202959
这里也有一个很好的总结:
http://www.betabeat.com/2011/11/10/the-trolls-come-out-for-10gen/
简短的版本是,看起来这基本上是有人在吸引注意力(成功地),没有确凿的证据或佐证。过去曾发生过真正的事件,随着产品的发展(例如,参见 1.8 中对日志的介绍)或发现并修复了更具体的错误,这些事件已得到处理。
免责声明:我确实为 MongoDB(以前的 10gen)工作,并且喜欢 philnate 来到这里并首先独立反驳这一事实 - 这可能比其他任何东西都更能说明产品:)
更新:2013 年 8 月 19 日
我最近在这个答案上看到了很多活动,我认为这与SERVER-10478中的错误公告有关- 这肯定是一个边缘案例,但我仍然建议任何使用大文档分片的人尽快升级到 v2.2.6 和 v2.4.6,其中包含此问题的修复程序。
更新:2017 年 3 月 24 日
我不再为 MongoDB 工作,但仍然支持这个答案。鉴于此答案继续获得(和否决)选票并收到很多意见,我想在这篇文章中指出人们,它显示了自提出这个问题以来 MongoDB 取得的进展。该数据库现在通过了Jepsen测试,并将测试集成到其构建过程中,还有很多更成熟的系统没有通过。2017 年仍在敲打数据丢失鼓的人真的没有受到关注。
更新:2020 年 5 月 24 日
Jepsen重新分析了 MongoDB 4.2.6,因为 MongoDB 现在提供“完整的 ACID 事务”,虽然它在某些方面变得相当技术性,但如果您担心 MongoDB 中的数据丢失,我强烈建议您阅读这篇文章(我建议您查看您使用 Jepsen 测试的任何数据库,您可能会对它们的弱点感到惊讶)。该报告总结了默认读写问题的弱点,讨论了具有适当读写问题的非事务读写的可靠性,解决了文档中的缺陷,然后提供了有关测试新问题时遇到的问题的重要细节ACID 事务(以及相关的读/写问题)。
那么,您仍然可以使用 MongoDB 丢失数据吗?是的,尤其是默认设置,但大多数数据库都是如此。当这个问题被回答时,事情比他们回来时要好得多,并且这些功能具有更高的可靠性和耐用性,而且它们似乎有效(交易除外)。我的建议是了解您操作配置的限制,然后确定您的产品/业务/用例是否可以接受数据丢失风险。