只有Cassandra列族中的行键

时间:2013-02-28 08:35:24

标签: nosql cassandra

我正在使用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节点上有效吗?

1 个答案:

答案 0 :(得分:2)

来自http://www.datastax.com/docs/1.0/dml/about_writes#about-deletes

“已删除行的行键仍可能出现在范围查询结果中。当您删除Cassandra中的行时,它会使用墓碑标记该行键的所有列。在通过压缩清除这些逻辑删除之前,您有一个空行键(不包含列的行)。这些已删除的键可以显示在get_range_slices()调用的结果中。如果您的客户端应用程序对行执行范围查询,您可能希望过滤掉返回空列的行键清单“。