关于 RDBMS 是 CAP 定理中的 CA,我不明白的两点:
1)它说RDBMS是not 分区容忍但 RDBMS 怎么样?any less比 MongoDB 或 Cassandra 等其他技术更具有分区容错性?是否有一种 RDBMS 设置可以让我们放弃 CA 以使其成为 AP 或 CP?
2) CAP 如何可用?是通过主从设置吗?就像当主人去世时,奴隶接管写入?
我是 DB 架构和 CAP 定理的新手,所以请耐心等待。
很容易误解 CAP 属性,因此我提供了一些插图以使其更容易理解。
一致性:一个问题Q将产生相同的答案A无论处理请求的节点如何。为了保证完全一致性,我们需要确保所有节点始终同意相同的值。不要与最终一致性相混淆,最终一致性是网络朝着使所有数据一致的方向发展,但有时却并非如此。
可用性:如果分布式系统收到查询Q它总是会为该查询生成答案。这不应该与“高可用性”混淆,这不是指有能力处理更高吞吐量的查询,而是指不拒绝回答。
分区容差:尽管存在分区,系统仍继续运行。这不是关于拥有“修复”分区的机制,而是关于容忍分区,即尽管分区仍然继续。
请注意,以下示例并未涵盖所有可能的场景。考虑以下标题:
一个例子CP:
该系统具有分区容忍性,因为尽管存在分区,其节点仍会继续接受请求;它是一致的,因为唯一提供答案的节点是那些维护与处理所有写入请求的主节点的连接的节点;它不可用,因为其他分区中的节点不提供它们收到的查询的答案。
示例:AP:
要么因为(分别)我们让从节点回复请求,无论它们是否能够到达主节点,要么因为其他分区中的从节点选择新的主节点,或者因为我们有一个无主集群,所以实现了可用性,因为所有问题都在解决答案 - 一致性被丢弃,因为两个分区都在回复,同时可能产生不同的状态。
示例:CA:
如果我们在发生分区时断开节点,我们可以确保最多有一个分区,这最终意味着网络不再分区,或者根本没有服务。这与分区容错相反,因为系统正在避免分区,而不是尽管分区仍然运行。在这些部分或完全断开的系统中保持一致性和可用性,因为所有工作节点(如果有)都具有相同的状态,并且所有收到的查询(如果有)都将得到答案 - 关闭节点不会收到查询。
回答问题:
-
在默认配置下,Cassandra 和 MongoDB 等数据库是分区容忍的,因为它们不会关闭节点来应对分区,而 MySQL 等 RDBMS 则会这样做。
-
可用性与主/从设置关系不大,例如Cassandra 是无主的并且非常可用,因为哪个节点失效并不重要。至于主/从设置中的可用性,当主服务器死亡时,没有理由停止响应所有查询,但您可能需要在选择新主服务器时暂停写入操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)