医院设计网站建设,福田欧曼自卸车,河北建设网工程信息网,广州百度推广外包http://docs.mongoing.com/manual-zh/tutorial/perform-two-phase-commits.html要么操作全都执行#xff0c;要么都不执行#xff0c;不能执行一半#xff0c;改了几条数据了#xff0c;看哎哟好像不对#xff0c;那扔着吧。Consistency 在数据库领域的意思跟在分布式系统…http://docs.mongoing.com/manual-zh/tutorial/perform-two-phase-commits.html要么操作全都执行要么都不执行不能执行一半改了几条数据了看哎哟好像不对那扔着吧。Consistency 在数据库领域的意思跟在分布式系统里的意思不一样指数据的外部约束有没有满足比如帐户之间转账不能最后总和还是负数或者超过原来的总和了。那文档中的办法是怎么做的呢简单说就是在执行操作之前记下来要做什么以后可以 redo。然后保证每个操作都是 幂等的 就是说重复执行也没事。比如赋值是幂等的但是加一个数就不是幂等的。利用 MongoDB 提供的单文档的原子性使用一些辅助的数据做到幂等最后把辅助的数据清除掉。如果你的操作本身就是幂等的那就不需要辅助数据了。如果要 undo也是可能的那就要记下如何 undo。但是 ACID 中的 Isolation 是没有的也就是说事务之间有交叉别的并发操作可以看到中间不一致的状态上面说的外部约束只能最终得到保证。比如说事务 T1 包括 (张三加100李四减100)事务 T2 包括 (张三加200李四减200)如果不加以限制可能的顺序是1.T1 (张三加100)2.T2 (张三加200)3.T2 (李四减200)4.T1 (李四减100)T2 执行的时候可以读取并修改 T1 的中间结果在转账这个问题上没有大问题因为加减是 可交换 的操作先后不影响最终结果。但是如果我们把事务改成 T1 (张三 100李四 100)和T2 (张三 200李四 200) 这样最终的结果就可能是 (张三 200李四 100)有可能就不满足一致性了。但是如果能在应用里保证顺序地执行这两个事务问题就避免了。大家也了解 Isolation 有几个级别还有多版本等更复杂的。传统数据库在单机上也会在更强的 Isolation 和性能之间做权衡提供不同的级别可选。这一点在分布式系统中被称作 Consistency实现起来的代价就更高了所以 MongoDB 不支持。不过对大多应用这并不是太大的问题1.可能异常情况在逻辑上也是可以接受的比如微信群发每个人收到的顺序并不一样。2.可能逻辑上并发就是不可能的比如一个用户只能修改自己的数据比如只有一个线程写数据。3.或者把需要的数据放到一个文档里对单文档MongoDB 保证原子性别的操作也不可能看到文档一半被改了。4.或者可以在应用上层发现并解决。比如支付宝转账就自己实现了一套一致性协议1分钟之内可以保证这一笔数据一致了。对你的要求如果可以通过修改数据模型让改动在一个文档里就方便了。最好是看看你具体的需要和应用的假设分析分析可能出现的异常情况最后想办法。还有一个办法贵司可以购买 MongoDB 的支持服务针对你现在的产品阶段和需求 (开发维护咨询培训)提供不同类型的专业级支持比再请个程序员 / DevOp / DBA 便宜靠谱多了。