Сделка Кассандры с ZooKeeper - это работает? - PullRequest
4 голосов
/ 30 июня 2010

Я пытаюсь внедрить систему транзакций для Cassandra с помощью ZooKeeper. Поскольку я не думаю, что у меня достаточно опыта в реализации базы данных, я хотел бы знать, будет ли моя идея работать в принципе, или есть какой-то серьезный недостаток.

Вот описание высокого уровня шагов:

  1. определить все строки (ключи) и столбцы для редактирования. Пусть ключи будут [K0..Kn]
  2. применить блокировку записи ко всем задействованным строкам (блокировки реализованы в памяти Zookeeper)
  3. скопировать старые значения в отдельные места в Кассандре, которые однозначно идентифицируются ключом: [K'0..K'n]
  4. сохранить [K'0..K'n] и сопоставить их с [K0..Kn] в ZooKeeper, используя постоянный режим
  5. примените обновление к данным
  6. удалить записи в ZooKeeper
  7. разблокировать строки
  8. лениво удаляет записи [K'0..K'n] в потоке обслуживания (удаление cassandra использует временную метку, поэтому K'0..K'n можно использовать повторно для другой транзакции с более новой отметкой времени)

Обоснование:

  1. если транзакция не удалась на шаге 1-4, изменения не применяются, я могу прервать транзакцию и удалить все, что хранится в zookeeper и резервное копирование в cassandra, если таковые имеются.
  2. если транзакция не удалась на шаге 5, информация, сохраненная на шаге 3, используется для отката любых изменений.
  3. если на сервере произошел сбой / сбой / кража уборщиком, при перезапуске перед обслуживанием любого запроса я проверяю, сохранились ли какие-либо ключи в зоопарке с шага 4, если да, я буду использовать эти ключи для получения выполните резервное копирование данных, сохраненных на шаге 3, и поместите эти данные туда, где они были, тем самым откатив все неудачные транзакции.

Одной из моих проблем является то, что произойдет, если некоторые серверы будут отделены от кластера. У меня нет опыта в этой области, моя схема работает вообще? и это работает, если раздел происходит?

1 Ответ

5 голосов
/ 13 июля 2010
...