我们正在执行以下操作来更新计数器的值,现在我们想知道是否有一种直接的方法可以立即取回更新的计数器值。
mutator.incrementCounter(rowid1, "cf1", "counter1", value);
Cassandra thrift API 中没有单一的“incrementAndGet”操作。
Cassandra 中的计数器最终是一致的且非原子的。Fragile ConsistencyLevel.ALL 操作需要得到“保证被更新”的计数器值,即执行一致读取。ConsistencyLevel.QUORUM 是不够的(如计数器设计文档中所述:https ://issues.apache.org/jira/secure/attachment/12459754/Partitionedcountersdesigndoc.pdf )。
要实现看起来一致的 incrementAndGet 方法,您可能需要首先读取计数器值,然后发出增量突变,然后返回(读取值 + inc)。
例如,如果之前的计数器值是 10 到 20(在不同的副本上),并且其中一个添加 50,则 read-before-increment 将返回 60 或 70。而 read-after-increment 可能仍会返回 10 或 20。
唯一的方法是查询它。Cassandra 中没有可用的增量然后读取功能。