当我在Cassandra中删除行时,我只删除列而不是行键。

10

如果我使用 remove(key) 删除了Cassandra数据库中ColumnFamily中的所有键,那么如果我使用 get_range_slices,行仍然存在但没有列。我如何删除整行?

3个回答

6

为什么删除的键在范围扫描中会出现?

这是因为get_range_slice指定了“对给定行范围应用此谓词”的条件,也就是说,如果谓词的结果为空,我们必须为该行键包括一个空结果。即使没有进行删除操作,执行此类查询返回某些或所有键的空列列表是完全有效的。


谢谢,那就没有避免的解决方案了吗? - Matroska
2
根据 http://wiki.apache.org/cassandra/DistributedDeletes 的说明,墓碑(tombstones)每隔 GCGraceSeconds 就会被清理一次,默认值为10天。GCGraceSeconds 应该是能够容忍的节点故障最长时间。对于单个实例,可以将 GCGraceSeconds 设置为0,这样墓碑就会被自动删除。 - Ryan Shillington

4
卡桑德拉使用分布式删除功能。
因此,删除操作不能立即清除所有数据的痕迹:如果我们这样做,且副本没有接收到删除操作,则当其再次变为可用时,它将将没有接收到写入更新的副本视为已丢失,并进行修复!因此,在删除数据时,卡桑德拉不是直接清除数据,而是用一个特殊值(称为墓碑)替换它。然后,可以将墓碑传播到错过初始删除请求的副本。
参考链接:http://wiki.apache.org/cassandra/DistributedDeletes

-3

4
这并没有被“修复”,票只是被“解决了”,而解决方案是“[或许以后再做]”。根据@Schildmeijer的回答,这是预期的行为,而不是一个错误。 - user359996
同意!请查看下面的回复。 - Ryan Shillington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接