Distributed computing 为什么不是';t RDBMS在CAP定理中的分区容限以及它为什么可用?

Distributed computing 为什么不是';t RDBMS在CAP定理中的分区容限以及它为什么可用?,distributed-computing,rdbms,distributed-system,cap-theorem,nosql,Distributed Computing,Rdbms,Distributed System,Cap Theorem,Nosql,关于RDBMS是CAP定理中的CA,我不理解两点: 1) 它说RDBMS不具有分区容错性,但是RDBMS的分区容错性如何低于MongoDB或Cassandra等其他技术呢?是否有一个RDBMS设置,我们放弃CA使其成为AP或CP 2) 它是如何供应的?是否通过主从式设置?就像主人死了,奴隶接管了写 我是DB体系结构和CAP定理的新手,所以请耐心听我说。现在很多数据库实际上有不同的配置,根据您设置的设置,它可以是CA、CP、AP等,但不能同时实现所有三个。一些数据库实际上努力支持这三个方面,但仍然

关于RDBMS是CAP定理中的CA,我不理解两点:

1) 它说RDBMS不具有分区容错性,但是RDBMS的分区容错性如何低于MongoDB或Cassandra等其他技术呢?是否有一个RDBMS设置,我们放弃CA使其成为AP或CP

2) 它是如何供应的?是否通过主从式设置?就像主人死了,奴隶接管了写


我是DB体系结构和CAP定理的新手,所以请耐心听我说。

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

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

然而,MySQL还有另一种配置,即集群配置。它将CP置于可用性之上,例如,如果没有足够的活动节点来服务所有数据,集群将关闭

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


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

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

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

  • C:一致性:由于RDBMS的事务性,每个关系数据库都满足这一点

  • 答:可用性:可用性意味着当对存在的数据进行查询时,应该返回该数据。同样,关系数据库的设计也很容易做到这一点

  • p:分区容差:这是最有趣的一个。从DB2的角度来看,在我正在开发的应用程序中,有两个数据库分布在不同的数据中心。一个是主要的,通过心跳与次要的沟通。这些主要和次要数据库中的每一个都有12个物理实例,其中数据是根据一些预定义的逻辑分布的。如果主电源关闭,则辅助电源会检测到此情况并取代主电源。由于主数据和辅助数据始终保持同步,因此数据也保持一致

  • 这就是我认为RDBMS满足CAP定理所有3个属性的原因


    我可能是错的,并愿意就此展开讨论。

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

    所以要回答你的问题1)不是CP就是AP。它可以按照下文所述进行配置

    有关分区公差必须具备的原因的详细信息:

    更多关于CAP定理的问题:

    很容易误解CAP属性,因此我提供了一些示例以使其更容易理解

    一致性:查询Q将生成相同的答案A,而不管处理请求的节点是什么。为了保证完全一致性,我们需要确保所有节点在任何时候都同意相同的值。不要与最终的一致性相混淆,在这种一致性中,网络朝着使所有数据一致的方向发展,但也有一段时间不一致

    可用性:如果分布式系统接收到查询Q,它将始终为该查询生成答案。这不应该与“高可用性”混淆,这不是关于有能力处理更高的查询量,而是关于不拒绝回答

    分区容差:即使存在分区,系统仍能继续运行。这并不是要有机制来“修复”分区,而是要容忍分区,即不管分区如何继续

    请注意,以下示例并未涵盖所有可能的场景。考虑下面的标题:

    CP的一个示例:

    系统是分区容忍的,因为它的节点在分区的情况下仍能接受请求;它是一致的,因为提供答案的节点只有那些与处理所有写请求的主节点保持连接的节点;它不可用,因为另一个分区中的节点没有为它们接收到的查询提供答案

    AP的示例:

    要么因为(分别)我们有从节点响应请求,不管它们是否能够到达主节点,要么因为另一个分区中的从节点选择了一个新的主节点,或者因为我们有一个无主集群,实现可用性是因为所有问题都得到了答案-一致性被放弃,因为两个分区都在应答,同时可能产生不同的状态