1

每当我读到有关 NoSQL 分布式数据库的内容时,他们都会提到 CAP 定理,这意味着在分区系统中,您可以具有完全一致性、完全可用性,或者两者兼而有之,但永远不能完全两者兼而有之。

我不太清楚的是他们在谈论什么类型的一致性:

  1. 是否是数据新鲜度的一致性,某些客户端可能会获得比其他客户端更旧的数据?
  2. 还是在事务可能仅部分完成的意义上的一致性,这可能会使数据处于不一致的状态?

第二种解释对我来说听起来很危险,而且不是真的可以接受。第一种解释听起来可以接受,但是您如何防止请求一组数据的客户端没有提供部分过时的数据和部分新鲜的数据?

只提供部分一致性有多危险,可能的负面影响是什么?

4

1 回答 1

2

分布式数据库的一致性是一个巨大的问题,它意味着您的两种选择:某些地方的数据陈旧,以及部分完成的事务。我不会写一篇关于它的文章,因为它一个巨大的问题,而且解决方案并不容易。但是,这里有一些关键短语。

最终一致性是解决此问题的方法,但实施它听起来像是一项艰巨的工作。实现的关键是Idempotent Messages。假设一个完整的事务涉及更新机器 A、B 和 C 上的数据。您实际上是如何做到的?您开始在该地方发送消息,并继续发送它们,直到您收到接收确认和成功处理。您可能会两次将消息发送给 B,因为 B 从未收到消息,或者因为 B 的 ack 从未收到。如果您因为从未收到确认而发送了两次,那么当 B 再次收到确认时,最好做正确的事情(可能是忽略它),并向您发送确认,这样您就不再打扰它了。

这是一篇相当不错的文章,它看起来像,而且它从 NoSQL 的角度来看。任何搜索引擎中都隐藏着大量关于幂等消息的链接,所以我会让你四处寻找。

最后一点:Pat Helland 在分布式数据库方面工作了多年(在微软和谷歌等地)最终得出结论,分布式数据库的一致性是不可能的,你最好通过幂等消息满足最终一致性。

于 2014-11-12T16:40:54.227 回答