Гектор, чтобы получить итоговое значение счетчика после выполнения incrementCounter - PullRequest
6 голосов
/ 27 января 2012

Мы делаем следующее, чтобы обновить значение счетчика, теперь мы задаемся вопросом, существует ли простой способ вернуть обновленное значение счетчика немедленно.

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

Ответы [ 2 ]

7 голосов
/ 28 января 2012

В Cassandra thrift API нет ни одной операции 'incrementAndGet'.

Счетчики в Кассандре в конечном итоге последовательны и не атомарны.Операция Fragile ConsistencyLevel.ALL требуется для получения значения счетчика «гарантированно будет обновлено», то есть для выполнения согласованного чтения.ConsistencyLevel.QUORUM недостаточно (как указано в документе разработки счетчиков: https://issues.apache.org/jira/secure/attachment/12459754/Partitionedcountersdesigndoc.pdf).

Чтобы реализовать метод incrementAndGet, который выглядит согласованным, сначала вам может понадобиться read значение счетчика, затем выдача инкремента мутация и возврат (чтение значения + inc).

Например, если предыдущее значение счетчика составляет от 10 до 20 (на разных репликах), и одиндобавьте 50 к нему, чтение перед приращением вернет либо 60, либо 70. И чтение после приращения может все равно вернуть 10 или 20.

0 голосов
/ 28 января 2012

Единственный способ сделать это - запросить его. В Cassandra нет функции увеличения, затем чтения.

...