cassandra 2.0.9: лучшие практики для столбцов с большим объемом записи

Меня немного смущает кластеризация в Cassandra. У меня есть приложение, которое очень интенсивно пишет и обновляет. В традиционной реляционной базе данных я бы разделил данные на две таблицы: одна таблица для данных, которые изменяются нечасто; и одна таблица (с более короткими строками) для часто меняющихся столбцов:

Например:

create table user_def ( id int primary key, email list< varchar > ); # stable
create table user_var ( id int primary key, state int ); # changes all the time

Но Cassandra, кажется, оптимизирована для доступа к редко заполненным столбцам, поэтому я не уверен, что есть какое-то преимущество в имитации этого подхода для схем Cassandra.

Есть ли в Cassandra какое-либо преимущество в разделении часто обновляемых столбцов на отдельную таблицу/семейство столбцов (в отличие от редко обновляемых столбцов) или мне следует объединить все столбцы вместе в одну таблицу/семейство столбцов? Изменятся ли обстоятельства, если у меня будет составной первичный ключ и в дело вступит кластеризация?


person Mayur Patel    schedule 22.07.2014    source источник


Ответы (2)


Cassandra обрабатывает первичные ключи следующим образом:

Первый ключ в первичном ключе (который может быть составным) используется для разделения ваших данных. Это определяет, на каком узле (узлах) ваши данные сохраняются (и на которые реплицируются). Другие поля в первичном ключе затем используются для сортировки записей в разделе. Весь раздел всегда будет целиком находиться в одном узле (и узлах-репликах). Кроме того, каждая запись в узле сортируется по «другим» полям в первичном ключе. [Первый элемент первичного ключа называется ключом раздела, а остальные поля первичного ключа называются ключами кластеризации.]

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

person ashic    schedule 23.07.2014

Я одобрил ответ Ашика, пока не наткнулся на это: http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

в котором говорится (для удаления тяжелого доступа):

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

Это подпадает под антипаттерн «очередь» для продукта.

person Mayur Patel    schedule 23.07.2014