Cassandra 写入一致性级别 ALL 说明
Cassandra write consistency level ALL clarification
根据 Datastax documentation for Cassandra:
"If the coordinator cannot write to enough replicas to meet the requested consistency level, it throws an Unavailable Exception and does not perform any writes."
这是否意味着在写入过程中,写入更新的数据将无法用于读取请求?我的意思是可能有 4/5 的节点已成功向协调器发送 SUCCESS,这意味着它们的数据已更新。但是第 5 个还没有写。现在如果一个读取请求进入并到达这 4 个节点之一,它仍然会显示旧数据,直到协调器收到来自第 5 个节点的确认并将新数据标记为有效?
如果协调器在尝试写入之前知道它不可能实现一致性,那么它将在执行写入之前立即使请求失败。 (这在给定的引述中有描述)
但是,如果协调器认为有足够的节点在尝试时达到其配置的一致性级别,它将开始将其数据发送到其对等方。如果其中一个对等方没有 return 成功,则请求将失败,您将进入失败的节点具有旧数据而通过的节点具有新数据的状态。
如果有读请求进来,它会显示它在它到达的节点上找到的数据,不管它是旧的还是新的。
让我们以你的例子来演示。
如果您有 5 个节点并且有复制 3。这意味着这 5 个节点中的 3 个将具有您发送的写入。但是,三个节点之一 return 向协调器发送了故障。现在,如果您以一致性级别 ALL 阅读。您将读取所有三个节点并将始终获得新的写入(最新时间戳总是获胜)。
但是,如果您以一致性级别 ONE 阅读,则有 1/3 的机会您会得到旧值。
根据 Datastax documentation for Cassandra:
"If the coordinator cannot write to enough replicas to meet the requested consistency level, it throws an Unavailable Exception and does not perform any writes."
这是否意味着在写入过程中,写入更新的数据将无法用于读取请求?我的意思是可能有 4/5 的节点已成功向协调器发送 SUCCESS,这意味着它们的数据已更新。但是第 5 个还没有写。现在如果一个读取请求进入并到达这 4 个节点之一,它仍然会显示旧数据,直到协调器收到来自第 5 个节点的确认并将新数据标记为有效?
如果协调器在尝试写入之前知道它不可能实现一致性,那么它将在执行写入之前立即使请求失败。 (这在给定的引述中有描述)
但是,如果协调器认为有足够的节点在尝试时达到其配置的一致性级别,它将开始将其数据发送到其对等方。如果其中一个对等方没有 return 成功,则请求将失败,您将进入失败的节点具有旧数据而通过的节点具有新数据的状态。
如果有读请求进来,它会显示它在它到达的节点上找到的数据,不管它是旧的还是新的。
让我们以你的例子来演示。
如果您有 5 个节点并且有复制 3。这意味着这 5 个节点中的 3 个将具有您发送的写入。但是,三个节点之一 return 向协调器发送了故障。现在,如果您以一致性级别 ALL 阅读。您将读取所有三个节点并将始终获得新的写入(最新时间戳总是获胜)。
但是,如果您以一致性级别 ONE 阅读,则有 1/3 的机会您会得到旧值。