2015-12-11 1 views
9

Я новичок в Кассандре, и я прочитал, что Кассандра поощряет денормализацию и дублирование данных. Это меня немного смущает. Давайте представим себе следующий сценарий:Как обеспечить согласованность данных в Cassandra на разных таблицах?

У меня есть пространство ключей с четырьмя таблицами: A, B, C и D.

CREATE TABLE A ( tableID int, column1 int, column2 varchar, column3 varchar, column4 varchar, column5 varchar, PRIMARY KEY (column1, tableID) );

Давайте представим себе, что другие таблицы (B, C, D) имеют ту же структуру и те же данные, что и таблица A, только с другим первичным ключом, чтобы отвечать на другие запросы.

Если я обновляю строку в таблице A, как я могу обеспечить согласованность данных в других таблицах, имеющих одни и те же данные?

ответ

6

Для этой цели Кассандра обеспечивает BATCH. Из documentation:

Оператор ПАРТИИ объединяет несколько языковых модификации данных (DML) заявление (INSERT, UPDATE, DELETE) в одной логическую операцию, и устанавливает клиент поставляемыми метку времени для всех столбцов, написанных заявлениями в пакет. Объединение нескольких операторов может сэкономить обмен данными между клиентом/сервером и координатором/репликами сервера. Однако из-за распределенного характера Cassandra максимально распространять запросы по ближайшим узлам для оптимизации производительности. Использование партий для оптимизации производительности обычно не выполняется, как описано в разделе «Использование и неправильное использование пакетов». Информацию о самом быстром способе загрузки данных см. В разделе «Cassandra: пакетная загрузка без ключевого слова Batch».

Партии являются атомарными по умолчанию. В контексте пакетной операции Cassandra атомный означает, что если какая-либо из пакетов будет успешной, все это будет. Чтобы добиться атомарности, Cassandra сначала записывает сериализованную партию в таблицу системных журналов, которая потребляет сериализованную партию в виде данных blob. Когда строки в партии были успешно записаны и сохранены (или намечены), данные в пакете удаляются. Для атомарности есть штраф за производительность. Если вы не хотите взять на себя это наказание, предотвратить Кассандру от записи в систему batchlog пути использования Незарегло опции: BEGIN Незарег ПАРТИЮ

Незарег ПАРТИЯ почти всегда нежелательна, и я считаю, снимаюсь в будущих версиях. Обычные партии обеспечивают необходимую функциональность.

1

Вы также можете исследовать новую функцию от Cassandra 3.0 под названием materialized views:

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

В 3.0 Кассандра представит новую функцию под названием Материализованные виды. Материализованные представления обрабатывают автоматическую денормализацию на стороне сервера, устраняя необходимость обработки этой денормализации на стороне клиента и обеспечивая возможную согласованность между базовыми и отображаемыми данными. Эта денормализация позволяет очень быстро находить данные в каждом представлении, используя обычный канал чтения Кассандры.

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

+2

Будьте осторожны при движении по этой дороге, потому что материализованные представления обновляются асинхронно, что означает, что ваше приложение должно будет иметь возможность обрабатывать конечную согласованность. Подход к пакетной обработке позволяет обеспечить лучшую согласованность для этого типа проблем за счет сложности приложений. – awinder

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