Кассандра Оптимистическая Блокировка
У меня есть таблица cassandra1:
CREATE TABLE Policy.table1 (
name VARCHAR ,
date TIMESTAMP ,
version_num INT,
PRIMARY KEY (
name
)) WITH caching = 'all'
-- and memtable_flush_period_in_ms = 7200 ;
;
Мне нужно реализовать оптимистическую блокировку на этом столе. Когда мы читаем строку из таблицы 1, мы помним ее version_num. И когда мы хотим обновить эту строку, мы сравниваем текущее значение version_num и значение, которое мы запомнили. Также нам нужно увеличивать version_num при каждом обновлении.
Проблемы:
Мы не можем поместить version_num в предложение where, это приведет к ошибке: Плохой запрос: не найден PRIMARY KEY version_num в предложении where:
update table where name = 'abc' and version = 3
Мы не можем установить version_num как часть первичного ключа, потому что нам нужно обновить его значение
Если мы проиндексируем version_num, это не поможет для операторов обновления, будет выдано то же исключениеЕдинственный способ, который я вижу, - получить текущее значение version_num с помощью Java, и, если ожидаемые и фактические значения version_num совпадают, - выполнить обновление. Проблема в том, что в этом случае у нас нет атомарной операции проверки значения version_num и обновления строки.Вы видите какое-либо решение этой проблемы?