【发布时间】:2013-05-22 16:11:23
【问题描述】:
尽管有 CAP 定理,但仍有 NoSQL ACID (distributed) databases。这怎么可能? CAP 定理和(可能/不可能)是 ACID 之间的关系是什么?
分布式计算机系统不可能同时提供一致性, 可用性和分区容错性。
【问题讨论】:
标签: database nosql distributed-computing distributed-transactions acid
尽管有 CAP 定理,但仍有 NoSQL ACID (distributed) databases。这怎么可能? CAP 定理和(可能/不可能)是 ACID 之间的关系是什么?
分布式计算机系统不可能同时提供一致性, 可用性和分区容错性。
【问题讨论】:
标签: database nosql distributed-computing distributed-transactions acid
CAP 定理实际上有点误导。您可以拥有 CA 设计的事实是无稽之谈,因为当发生分区时,您必然会遇到关于一致性(例如数据同步问题)或可用性(延迟)的问题。这就是为什么有一个更准确的定理说明:
在分布式系统中的分区期间,您必须在一致性和可用性之间进行选择。
在实践中仍然没有那么简单。您应该注意,一致性和可用性之间的选择不是二元的。你甚至可以两者兼得。例如,关于 ACID,您可以使用 NoSQL 进行原子和持久事务,但为了更好的可用性而放弃了一定程度的隔离和一致性。然后可以将可用性同化为延迟,因为您的响应时间将取决于几个因素(最近的服务器是否可用?)。
所以,要回答您的问题,这通常是营销废话。您需要真正触及表面,以了解解决方案究竟获得了什么,失去了什么。
【讨论】:
PACELC theorem extends CAP 谈论权衡,即使没有发生分区。分布式系统令人兴奋的见解之一是,当使用 RAFT 或 Paxos 等共识协议创建事务日志时,它们可以在不丢失一致性的情况下实现分区容错。 The Calvin protocol 将 RAFT 日志与确定性事务应用程序相结合。
FaunaDB 实现了 Calvin,允许它维护具有严格序列化能力的 ACID 事务,即使在分区期间或在副本失败期间,只要副本的法定人数未分区。
【讨论】: