Как интегрировать Cassandra с Zookeeper для поддержки транзакций - PullRequest
13 голосов
/ 22 февраля 2011

У меня установлен кластер Cassandra и сервер Zookeeper. Теперь я хочу поддерживать транзакции в Кассандре с помощью zookeeper. Как я могу это сделать.

Zookeeper создает znodes для выполнения операций чтения и записи, и данные туда и обратно проходят через znodes в Zookeeper. Я хочу знать, как поддерживать функцию отката и фиксации в cassandra с помощью Zookeeper. Есть ли способ указать конфигурации cassandra в настройках zookeeper или zookeeper в cassandra.

Я знаю cassandra и zookeeper по отдельности, как данные читаются и пишутся, но я не знаю, как объединить их оба с помощью Java.

как мы можем проводить транзакции в Кассандре, используя Zookeeper.

Спасибо.

Ответы [ 4 ]

21 голосов
/ 14 марта 2011

У меня установлен кластер Cassandra и сервер Zookeeper. Теперь я хочу поддерживать транзакции в Кассандре с помощью zookeeper. Как мне это сделать.

С большим трудом. Кассандра не работает как транзакционная система. Записи в несколько строк не являются атомарными, нет возможности откатить записи, если некоторые записи заканчиваются неудачей, и нет способа гарантировать, что читатели читают согласованное представление при чтении.

Я хочу знать, как поддерживать функцию отката и фиксации в cassandra с помощью Zookeeper.

Zookeeper не поможет вам в этом, особенно функция фиксации. Возможно, вы сможете написать достаточно информации в zookeeper для отката в случае сбоя, но если вы делаете это, вы можете также сохранить информацию об откате в cassandra.

Zookeeper и Cassandra хорошо работают вместе, когда вы используете Zookeeper в качестве службы блокировки. Посмотрите на библиотеку Cages . Используйте zookeeper для координации чтения / записи на кассандре.

Попытка использовать кассандру в качестве транзакционной системы с атомарными фиксациями для нескольких строк и откатами будет очень неприятной.

1 голос
/ 04 марта 2016

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

Сама Cassandra имеет функцию, называемую Легкие транзакции , которая обеспечивает линеаризацию по ключам и сравнение-и-набор. С такими примитивами вы можете самостоятельно выполнять сериализуемые транзакции на уровне приложения.

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

Варианты этого подхода используются в системе Google Percolator и в CockroachDB .

Кстати, если у вас все в порядке с уровнем изоляции Read Committed, то имеет смысл взглянуть на статью транзакции RAMP Питера Баилиса.

0 голосов
/ 12 ноября 2013

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

Я ничего не знаю о размере файлов данных, которые вы рассматриваете, поэтому я не знаю, выполнимо ли это, однако может быть способ использовать это свойство с помощью небольших кусочков информации, а затем комбинировать их в целом.

Только мои 2 цента ...

0 голосов
/ 15 июня 2013

Существует функция BATCH для CQL3 Cassandra (Cassandra 1.2 - официальная версия, выпустившая CQL3), которая, как утверждается, может атомарно применять все обновления в BATCH как единое целое или ничего.

Это не означает, что вы можете откатить успешно выполненный пакет BATCH, как это может сделать СУБД, что должно быть сделано вручную.

В зависимости от согласованности и предпочтений, которые вы предоставляете для оператора BATCH, гарантии атомарности обновлений могут быть увеличены или уменьшены до некоторой степени с помощью опции UNLOGGED.

http://www.datastax.com/docs/1.2/cql_cli/cql/BATCH

...