Вопрос:

Cassandra Transaction with ZooKeeper - Это работает?

database database-design transactions nosql cassandra

3387 просмотра

2 ответа

951 Репутация автора

Я пытаюсь реализовать транзакционную систему для 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 и backup-ed в cassandra, если таковые имеются.
  2. если транзакция завершилась неудачно на шаге 5, информация, сохраненная на шаге 3, используется для отката любых изменений.
  3. если на сервере произошел сбой / сбой / кража при очистке человека, после перезагрузки перед подачей любого запроса я проверяю, есть ли какие-либо ключи, сохраненные в zookeeper с шага 4, если это так, я буду использовать эти ключи для извлечения резервных копий данных хранятся на шаге 3 и помещают эти данные туда, где они были, таким образом откатываются от любых неудачных транзакций.

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

Автор: Viele Источник Размещён: 30.06.2010 02:56

Ответы (2)


5 плюса

18810 Репутация автора

Вы должны посмотреть в Клетки: http://ria101.wordpress.com/2010/05/12/locking-and-transactions-over-cassandra-using-cages/

http://code.google.com/p/cages/

Автор: jbellis Размещён: 13.07.2010 02:05

0 плюса

1 Репутация автора

Если вы хотите возможности транзакции в C *, то Scalar DB является одним из вариантов.

Через библиотеку Cassandra может выполнять высокодоступные и масштабируемые транзакции ACID.

Автор: feeblefakie Размещён: 19.11.2018 01:32
Вопросы из категории :
32x32