在阅读了谷歌上的几篇文章后,我看到像 Mongo 这样的 NoSql DB 是为 CP 设计的(在 CAP 中),而 cassandra 是为 AP 设计的(在 CAP 中)
这是我的问题:-
Mongo 不能配置为提供 AP 而不是 CP 还是为 CP 严格设计的?卡桑德拉也是如此吗?
在阅读了谷歌上的几篇文章后,我看到像 Mongo 这样的 NoSql DB 是为 CP 设计的(在 CAP 中),而 cassandra 是为 AP 设计的(在 CAP 中)
这是我的问题:-
Mongo 不能配置为提供 AP 而不是 CP 还是为 CP 严格设计的?卡桑德拉也是如此吗?
自 2000 年首次出现以来,我们对 CAP 定理的理解发生了很大变化。关于“三选二”的概念存在很多混淆,但 Eric Brewer 在 2012 年的文章很好地消除了这些混淆(我猜)。
因此,CAP 定理与成为 CA 或 AP 或其他东西无关。很简单:网络分区可能一直在发生。这是不可避免的。当发生网络分区时,分布式数据库的架构应该允许其客户端根据需要调整一致性和可用性。
这是什么意思?假设您在集群中的 3 个节点(N1、N2 和 N3 - 所以复制因子 = 3)之间复制一条数据。假设发生了一个将 N3 与 N1 和 N2 分开的网络分区:
因此,所有 3 个节点都可以运行,但它们之间的网络现在存在问题。在这种情况下,客户端可能会向 N1、N2 或 N3 发出读取请求或写入请求。基于此客户端的一致性选择,集群的反应可能会有所不同:
我不了解 Mongo,但考虑到 CAP 定理,这就是 Cassandra 的工作方式。
您可以通过允许裂脑在 MongoDB 中实现“AP”。
您可以通过将读/写设置为“ALL”设置来制作 Cassandra“CP”(存在 QUORUM 不够的极端情况)。
但是,关于为什么调用数据库 AP/CP 是一个错误的术语,有一篇非常好的文章。在 CAP 定理的背景下,关于什么是可用性和一致性有非常强大和可靠的定义,而且大多数时候人们没有深入了解它,而且顺便说一下,大多数数据库都不符合严格的要求CAP 定理既不是 AP 也不是 CP。
链接:https ://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
Cassandra 使用可调一致性,您可以在写入和/或读取数据时使用不同的一致性级别对其进行控制。例如,如果您对写入和读取都使用 QUORUM,那么您将获得强一致性,尽管可用性可能会受到影响。
PS虽然我不能说Mongo......
MongoDB 永远不能成为 AP,因为它是基于领导者的系统。可能有两种情况:
就 Cassandra 而言,正如 Alex 所说,我们可以通过牺牲可用性来使 Cassandra 更加一致。
阅读这篇文章,以获得详细的解释。