Пакетная мутация в Кассандре?

Я хочу обновить несколько строк в 2 CF. Меня не волнует порядок их обновления? Но гарантировано ли, что если один из них добьется успеха, то, в конечном итоге, получат и другие, если какой-то узел C * выйдет из строя между ними?

Класс Hector BatchMutation использует пакетное обновление или атомарное пакетное обновление, поскольку это две разные вещи.


person Peter    schedule 08.12.2013    source источник


Ответы (1)


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

BEGIN BATCH
  INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user');
  UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3';
  INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c');
  DELETE name FROM users WHERE userid = 'user1';
APPLY BATCH;

Класс Hector BatchMutation использует экономичную операцию batch_mutate. Это слабее, чем atomic_batch_mutate, который является эквивалентом вышеупомянутого Thrift. batch_mutate является атомарным только для обновлений одного и того же ключа (хотя могут быть разные CF), тогда как atomic_batch_mutate является атомарным для всех обновлений. Я не думаю, что Hector реализовал atomic_batch_mutate, поэтому вам нужно будет перейти на CQL3 и драйвер с поддержкой CQL3, например. Драйвер Java от DataStax.

person Richard    schedule 10.12.2013