当单个集群中的节点不包含相同数据的副本但数据分布在节点之间时,Cassandra 中的最终一致性是什么意思。现在,因为单个数据被记录在一个地方(节点)。为什么 Cassandra 不从那个单一的记录位置返回最近的值?在这种情况下如何出现多个副本?
5 回答
Cassandra 的一致性是可调的。可以调什么?
* 同意读取数据所需的节点数.. 称为 R * 同意写入数据所需的节点数.. 称为 W
如果有 3 个节点,如果我们选择 2R 和 2W.. 那么在一次读取,如果 2 个节点同意一个值,则为真值。第三个可能具有或可能不具有相同的值。
在写入的情况下,如果选择2W,那么如果数据写入2个节点,就认为足够了。这个模型是一致的。
如果 R + w <= N 其中 N 是节点数,它将最终保持一致。
Cassandra 为每一列和每一列的字段维护一个时间戳,以最终变得一致。在后台有一种机制可以达到一致的状态。
但就像我说的,如果 R + W > N,那么它是一致的固体。这就是为什么 Cassandra 认为一致性是可调的。
由客户决定适当的一致性级别(零、任何、一、quoram 或全部)。(一致性级别根据您的复制因子控制读取和写入行为。)在单节点集群中,一致性级别 any、one、quorom 和 all 是等效的。
即使复制因子 = 1,一致性也不一定是即时的,因为写入会在您将它们发送到的节点上缓冲,因此不一定会立即发送到负责该密钥的节点。
但这取决于您选择的一致性级别。
大多数情况下,Cassandra 的用例是复制因子 > 1,这就是一致性成为更多问题的地方。RF=3 似乎是一种常见设置(因为它允许 Quorum 在一个节点不可用的情况下进行读/写)
这是关于最终一致的一个很好的解释: http ://www.allthingsdistributed.com/2008/12/eventually_consistent.html
Cassandra 倾向于牺牲延迟和可用性的一致性。它是“最终一致的”,一种用于分布式设置的 NoSQL 数据库一致性模型。最终的一致性不是保持可能会真正减慢大规模速度的严格一致性,而是实现高可用性——只是以您的每个数据实例没有立即在所有服务器上同步为代价。