CAP 定理对我来说似乎是合乎逻辑的。我明白那个:
如果我在分布式系统上具有一致性,我必须等待所有事务。ACID 的成本是在所有网络上复制数据的时间。
但是 Marklogic 怎么能两者兼得。ACID 和分布式系统没有延迟?
那么是否可以在同一个数据库上拥有 BASE 和 ACID 属性?
那么CAP定理错了吗?
CAP 定理对我来说似乎是合乎逻辑的。我明白那个:
如果我在分布式系统上具有一致性,我必须等待所有事务。ACID 的成本是在所有网络上复制数据的时间。
但是 Marklogic 怎么能两者兼得。ACID 和分布式系统没有延迟?
那么是否可以在同一个数据库上拥有 BASE 和 ACID 属性?
那么CAP定理错了吗?
CAP Theorem 中的可用性是关于分区两侧的主机,而不是关于整个系统。
在 CAP Theorem 中,如果网络分区任一侧的所有主机都可以继续接受读取和更新事务,则您是“可用的” 。我们的大多数客户并不关心所有主机在面对网络分区时是否仍然可用。他们关心整个数据库在网络分区期间保持可用。因此,如果集群已经复制或共享数据,使得分区两边有足够的数据继续为查询提供服务,并且足够聪明地知道分区的哪一边应该保持可用,哪一边应该优雅地退出,那么面对网络分区,数据库可以保持可用,即使所有主机都不可用。这就是 MarkLogic 在集群中所做的事情。
在集群之间,MarkLogic 有很多选项可以让您尽可能接近绝对一致。我们使用异步复制在集群之间移动数据,因此如果集群之间存在网络分区,那么这些集群之间的数据可能会不一致。您可以控制延迟限制多长时间,以便您可以调整它,如果您需要集群之间的绝对一致性,我们也有办法实现这一点。
底线是:
希望有帮助。
CAP 定理没有错,只是过时了。以下是作者的更新:CAP 十二年后:“规则”是如何改变的。
MarkLogic 通过 MVCC 支持 ACID 属性。如果您愿意,您可以将其配置为使用 BASE 属性。据我了解,关键是针对您的生产要求进行设计和优化。MarkLogic 有许多可用的复制功能,随着我们的客户解决部署全球分布式集群的实际问题,我们不断地添加到该产品组合中。
你读过MarkLogic Server 内部吗?该白皮书很好地解释了 MarkLogic 如何解决这些挑战。