【问题标题】:Does the CAP theorem imply that ACID is not possible for distributed databases?CAP 定理是否暗示 ACID 对于分布式数据库是不可能的?
【发布时间】:2013-05-22 16:11:23
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    所以,要回答您的问题,这通常是营销废话。您需要真正触及表面,以了解解决方案究竟获得了什么,失去了什么。

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

    【讨论】:

    • 感谢您的回答!我还有一个问题:如果我们选择可用性,这意味着我们更喜欢速度 - 换句话说,如果我们有通信问题(分区),节点再次在线但它们不同步。或者,如果我们更喜欢(一致性)精确数据——例如,如果我们有百万欧元的交易等等......在这种情况下,我们将选择一致性。我对么?那是什么定理?它有名字吗? :)
    • @grep 是的,你是对的,但你不会这样做,因为选择其中一个需要权衡太多。现实世界比定理更复杂:)
    • 再次感谢您。使用 CAP 定理,我知道哪个数据库位于 CP(BigData、Mongo、Hbase)之间,哪个位于 AP(Riak、Cassandra、Dynamo)之间。如果我们使用新定理,一致性或可用性如何选择数据库?如果我们很难过 BigData、Mongo、Hbase 只有一致性,而 Dynamo、Riak、Cassandra 只有可用性,这是否正确?据我了解这是不正确的,我可以在某种程度上同时拥有它们。是真的吗?
    • @grep 我不能声称我知道所有这些,但是是的,这是真的。
    【解决方案2】:

    PACELC theorem extends CAP 谈论权衡,即使没有发生分区。分布式系统令人兴奋的见解之一是,当使用 RAFT 或 Paxos 等共识协议创建事务日志时,它们可以在不丢失一致性的情况下实现分区容错。 The Calvin protocol 将 RAFT 日志与确定性事务应用程序相结合。

    FaunaDB 实现了 Calvin,允许它维护具有严格序列化能力的 ACID 事务,即使在分区期间或在副本失败期间,只要副本的法定人数未分区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多