2016-01-25 5 views
0

У меня есть вопрос относительно Cassandra пакетной изоляции:Cassandra гарантия партии изоляция

Нашего кластера состоит из одного центра обработки данных, коэффициента репликации 3, чтения и записи в LOCAL_QUORUM. Мы должны предоставить канал новостей, похожий на триггер «после», чтобы уведомлять клиентов о событиях CRUD данных в БД. Мы подумали о том, чтобы выполнить фактическую операцию и вставить событие в другую таблицу (также в другой раздел) внутри пакета. Асинхронно некоторые процессы будут считывать события из таблицы событий и отправлять их через MQ.

Поскольку мы пишем разные разделы, и порядок операций не обязательно поддерживается в пакетной операции; есть ли шанс, что наше событие написано, и наш процесс прочитал его до того, как наши фактические данные сохранились?

Может ли такое же произойти, если наша партия, наконец, не удастся?

С уважением, Алехандро

ответ

0

Из свойств ACID, Cassandra может обеспечить ДСА. Поэтому не ожидайте изоляции в ее классическом смысле.

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

Cassandra docs объяснить, как это работает:

Для достижения атомарность, Cassandra первый пишет сериализированную партию в системной таблице batchlog, потребляющей сериализированную партию в качестве данных BLOB. Когда строки в партии были успешно записаны и сохранены (или намечены), данные в пакете удаляются. Для атомарности есть штраф за производительность.

И наконец, используя таблицу Кассандры как MQ считается anti-pattern.

+0

Большое спасибо !!! – AQ1

Смежные вопросы