所以,我正在研究MongoDB,这符合上层管理层决定采用开源并将现有产品数据库从SQL Server迁移到MongoDB并改进整个事物。请注意,我们的数据库应侧重于数据一致性和交易保证。
我发现这篇文章:Click here。该帖子摘要如下:
MongoDB声称非常一致,但有很多证据 最近已经证明在某些情况下不是这种情况(何时 发生网络分区,这可能在重负载下发生。这个 意味着你可能会丢失MongoDB所拥有的记录 被承认为“成功写作”。
就您的申请而言,如果您需要进行交易 保证(意思是如果你不能进行持久的写作,你需要 事务失败),你应该避免使用MongoDB。示例场景 强大的一致性和耐久性是必不可少的包括“制作 存入银行账户“或”创建出生记录“ 换句话说,这些是你会被打入的场景 如果您指示操作成功并且它已成为您的客户 没有。
所以,我的问题如下:
1)当前版本的MongoDB中“丢失的数据”仍然有效吗?
2)可以采取什么方法来确保MongoDB中的交易保证?
我很确定如果像PayPal这样的公司使用MongoDB,肯定有办法克服这些问题。
答案 0 :(得分:1)
之前已经讨论过该帖子中的引用(例如,这里有一个:MongoDB: Does Write Concern guarantee the write on primary plus atleast one secondary)。无需复制您的问题。
博客" Aphyr"大多数人使用这些文章来宣传它自己的技术(如果你阅读整个博客,你会发现他们有自己的市场数据库)。他们展示的每个数据库都会丢失除自己以外的数据。
2)可以采取什么方法来确保MongoDB中的事务保证?
我同意您应该在客户端代码中处理数据库问题,如果没有,那么在分区的情况下,您的客户端如何保持一致?
既然你不是哈利波特(是吗?)我会说你需要检查客户代码中抛出的异常并根据需要对它们作出反应。
1)"丢失数据"仍然在当前版本的MongoDB中有效吗?
至于他在2.4.3中提到的错误:他失败了(正如我在链接帖子中提到的那样)再次陈述错误引用,仍然没有评论。
除了2,000写入6,000?数据丢失比我在分区上的MySQL中看到的要少!所以不要太破旧。
我在自己的应用程序中没有注意到这种行为,从小型网站到极大型网站,我都没有注意到有人会重现该文章中显示的基准类型方案,我对此非常怀疑。
我很确定如果像PayPal这样的公司使用MongoDB,肯定有办法克服这些问题。
他们会进行严格的编码以确保分布式环境的一致性。
当然,他们会从为这种情况选择合适的技术开始......
答案 1 :(得分:0)
写关注参考
写入问题描述了MongoDB请求的确认级别,用于对独立mongod或副本集或分片集群的写入操作。在分片群集中,mongos实例会将写入问题传递给分片。