每当我读到有关NoSQL分布式数据库的内容时,他们都会提到CAP定理,这意味着在分区系统中,您可以拥有完全一致性,完全可用性或两者兼而有之,但绝不是完全一致。
我不清楚他们谈论的是什么类型的一致性:
第二种解释对我来说听起来很危险,并不是真的可以接受。第一种解释听起来可以接受,但是如何防止请求一组数据的客户端没有部分过时的数据和部分新数据?
仅提供部分一致性以及可能产生的负面影响有多危险?
答案 0 :(得分:2)
分布式数据库的一致性是一个巨大的问题,它意味着您的两个选择:某些地方的陈旧数据和部分完成的交易。我不会写一篇关于它的文章,因为它 是一个巨大的问题而且解决方案并不容易。但是,这里有一些关键短语。
最终的一致性是解决方案,但实施它听起来像一个大工作。实施的关键是幂等消息。让我们说一个完整的事务涉及更新机器A,B和C上的数据。你如何实际做到这一点?您开始在该地方发送消息,并继续发送消息,直到您收到确认收据和成功处理。您可以将消息发送给B两次,因为B从未收到消息,或者因为B的ack从未收到过。如果你发送了两次因为你从来没有得到确认,那么B最好再做一次正确的事情(可能会忽略它),然后给你发一个ack让你不再烦恼。
看起来像This is a pretty good article,从NoSQL的角度看它。任何搜索引擎中都隐藏着大量关于幂等信息的链接,所以我会让你根源。
最后说明:Pat Helland多年来一直从事分布式数据库工作(在微软和谷歌等地工作),最终得出的结论是,分布式数据库的一致性是不可能的,并且你最好通过Idempotent解决最终的一致性问题。消息。