Блокировка взаимного исключения Cassandra (синхронизация) - PullRequest
8 голосов
/ 18 января 2011

Есть ли способ синхронизации клиента с использованием встроенных функций cassandra?

Мне нужно выполнить некоторые операции, и эти операции должны быть синхронизированы со всеми другими клиентами (взаимное исключение).СУБД Я могу заблокировать всю таблицу или подготовить специальную таблицу для целей синхронизации и использовать для нее SELECT ... FOR UPDATE.

Можно ли добиться этого с помощью Cassandra без каких-либо сторонних приложений?Если нет, то какой лучший способ сделать это?Предпочтительными языками являются Java и Python.

Ответы [ 4 ]

8 голосов
/ 18 января 2011

Невозможно заблокировать весь (или подмножество) семейства столбцов без сторонних библиотек, таких как Apache ZooKeeper .

Вероятно, я бы начал смотреть на Domic Williams cage , прежде чем начать свой собственный механизм распределенной блокировки

2 голосов
/ 19 мая 2012

Поскольку C * обеспечивает атомарность на уровне строк, почему бы не использовать Алгоритм хлебопечения Лампорта .Я нашел неполную страницу и на C * wiki.

https://github.com/jakedouglas/cassandra_lock

2 голосов
/ 26 января 2011

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

0 голосов
/ 20 марта 2011

Я также искал способ сделать синхронизацию с кассандрой, но, насколько я знаю, она не предоставляет механизмов для реализации мьютексов.

Однако в memcached есть атомарная операция cas (проверить и установить), которую можно использовать для реализации мьютекса. Он также имеет клиентов Python и Java.

Таким образом, вы можете использовать memcached для реализации мьютексов для синхронизации и выполнять чтение / запись данных с уровнем согласованности кворума в cassandra, чтобы убедиться, что последняя запись всегда возвращается при чтении.

У кого-нибудь есть опыт реализации мьютекса с memcached?

...