Cassandra 是否可能 Return 一个不一致的值?
Is It Possible for Cassandra to Return an Inconsistent Value?
我是 Cassandra 的新手,我想知道,Cassandra 是否有可能 return 一个不一致的值?
例如,假设我们有六个节点集群。
LOCAL_QUORUM = (replication_factor/2) + 1
这将为我们提供 4 的本地仲裁。因此对于简单的写入,六个节点中的四个必须响应,这意味着四个节点将具有最新值。
据我了解,未更新的两个节点最终通过 Gossip 协议更新。
如果是这样,如果客户端从两个节点之一读取不是
在协议发生之前更新?他们是否有获得陈旧价值的风险?
读取修复如何发挥作用?
*也是一个快速的旁注。并不是说您会这样做,但是如果您将复制因子设置为等于一致性级别,那么这在本质上是否与背面的 2PC(两阶段提交)相同?
is it possible for Cassandra to return an inconsistent value?
答案是:是的。
这取决于您要如何设置 read/write 一致性级别。
If so what happens if a client reads from one of the two nodes that were not updated before the protocol occurs? Are they at risk of getting a stale value?
如果将读操作的一致性级别设置为ONE或TWO那么仍然有possibility/risk获取陈旧的价值。 为什么?:因为cassandra如果从指定数量的节点得到响应,就会return给客户端赋值。
Cassandra 非常灵活,您可以根据应用程序的需要配置 cassandra。要保持 强水平 的一致性,您始终可以遵循以下规则:
Reliability of read and write operations depends on the consistency
used to verify the operation. Strong consistency can be guaranteed
when the following condition is true:
R + W > N
where R is the consistency level of read operations
W is the consistency level of write operations
N is the number of replicas
要了解更多信息,请查看:consistent read and write operations
How does read repair play into all this?
读修复时,Cassandra不直接向每个副本发送摘要请求
参与阅读。 Cassandra 比较所有副本并写入最新的副本
版本到任何没有它的副本节点。如果查询的一致性
级别高于 ONE,Cassandra 在所有副本节点上执行此过程
在数据 returned 到客户端之前的前景。读取修复修复任何节点
由读取查询。这意味着对于一个一致性级别,没有数据是
已修复,因为没有进行比较。对于 QUORUM,只有节点
query touches修复了,不是所有节点。
查看此 link 了解更多详情:
欢迎来到 Cassandra 世界
is it possible for Cassandra to return an inconsistent value?
是的,Cassandra 本质上有一个 "eventually consistent" 方法,因此如果您为使用 ANY or ONE 的读取设置一致性级别,则返回不一致值的风险会增加。您可以将此设置增加到 ALL
以确保信息一致,但您将牺牲性能和弹性。应用程序中使用的级别将取决于您的用例。
For example, say we have six node cluster.
LOCAL_QUORUM = (replication_factor/2) + 1
复制因子与集群中的节点数量无关,经验法则是复制因子不应大于节点数量。
假设您在 6 节点集群中使用的复制因子为 6:
This would give us a Local Quorum of 4. So for a simple write, four of
six nodes have to respond, which means that four nodes would have the
most recent value.
From my understanding, the two nodes that were not updated eventually
get updated through Gossip Protocol.
确保复制因子得到满足的机制是 Hinted handoffs; the gossip protocol 节点使用该机制来报告节点的状态(来自自身和其他节点),其中一些状态是 "up"、"down"、"healthy"、"joining"、"leaving" 等
If so what happens if a client reads from one of the two nodes that
were not updated before the protocol occurs? Are they at risk of
getting a stale value?
你会想要阅读有关 read path of Cassandra 的内容;作为 tl dr,这将取决于复制因子以及读取操作的一致性级别。您还可以降低因不准确数据而牺牲弹性和性能的风险。
我是 Cassandra 的新手,我想知道,Cassandra 是否有可能 return 一个不一致的值?
例如,假设我们有六个节点集群。
LOCAL_QUORUM = (replication_factor/2) + 1
这将为我们提供 4 的本地仲裁。因此对于简单的写入,六个节点中的四个必须响应,这意味着四个节点将具有最新值。
据我了解,未更新的两个节点最终通过 Gossip 协议更新。
如果是这样,如果客户端从两个节点之一读取不是 在协议发生之前更新?他们是否有获得陈旧价值的风险?
读取修复如何发挥作用?
*也是一个快速的旁注。并不是说您会这样做,但是如果您将复制因子设置为等于一致性级别,那么这在本质上是否与背面的 2PC(两阶段提交)相同?
is it possible for Cassandra to return an inconsistent value?
答案是:是的。
这取决于您要如何设置 read/write 一致性级别。
If so what happens if a client reads from one of the two nodes that were not updated before the protocol occurs? Are they at risk of getting a stale value?
如果将读操作的一致性级别设置为ONE或TWO那么仍然有possibility/risk获取陈旧的价值。 为什么?:因为cassandra如果从指定数量的节点得到响应,就会return给客户端赋值。
Cassandra 非常灵活,您可以根据应用程序的需要配置 cassandra。要保持 强水平 的一致性,您始终可以遵循以下规则:
Reliability of read and write operations depends on the consistency used to verify the operation. Strong consistency can be guaranteed when the following condition is true:
R + W > N
where R is the consistency level of read operations
W is the consistency level of write operations
N is the number of replicas
要了解更多信息,请查看:consistent read and write operations
How does read repair play into all this?
读修复时,Cassandra不直接向每个副本发送摘要请求 参与阅读。 Cassandra 比较所有副本并写入最新的副本 版本到任何没有它的副本节点。如果查询的一致性 级别高于 ONE,Cassandra 在所有副本节点上执行此过程 在数据 returned 到客户端之前的前景。读取修复修复任何节点 由读取查询。这意味着对于一个一致性级别,没有数据是 已修复,因为没有进行比较。对于 QUORUM,只有节点 query touches修复了,不是所有节点。
查看此 link 了解更多详情:
欢迎来到 Cassandra 世界
is it possible for Cassandra to return an inconsistent value?
是的,Cassandra 本质上有一个 "eventually consistent" 方法,因此如果您为使用 ANY or ONE 的读取设置一致性级别,则返回不一致值的风险会增加。您可以将此设置增加到 ALL
以确保信息一致,但您将牺牲性能和弹性。应用程序中使用的级别将取决于您的用例。
For example, say we have six node cluster.
LOCAL_QUORUM = (replication_factor/2) + 1
复制因子与集群中的节点数量无关,经验法则是复制因子不应大于节点数量。
假设您在 6 节点集群中使用的复制因子为 6:
This would give us a Local Quorum of 4. So for a simple write, four of six nodes have to respond, which means that four nodes would have the most recent value.
From my understanding, the two nodes that were not updated eventually get updated through Gossip Protocol.
确保复制因子得到满足的机制是 Hinted handoffs; the gossip protocol 节点使用该机制来报告节点的状态(来自自身和其他节点),其中一些状态是 "up"、"down"、"healthy"、"joining"、"leaving" 等
If so what happens if a client reads from one of the two nodes that were not updated before the protocol occurs? Are they at risk of getting a stale value?
你会想要阅读有关 read path of Cassandra 的内容;作为 tl dr,这将取决于复制因子以及读取操作的一致性级别。您还可以降低因不准确数据而牺牲弹性和性能的风险。