1

假设我们有这样一种情况,其中 R + W > N,其中 R 是读取仲裁级别,W 是写入仲裁级别,N 是复制因子。我们可以进一步假设 R = W = N/2 + 1。

让我们想象一下这样一个场景,其中一个键的更新操作正在进行中,并假设 Cassandra 已将更新提交到时间戳为 t 的单个副本。让我们还假设其他副本的密钥存储时间标记为 < t。如果在更新过程中现在发生对对象的读取请求,则读取仲裁可能包括发生更新的单个副本,其中包含时间戳为 t 的键,并且它将返回一个尚未提交的值(一个可能的未来值 - 我说“可能”,因为更新实际上可能会失败)因为 t > 来自读取仲裁中其他副本的时间戳。

问题是 - R + W > N 配置不应该保证强一致性吗?另外,这个问题是如何解决的?

4

1 回答 1

0

你的假设是对的。

就 RDBMS的ACID 属性而言, Cassandra 事务不是原子的。这意味着如果更新失败,Cassandra 的状态不会改变,您可以读取更新后的值。您可以参考此页面以获取有关 Cassandra 和 ACID 属性的更多信息。

我们所知道的是,如果在 R + W > N 的情况下写入和读取都达到了一致性级别,那么我们会收到最近的写入。换句话说,如果 Cassandra 足够可用,那么它就是一致的。这个想法来自CAP 定理

于 2017-03-10T10:54:52.270 回答