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

问题描述:

如果我使用remove(key)删除Cassandra db中ColumnFamily中的每个键,那么如果我使用get_range_slices,那么行仍然存在,但没有列。我怎样才能删除整行?当我删除Cassandra中的行时,我只删除列而不是行键

就一直有同样的问题,我发现:

这已被固定在0.7 (https://issues.apache.org/jira/browse/CASSANDRA-1027)。 而回迁到0.6.3

这也是相关的: https://issues.apache.org/jira/browse/CASSANDRA-494

+4

-1这不是“固定”的,票据刚被“解决”,解决方法是“稍后可能”。根据@ Schildmeijer的回答,这是预期的行为,而不是bug。 – user359996 2012-03-19 00:19:20

+0

同意!请参阅下面的回复。 – 2013-04-04 05:06:54

Why do deleted keys show up during range scans?

因为get_range_slice说,“应用此谓词来定行的范围,”这意味着,如果预测结果是空的,我们必须包括该行键空的结果。即使没有执行删除操作,执行这样的查询返回某些或所有键的空列列表也是完全有效的。

+0

感谢,并没有解决,以避免? – Matroska 2010-06-05 21:06:30

+2

根据http://wiki.apache.org/cassandra/DistributedDeletes,每个GCGraceSeconds都会清理墓碑,默认为10天。 GCGraceSeconds应该是您获得故障节点备份并运行所需的最长时间。对于单个实例,可以将GCGraceSeconds设置为0,然后将自动删除墓碑。 – 2013-04-04 05:05:46

我与卡桑德拉0.63测试,问题还是一样。我不认为这个错误修复是为了摆脱删除的行ID。见

http://wiki.apache.org/cassandra/FAQ#range_ghosts

以获取更多信息。

Cassandra按预期使用分布式删除。

因此,删除操作不能随便擦出来的数据 的所有痕迹被立即删除:如果我们这样做,和副本没有收到 删除操作,当它再次可用它将把 确实收到删除的副本,因为错过了更新并写入 ,并对其进行修复!因此,而不是删除删除数据, 卡桑德拉用一个特殊的值,即墓碑替代它。然后,可以将该墓碑传播到错过了初始的删除请求的副本。

http://wiki.apache.org/cassandra/DistributedDeletes