カウンタの値を更新するために、更新されたカウンタ値を直ちに取得する簡単な方法があるのだろうかと思います。incrementCounterを実行した後に得られたカウンタ値を取得するためにHector
mutator.incrementCounter(rowid1、 "cf1"、 "counter1"、value);
カウンタの値を更新するために、更新されたカウンタ値を直ちに取得する簡単な方法があるのだろうかと思います。incrementCounterを実行した後に得られたカウンタ値を取得するためにHector
mutator.incrementCounter(rowid1、 "cf1"、 "counter1"、value);
CassandraスリフトAPIには、「incrementAndGet」操作はありません。
カサンドラのカウンターは最終的に一貫性があり非アトミックです。脆弱なConsistencyLevel.ALLオペレーションは、「更新されることが保証される」カウンタ値を得るために必要であり、すなわち一貫した読み取りを実行する。 ConsistencyLevel.QUORUMで十分ではありません(カウンターデザイン文書で指定されているとおり:https://issues.apache.org/jira/secure/attachment/12459754/Partitionedcountersdesigndoc.pdf)。 最初はカウンタ値を読んで
が が一貫したに見えるincrementAndGetメソッドを実装するには、あなたが望むかもしれない、そして インクリメント突然変異、およびリターンを発行する(値を読み込む+ INC)。たとえば、以前のカウンタ値が(異なるレプリカで)10〜20で、1つが50を加算すると、read-before-incrementは60または70のいずれかを返します。また、read-after-または20。
それを行う唯一の方法は、それを照会することです。 Cassandraではインクリメント・アンド・リード・機能はありません。
非常に興味深いアプローチ、ありがとう! – tom
これはどのようにカウンターが原子にならないという問題を解決しますか?たとえば、私がもう1回(インクリメントとリード)操作を行うと、それでも古い値を得ることができます: コール1: カウンタ値:1 読み取り(取得)、インクリメント(呼び出し) )、戻り値2 呼び出し2:(最後のインクリメント呼び出しがすべてのノードを伝播していない) 読み取り(取得)、インクリメント(呼び出し)、戻り値2 –
@AlastorMoody:このメソッドは、 *一貫して見えるカウンタを実装する。カサンドラカウンタは最終的には本質的に一貫しているため、重要なパフォーマンスへの影響(つまり分散ロックによる)でカウンタをアトミックにすることは可能です。あなたが本当に原子カウンターが必要な場合 - カサンドラ(レディスのようなもの)以外にもたくさんのツールがあります。 – Wildfire