Cassandra CAS разница между WHERE и IF - PullRequest
0 голосов
/ 03 февраля 2020

Используя пример из статьи Используя облегченные транзакции , пример такой транзакции приводится как:

UPDATE cycling.cyclist_name
  SET firstname = 'Roxane'
  WHERE id = 4647f6d3-7bd2-4085-8d6c-1229351b5498
  IF firstname = 'Roxxane';

Чем это отличается от замены IF на WHERE, как в:

UPDATE cycling.cyclist_name
  SET firstname = 'Roxane'
  WHERE id = 4647f6d3-7bd2-4085-8d6c-1229351b5498 
  AND firstname = 'Roxxane';

Я предполагаю, что второй не выполняет чтение и запись за один шаг, а скорее выбирает в зависимости от того, где и затем применяет обновление, в то время как первый блокирует запись других процессов в БД при выполнении запроса.

1 Ответ

1 голос
/ 03 февраля 2020

В случае одновременного обновления с двух разных клиентов, первый запрос будет гарантировать, что за один раз будет применен только один (при условии, что НЕ используется согласованность NON-SERIAL), но это не так для второго обновления. Проверьте это .

...