0

我正在使用 Cassandra 1.1.8,今天我在我的键空间中看到了一个包含以下内容的列族

 SELECT * FROM challenge;
 KEY
----------------------------
 49feb2000100000a556522ed68  
 49feb2000100000a556522ed74  
 49feb2000100000a556522ed7a   
 49feb2000100000a556522ed72   
 49feb2000100000a556522ed76   
 49feb2000100000a556522ed6a   
 49feb2000100000a556522ed70   
 49feb2000100000a556522ed78   
 49feb2000100000a556522ed6e   
 49feb2000100000a556522ed6c   

所以,只有行键。昨天那些行在那里,我进行了一些删除(正是在那些行上)。我正在使用赫克托

Mutator<byte []> mutator = HFactory.createMutator(keyspace, BYTES_ARRAY_SERIALIZER)
    .addDeletion(challengeRowKey(...), CHALLENGE_COLUMN_FAMILY_NAME)
    .execute();

这是单机/单节点上的小型开发和测试环境,所以我不认为硬件细节是相关的。可能我在做一些愚蠢的事情,或者我不明白事情是如何工作的,但据我所知,上面的行是无效的......列名和列值坐标丢失,所以没有有效的单元格(行键/列名/列值)...对吗?

我读过关于幽灵读取的文章,但我认为这是分布式环境中的一个场景……这在一天后在单个 Cassandra 节点上是否有效?

4

1 回答 1

2

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

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

于 2013-02-28T13:18:14.510 回答