如果我们删除了一致性级别为QUORUM的行,并且我们的所有读取都使用相同的一致性级别,那么删除的记录将如何再次出现。
例如,在RF节点为3且一致性级别为= QUORUM的3节点集群中。
我删除了一致性QUORUM的行,当时一个节点失败。因此,失败的节点无法赶上此删除。
让Cassandra在完全压缩时删除每个节点中的行。从这两个节点中删除行后,请考虑失败的节点变为活动状态。
由于我们的一致性级别为QUORUM,因此我们将从任何副本节点之一获得零结果,并且协调器可以假定该行已被删除并向客户端返回null。
我怀疑为什么cassandra等待gc_grace_seconds来执行从节点中完整删除行的原因。
答案 0 :(得分:2)
因为如果在从其他2个节点完全删除数据后故障节点恢复,则群集将不知道数据是否已被删除,此节点是否已关闭,或者数据是否已插入,但是例如,由于这两个节点在写入期间启动,但随后崩溃并被替换,因此会被复制到其他2个节点。
换句话说,宽限期提供了足够的时间让所有节点在任何这些情况下同步所有数据。这也是为什么需要在这个宽限期内定期完成集群修复的原因