6

カウンターの値を更新するために次のことを行っていますが、更新されたカウンター値をすぐに戻す簡単な方法があるかどうか疑問に思います。

mutator.incrementCounter(rowid1、 "cf1"、 "counter1"、value);

4

2 に答える 2

7

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 を返す場合があります。

于 2012-01-28T17:36:25.487 に答える
0

それを行う唯一の方法は、それを照会することです。Cassandra には、インクリメントしてから読み取る機能はありません。

于 2012-01-27T21:16:59.837 に答える