Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > NoSQL > Cassandra Optimistic Locking


Автор: rds29 24.6.2014, 15:29
Добрый день,
Подскажите пожалуйста нужно реализовать следующую логику Optimistic Locking используя Java и Cassandra:

Имеется таблица
Col1 (PK) |      Date     |Version
--------------------------
abc        |  Some Date |3

Для реализации Optimistic locking используется колонка version. Когда мы считываем запись из базы данных - мы запоминаем версию, а когда необходимо сделать update этой записи - проверяем, что версия не поменялась.
Нужно сделать так, чтобы обеспечивалась атомарность проверки и обновления записи в таблице. Также необходимо инкрементировать версию при каждом апдейте.

Проблемы
1. Version нельзя поместить where для запроса вида
update table where Col1 = 'abc' and version = 3
2. Version нельзя поместить в PK, т.к. ее нужно изменять (насколько я понял PK - константа и менять его содержимое нельзя)
3. Можно сделать select, получив текущую version, сравнить в Java коде с той версией, которую мы запомнили, и потом сделать update. Здесь проблема в атомарности, точнее в ее отсутствии, а она необходима.

Подскажите, как обойти данные проблемы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)