Кассандра легкая путаница транзакции - PullRequest
0 голосов
/ 10 апреля 2020

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

Как и в случае, если я использую IF NOT EXISTS, IF EXISTS, он должен применяться ко всему первичному ключу, а не только к разделу. ключевой, как сказано в этом посте Как работает транзакция LWT- Легкий вес, когда мы используем IF NOT EXIST?

Однако в книге Cassandra, Руководстве по определению, я вижу В этом примере

INSERT INTO reservation.reservations_by_confirmation 
(confirm_number,
hotel_id, start_date, end_date, room_number, guest_id) VALUES (
'RS2G0Z', 'NY456', '2020-06-08', '2020-06-10', 111, 1b4d86f4-ccff- 
4256-a63d-45c905df2677) IF NOT EXISTS;

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

INSERT INTO reservation.reservations_by_confirmation 
(confirm_number,
hotel_id, start_date, end_date, room_number, guest_id) VALUES (
'RS2G0Z', 'NY456', '2020-06-08', '2020-06-10', 111, 1b4d86f4-ccff- 
4256-a63d-45c905df2677) IF NOT EXISTS;

В этом случае транзакция завершится неудачно, поскольку уже существует резервирование с номером «RS2G0Z» и cql sh услужливо возвращает строку, содержащую указание ошибки и значения, которые вы пытались ввести.

enter image description here

Теперь мой вопрос, если я запустлю другой запрос

INSERT INTO reservation.reservations_by_confirmation 
(confirm_number,
hotel_id, start_date, end_date, room_number, guest_id) VALUES (
'RS2G0Z', 'NY466', '2020-06-08', '2020-06-10', 111, 1b4d86f4-ccff- 
4256-a63d-45c905df2677) IF NOT EXISTS;

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

Так что, когда в книге написано

This command checks to see if there is a record with the partition key

Разве это не неправильное утверждение? ? Пожалуйста, дайте мне знать, если я что-то неправильно понимаю

1 Ответ

0 голосов
/ 10 апреля 2020

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

Когда вы видите упоминание ключа раздела в контексте LWT, это обычно означает, что координация происходит между узлами, которые имеют реплику данного раздела ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...