设置Write consistency=ALL时,是否仍需每周修复避免僵尸记录?
Cassandra删除操作与僵尸记录的疑问解答
你的结论完全正确!
当你以consistency=ALL执行删除操作时,Cassandra会严格确保所有副本节点都成功写入了墓碑,才会向客户端返回删除成功的结果。这直接从根源上掐断了僵尸记录产生的前提——也就是你梳理的流程里“部分节点无墓碑”的情况根本不会发生。
我们对应之前的僵尸记录流程来拆解:
- 因为所有副本都收到了墓碑,在墓碑默认的10天到期时间内,所有节点都能识别这条数据已被删除;
- 当压缩操作执行后,所有节点的墓碑都会被清理移除,此时所有副本上都不再有这条数据的任何痕迹;
- 后续发起读取请求时,不管访问哪个节点,都会返回“无数据”,自然不会出现旧数据重现的僵尸记录。
不过这里也提个小提醒:consistency=ALL虽然能彻底避免这类僵尸记录问题,但它的可用性成本很高——只要集群里有一个副本节点不可达,你的删除操作就会失败。所以在生产环境中,需要根据业务场景在一致性和可用性之间做权衡,但从你提出的问题本身来看,你的结论是完全成立的。
内容的提问来源于stack exchange,提问作者Flavio
相关产品推荐
相关产品推荐

