在Cassandra中,为什么单个值优先于仲裁节点空响应?

In Cassandra, why does a single value take precedence over quorum nodes empty response?

在 Cassandra 中,逻辑删除用于删除,因为写入是写入不可变文件。我读到墓碑还解决了分布式系统中删除的棘手问题。这就是我感到困惑的地方。从分布式数据库中删除存在哪些问题?例如:采用具有节点 A、B 和 C 的 3 节点集群。假设节点 C 已关闭,并且出现了删除。它在 A 和 B 中被标记为墓碑,并且成功 return 返回给客户端。一段时间后,压缩开始作用于 A 和 B,并清除了这个墓碑。现在,当读取先前删除的值时,A 和 B return 什么都没有,而 C return 是旧值。但是在这里我读到 C 给出的值优先于空响应。

If the tombstoned record has already been deleted from the rest of the cluster before that node recovers, Cassandra treats the record on the recovered node as new data, and propagates it to the rest of the cluster.

为什么要这样做?由于法定人数节点表示该值不存在,我们为什么不 return 将其返回给客户端?这可能会简化分布式系统中的删除问题,因为我们无需等待 gc grace 秒就可以清除墓碑。

仲裁 returns 没有也可能意味着其余节点根本没有收到值,因为节点已关闭,因此在这种情况下,具有数据的单个节点是正确的,并且该值将传播到没有它的节点。 Cassandra 根本不知道,如果数据丢失是因为它是通过墓碑删除的,还是数据丢失是因为节点在写入时不可用。

这就是 运行 定期维修并确保在 gc_grace_seconds 期间进行维修很重要的原因。并且你没有在超过这个时间后离线后把机器放回去。