Легкая транзакция в cassandra

У меня есть два вопроса относительно LightWeight Transcation в cassandra,

1) Какой уровень блокировки (строка? столбец? таблица? уровень блокировки) будет предоставлен для следующих двух запросов?

i) INSERT INTO user (user_id, user_name, user_phone, timestamp) VALUES(1,'uma', 9003934069, 4331312423232) IF EXISTS;
ii)  UPDATE user SET user_name = 'harry' where user_id=1 IF timestamp=4331312423232;

2) Если LWT предоставляет механизм блокировки, почему нам нужно установить SERIAL согласованность в READ? Я имею в виду, если происходит какое-либо условное обновление, зачем нам нужна ПОСЛЕДОВАТЕЛЬНАЯ согласованность выше этого?

Было бы действительно здорово, если бы кто-то мог ответить за это.

Спасибо, Гарри


person Harry    schedule 24.11.2017    source источник


Ответы (1)


Cassandra не предоставляет механизм блокировки, IF NOT EXISTS – это облегченная транзакция.

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

Cassandra достигает линеаризуемой согласованности с помощью протокола paxos.

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

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

Легкие транзакции

Это звучит как высокая стоимость — возможно, слишком высокая. Вот почему Cassandra может генерировать исключение тайм-аута. Следовательно, резервируйте легковесные транзакции для тех ситуаций, когда они абсолютно необходимы.

Источник: http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_ltwt_transaction_c.html https://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0

person Ashraful Islam    schedule 24.11.2017
comment
Можете ли вы объяснить, что тогда LWT предоставит? Где нам нужно его использовать? - person Harry; 24.11.2017
comment
LWT предлагает способ обеспечить уровень изоляции транзакций, аналогичный уровню сериализации, предлагаемому РСУБД. - person Ashraful Islam; 24.11.2017
comment
Допустим, T1 из узла 1 пытается обновить строку 1, в то же время T2 из узла 2 пытается обновить ту же строку 1. Как LWT предотвратит это? - person Harry; 24.11.2017
comment
Два пользователя, пытающиеся создать уникальную учетную запись пользователя в одном и том же кластере, могут перезаписать работу друг друга, и ни один из пользователей не узнает об этом, в этом случае требуется строгая согласованность. - person Ashraful Islam; 24.11.2017
comment
Одна из транзакций t1 или t2 завершится ошибкой - person Ashraful Islam; 24.11.2017
comment
Отлично, используя ответ, как показано ниже справа, cqlsh:qnapvm> UPDATE vmserver SET vm_name = 'vmnamev3', где vm_id = 2 IF timestamp = 111111112; [применяется] | метка времени -----------+----------- False | 111111113 - person Harry; 24.11.2017
comment
Давайте продолжим обсуждение в чате. - person Harry; 24.11.2017