【发布时间】:2018-01-13 13:47:53
【问题描述】:
我通过CAP 。经过之后,我的理解是 CAP 仅在上下文中才有意义 复制(其中写入发生在一个节点上,即主节点,然后跨从节点复制)不适用于分片/水平扩展(数据在 根据某个键进行分区。所以不同的数据位于不同的节点上)。
理想情况下,数据在分片中始终保持一致/可用(主要是 NoSql DB) 由于单个节点包含所需的数据,因此无需将相同的数据写入其他节点。所以在 NoSql 中没有必要 分区容错,因为节点之间存在通信节点,除非需要复制。那么为什么 CAP 理论会出现在 NoSql DB 的分片中 用于不复制。
对我来说选择黑白 C 和 A 应该是有意义的,我们使用复制而不是分片,这主要发生在 SQL DB 中而不是在 NOSql DB 中,但阅读谷歌上的文章主要是在 CAP 方面讨论 NoSql DB
我知道我错过了 CAP 定理,但不确定它是什么?
【问题讨论】:
-
CAP 限制了用户界面的行为方式,因为它具有分布式实现。您没有清楚地区分用户界面及其实现。复制和分片可以是其中任何一个的一部分。 CAP 始终适用,它表示用户无法访问数据意味着中断或不一致。它与 SQL 与 NoSQL 无关。 SQL 系统可以有用户可见的复制、分片等,甚至在非序列化事务模式下运行 SQL 也会反映 CAP 后果。 PS 阅读大量的演示文稿。
-
PS 如果用户只使用本地节点,那么您不需要应用 CAP。但是,如果用户可以访问非本地分片,则 CAP 应用;非本地访问可能会失败。不需要为此进行复制。
-
@philipxy 分片保留独立/分区数据,不需要与另一个分片通信。因此即使节点之间的网络故障也不会产生影响。所以这里没有 CAP。
-
我再说一遍,所有这些都很重要,并且定义清楚地表明了这一点,即可访问性/局部性,并且仅存在或不存在复制和/或分片并不能告诉您任何事情。例如,如果每个用户都有一个本地节点,该节点被划分为每个用户的一些唯一数据,那么没有复制但可能会出现故障。您似乎还错误地假设复制和/或分片只能在 SQL 和 NoSQL 中以某些有限的方式使用。
-
@philipxy 我不确定你在这里的意思,但忽略 noSQL 部分,我认为艾米莉是对的。 CAP 定理并没有特别说明分布式系统。它所说的是,当需要分区容错时,通常在可用性和一致性之间进行权衡。在实践中,分区容错是通过复制来实现的。拥有复制意味着网络中的不同节点需要同步以实现一致性,这需要时间,因此需要权衡可用性/一致性。
标签: sql nosql rdbms partitioning cap-theorem