为什么在CAP定理中没有RDBMS分区容忍以及为什么它可用?

问题描述 投票:14回答:3

关于RDBMS在CAP定理中是CA的两点我不明白:

1)它说RDBMS不是分区容忍但是RDBMS如何比MongoDB或Cassandra等其他技术更少分区容忍?是否存在RDBMS设置,我们放弃CA以使其成为AP或CP?

2)CAP如何可用?是通过主从设置吗?在主机死机时,从机接管写入?

我是DB架构和CAP定理的新手所以请耐心等待。

distributed-computing rdbms distributed-system cap-theorem nosql
3个回答
17
投票

现在很多数据库实际上有不同的配置,根据你设置的设置,它可以是CA,CP,AP等,但不能同时实现这三个。一些数据库实际上努力支持所有三个,但仍以某种方式对它们进行优先级排序。

例如,MySQL可以是CP和CA,具体取决于配置。默认情况下,它是CA,因为它遵循主从属范例,该数据被复制到从属数据库。如果一组从站失去与主站的连接,则会牺牲分区容差,因此决定选择一个新的主站创建具有自己的一组从站的两个主站。

但是,MySQL还有另一种配置,它是一种集群配置。它优先考虑CP的可用性,例如。如果没有足够的活动节点来提供所有数据,群集将关闭。

可能有更多的MySQL配置使其满足其他CAP定理组合,但总体而言,我只是想说它取决于您的系统需要什么。有时数据库对于一种配置比另一种配置更好,因此最好看看在使用某种配置时可能出现的问题类型。

至于实现CAP定理,我建议进一步研究不同的数据库以及它们如何实现CAP定理的优先级。实现它们的方式太多了,例如。通常,主从模型用于CA系统,AP系统的哈希环等。


0
投票

我同意RDBMS可以拥有CAP的所有属性。我已经开始学习noSQL DB并且之前有过使用IBM DB2的经验。

以下是IBM DB2如何满足所有3个CAP属性

  1. C:一致性:由于RDBMS的事务性质,每个关系数据库都满足此要求。
  2. 答:可用性:可用性意味着当对存在的数据进行查询时,应该返回它。同样,关系数据库的设计也很容易实现。
  3. P:分区容差:这是最有趣的一个。从DB2的角度来看,在我正在开发的应用程序中,我们有两个分布在不同数据中心的数据库。一个是主要的,通过心跳与次要通信。这些主数据库和辅助数据库中的每一个都有12个物理实例,其中数据是基于某些预定义逻辑分发的。如果主服务器发生故障,则辅助服务器将检测到此情况并取代主服务器。由于主要和次要始终保持同步,因此数据也保持一致。

这就是我认为RDBMS满足CAP定理的所有3个属性的方式。

我可能错了,并开始讨论这个问题。


0
投票

CAP定理存在问题,它仅适用于分布式数据库系统。当您具有分布式数据库时,可能会发生网络分区和节点崩溃。当网络分区发生时,您必须具有分区容差(CAP的P)。

所以回答你的问题1)它是CP或AP。它可以按照提到的配置。

更多关于为什么分区容差是必须的:https://codahale.com/you-cant-sacrifice-partition-tolerance/

更多关于CAP定理的问题:https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html

© www.soinside.com 2019 - 2024. All rights reserved.