CAP定理是否意味着ACID不可能用于分布式数据库?

时间:2013-05-27 19:23:02

标签: database nosql distributed-computing distributed-transactions acid

尽管有CAP定理,仍有NoSQL ACID (distributed) databases。这怎么可能? CAP定理与(可能/不可能)是ACID之间的关系是什么?

  

分布式计算机系统不可能同时提供一致性,   可用性和分区容差。

2 个答案:

答案 0 :(得分:8)

CAP定理实际上有点误导。您可以拥有CA设计的事实是无稽之谈,因为当发生分区时,您必然会遇到有关一致性(例如数据同步问题)或可用性(延迟)的问题。这就是为什么有一个更准确的定理说明:

在分布式系统中的分区期间,您必须在一致性可用性之间进行选择。

仍在实践中并非那么简单。您应该注意,一致性和可用性之间的选择不是二进制的。你甚至可以有一定程度的两者。例如,关于ACID,您可以使用NoSQL进行原子和持久事务处理,但是会因为更好的可用性而丧失一定程度的隔离和一致性。然后,可用性可以被同化为延迟,因为您的响应时间将取决于几个因素(最近的服务器是否可用?)。

所以,回答你的问题,这通常是营销废话。你需要实际划伤表面,看看解决方案正在获得和没收。

如果您想要更深入的解释,可以查看hereherehere

答案 1 :(得分:2)

PACELC theorem extends CAP讨论权衡取舍,即使未发生分区也是如此。分布式系统令人兴奋的见解之一是,当使用共识协议(例如RAFT或Paxos)创建事务日志时,可以使它们具有分区容忍性而不会失去一致性。 The Calvin protocol将RAFT日志与确定性交易应用程序结合在一起。

FaunaDB实现了Calvin,即使在分区或副本失败期间,只要不对法定数量的副本进行分区,它也可以保持严格序列化的ACID事务。