Сценарий выглядит следующим образом:
У меня есть 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) после восстановления?