Возможно ли приращение целого числа в кассандре в некоторых случаях? - PullRequest
0 голосов
/ 10 декабря 2018

Допустим, у меня есть следующая таблица:

id text PRIMARY_KEY,
question_asked (int?),
question_answered (int?)

Эта таблица будет обновляться каждый раз одним и тем же пользователем.Он не может обновить эту таблицу одновременно.

Я хочу использовать следующий запрос:

UPDATE %s.%s SET question_asked = question_asked + 1 WHERE %s = :execution_id;

Если я использую LOCAL_QUORUM при обновлении для этого конкретного случая.Могу ли я иметь какие-либо проблемы относительно согласованности?И если это так, я буду рад понять, почему

Я знаком со счетчиком, и вот как я его использую до сих пор.Проблема использования счетчика состоит в том, что я не могу определить TTL.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Для операций такого типа взгляните на столбцы счетчиков:

https://cassandra.apache.org/doc/latest/cql/types.html#counters

https://docs.datastax.com/en/cql/3.3/cql/cql_using/useCountersConcept.html

Имейте в виду, что счетчики угроз Кассандры отличаются от обычныхстолбцы данных и счетчиков должны находиться в отдельном столбце фамилий. -

0 голосов
/ 10 декабря 2018

Нет, в Кассандре это невозможно, пока вы не используете специальный тип с именем counter.Но у него есть свои проблемы - поскольку он не идемпотентен, он не будет повторяться в случае ошибок на стороне сервера, что может привести к неверным результатам.

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

...