在google上阅读了几篇文章之后,我看到了像Mongo这样的NoSql DB 对于CP(在CAP中)而cassandra是为AP设计的(在CAP中)
这是我的问题: -
Mongo不能配置为提供AP而不是CP或者是否为CP设计严格? Cassandra也是如此吗?
答案 0 :(得分:2)
我们对CAP定理的理解自2000年首次出现以来已经有了很大的改变。对于"选择2-out-of-3"有很多困惑。概念,但Eric Brewer的article在2012年很好地消除了这些混淆(我猜)。
因此,CAP定理不是关于CA或AP或其他东西。它就是这样:网络分区可能一直在发生。这是不可避免的。当网络分区发生时,分布式数据库的体系结构应该允许其客户端按照自己的意愿调整一致性和可用性。
这是什么意思?假设您在群集中的3个节点(N1,N2和N3 - 复制因子= 3)之间复制一段数据。并且让我们说发生网络分区,它将N3与N1和N2分开:
因此,所有3个节点都可以运行,但它们之间的网络现在是有问题的。在这种情况下,客户端可能会向N1,N2或N3发出读取请求或写入请求。根据此客户端的一致性选择,群集的反应可能不同:
我不了解Mongo,但这就是Cassandra在考虑CAP定理时的工作原理。
答案 1 :(得分:1)
Cassandra使用可调整的一致性,您可以在使用不同的一致性级别编写和/或读取数据时控制它。例如,如果您对两个写入使用QUORUM&读取,然后你会获得强大的一致性,虽然可用性可能会受到影响。
P.S。我不能说Mongo虽然......
答案 2 :(得分:1)
你可以实现" AP"在MongoDB中允许裂脑。
你可以制作Cassandra" CP"通过设置读/写到" ALL"设置(存在QUORUM不足的边缘情况)。
但是,有一篇非常好的文章说明为什么调用数据库AP / CP是一个错误的术语。在CAP定理的背景下,对于可用性和一致性有非常强大而可靠的定义,并且大多数时候人们没有足够深入地理解它,并且顺便说一下数据库不适合作为AP或CP的严格CAP定理。
链接:https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
答案 3 :(得分:0)
MongoDB永远不会成为AP,因为它是基于领导者的系统。 可能有两种情况:
就Cassandra而言,正如Alex所说,我们可以通过降低可用性来使Cassandra更加一致。
阅读this article,以获取详细说明。