Cassandra 中最终一致性的含义?

问题描述 投票:0回答:5

当单个集群中的节点不包含相同数据的副本但数据分布在节点之间时,Cassandra 中的最终一致性意味着什么。现在,由于单个数据记录在单个位置(节点)。为什么 Cassandra 不从该单一记录位置返回最近的值?在这种情况下如何产生多个副本?

database nosql cassandra eventual-consistency
5个回答
6
投票

Cassandra 的一致性是可调的。可以调整什么?

  • 同意读取数据所需的节点数量...称之为 R
  • 就写入数据达成一致所需的节点数量...称之为 W

在3个节点的情况下,如果我们选择2R和2W,那么在读取过程中,如果2个节点同意一个值,那就是真实值。第三个值可能相同,也可能不同。

写入时,如果选择2W,那么数据写入2个节点就足够了。这个模型是一致的。

如果 R + w <= N where N is number of nodes, it will be eventually consistent.

Cassandra 维护每一列和列的每个字段的时间戳,以最终保持一致。有一个后台机制来达到一致的状态。 但就像我说的,如果 R + W > N,那么它是一致的实体。这就是为什么 Cassandra 中的一致性被认为是可调的。


4
投票

由客户端决定适当的一致性级别(零、任意、一、法定人数或全部)。 (一致性级别根据您的复制因子控制读取和写入行为。) 在单节点集群中,一致性级别any、one、quorom 和all 是等效的。


2
投票

即使复制因子 = 1,一致性也不一定是立即的,因为写入会在您将其发送到的节点上进行缓冲,因此不一定会立即发送到负责该密钥的节点。

但这取决于您选择的一致性级别。

Cassandra 的大多数用例是复制因子 > 1,这就是一致性变得更重要的问题。 RF=3 似乎是一种常见设置(因为它允许在一个节点不可用的情况下进行 Quorum 读/写)


2
投票

这里有一个关于最终一致性的很好的解释: http://www.allthingsdistributed.com/2008/12/eventually_concient.html


1
投票

Cassandra 往往会为了可用性而牺牲延迟和一致性。它是“最终一致”的,是与分布式设置一起使用的 NoSQL 数据库一致性模型。最终一致性不是维持严格的一致性,这实际上会在规模上减慢速度,而是可以实现高可用性 - 只是代价是数据的每个实例不能立即在所有服务器上同步。

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