我正在使用Cassandra 1.1.8,今天我在我的键空间中看到了具有以下内容的列族
SELECT * FROM challenge;
KEY
----------------------------
49feb2000100000a556522ed68
49feb2000100000a556522ed74
49feb2000100000a556522ed7a
49feb2000100000a556522ed72
49feb2000100000a556522ed76
49feb2000100000a556522ed6a
49feb2000100000a556522ed70
49feb2000100000a556522ed78
49feb2000100000a556522ed6e
49feb2000100000a556522ed6c
所以,只有rowkeys。 昨天那些行在那里,我运行了一些删除(完全在那些行上)。我正在使用Hector
Mutator<byte []> mutator = HFactory.createMutator(keyspace, BYTES_ARRAY_SERIALIZER)
.addDeletion(challengeRowKey(...), CHALLENGE_COLUMN_FAMILY_NAME)
.execute();
这是单个机器/单个节点上的小型开发和测试环境,因此我不认为硬件细节是相关的。 可能我做了一些愚蠢的事情,或者我没有明白事情是如何工作的,但据我所知,上面的行无效......列名和列值坐标都缺失所以没有有效的单元格( rowkey / column name / column value)......是吗?
我读过关于鬼读的内容,但我认为这是一个分布式环境中的场景......在一天后在一个Cassandra节点上有效吗?
答案 0 :(得分:2)
来自http://www.datastax.com/docs/1.0/dml/about_writes#about-deletes
“已删除行的行键仍可能出现在范围查询结果中。当您删除Cassandra中的行时,它会使用墓碑标记该行键的所有列。在通过压缩清除这些逻辑删除之前,您有一个空行键(不包含列的行)。这些已删除的键可以显示在get_range_slices()调用的结果中。如果您的客户端应用程序对行执行范围查询,您可能希望过滤掉返回空列的行键清单“。