Резервное копирование и восстановление Cassandra - PullRequest
0 голосов
/ 28 августа 2018

Сценарий выглядит следующим образом: У меня есть 1 узел Cassandra, в котором у меня есть одно пространство ключей, в котором у меня есть 2 таблицы. Давайте назовем эти таблицы A и B. Теперь у меня есть скрипт, который очень быстро вставляет данные в эти две таблицы в пакетном операторе. Таблица A имеет столбцы «k» и «значение». Таблица B имеет столбцы "k" и "значение". Пакетный запрос выглядит следующим образом:

BEGIN BATCH
INSERT INTO A(k, value) VALUES ("a", 1);
INSERT INTO B(k, value) VALUES ("b", 1);
APPLY BATCH

Значение 1 продолжает увеличиваться при каждом последующем пакетном запросе. Таким образом, если таблица A имеет (a, 1000), то таблица B должна иметь (b, 1000). Потому что (зарегистрированные) пакетные запросы являются атомарными.

Теперь мой вопрос: как в этом случае работает моментальный снимок nodetool? Я видел исходный код моментального снимка, и кажется, что он делает это для каждого пространства ключей, для таблицы, один за другим. Так, например, в момент времени 0 он делает снимок таблицы A, в которой есть слово («a», 100), затем в момент 1 вставляется новый пакетный запрос (со значением 101), а затем во время 2 он принимает снимок b, что означает, что снимок b будет иметь значение 101, а a - нет.

Если приведенное выше объяснение верно, не вызовет ли это проблемы при восстановлении? Как получится таблица A ("a", 101) после восстановления? Или таблица B не будет иметь ("b", 101) после восстановления?

1 Ответ

0 голосов
/ 28 августа 2018

Во-первых, существует тонкая грань между атомарностью и изоляцией. Пакеты гарантируют, что обе вставки будут применяться (атомарность), но они не гарантируют, что они будут применены в одно и то же время. (Изоляция)

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

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

...