我们有计数器列系列,类似于: 创建列族visit_counter_cf with key_validation_class = UTF8Type 和comparator ='CompositeType(LongType,LongType,UTF8Type)' 和default_validation_class = CounterColumnType;
当我们在CLI中删除此列系列中的一行(我们使用Hector)时,它会被删除 但是当我们在同一行(相同的rowkey)中递增计数器时,它会继续从先前的计数器值(删除前的值)递增计数器。 请帮助理解这种行为,
答案 0 :(得分:3)
目前的Cassandra计数器实施存在许多严重的限制。其中之一是已删除列(或已删除行中的列)的增量被视为未定义行为。来自Cassandra counters wiki page:
反移除本质上是有限的。例如,如果您非常快速地发出序列“递增,删除,递增”,则删除可能会丢失(如果由于某种原因,删除恰好是最后收到的消息)。因此,提供计数器的移除仅用于最终删除,即删除的计数器之后不增加。这也适用于行删除:如果删除一行计数器,则递增该行中的任何计数器(在删除之前存在)将导致未确定的行为。
简而言之,您不应尝试在计数器列族中重复使用已删除的行。