【问题标题】:Cassandra write consistency level ALL clarificationCassandra写一致性级别ALL说明
【发布时间】:2018-08-16 03:59:25
【问题描述】:

根据Datastaxdocumentation for Cassandra

“如果协调器无法写入足够多的副本来满足请求的一致性级别,它会抛出一个不可用的异常并且不执行任何写入。”

这是否意味着在写入过程中,写入更新的数据将不可用于读取请求?我的意思是可能有 4/5 个节点已成功向协调器发送了 SUCCESS,这意味着它们的数据已更新。但是第五个还没有写。现在如果有一个读请求进入到这 4 个节点之一,它仍然会显示旧数据,直到协调器收到来自第 5 个节点的确认并将新数据标记为有效?

【问题讨论】:

    标签: database cassandra nosql cassandra-2.0 cap-theorem


    【解决方案1】:

    如果协调器在尝试写入之前知道它不可能实现一致性,那么它将在执行写入之前立即使请求失败。 (这在给出的报价中有所描述)

    但是,如果协调器在尝试时认为有足够的节点来达到其配置的一致性级别,它将开始将其数据发送给其对等方。如果其中一个节点没有返回成功,则请求将失败,您将进入失败的节点拥有旧数据而通过的节点拥有新数据的状态。

    如果有读请求进来,它会显示它在它到达的节点上找到的数据,无论它是旧的还是新的。

    让我们以你的例子来演示。

    如果您有 5 个节点并且您有 3 个复制。这意味着这 5 个节点中的 3 个将具有您发送的写入。但是,三个节点之一向协调器返回了故障。现在,如果您阅读一致性级别 ALL。您将读取所有三个节点并始终获得新的写入(总是最新的时间戳)。

    但是,如果您使用一致性级别 ONE 阅读,则有 1/3 的机会获得旧值。

    【讨论】:

      猜你喜欢
      • 2021-05-07
      • 2016-07-05
      • 2014-03-14
      • 2017-01-09
      • 2018-06-13
      • 1970-01-01
      • 2015-06-22
      • 2018-07-26
      • 2016-04-30
      相关资源
      最近更新 更多