2016-05-26 4 views
0

Мне нужно создать таблицу Cassandra, на которой будут выполняться конкретные запросы.Первичный ключ в таблице Кассандры

Мне нужно иметь возможность искать в этой таблице на основе диапазона дат, типа и одного или нескольких статусов. Более конкретно, запрос будет как:

выберите * из таблицы, где дата в диапазоне (от, до) и тип = 'некоторый тип' и статус IN (STATUS1, СОСТОЯНИЕ 2, ..., statusN)

Поскольку Cassandra не разрешает операцию сравнения с ключом раздела, я решил сломать дату (которая является Мгновенным типом в Java) в MONTH_YEAR. Например, дата 2015/21/12: 19: 02: 01 будет преобразована в 122015 (12 - месяц и 2015 год даты).

Пока что моя идея для ключа раздела: ((type, monthAndYear), статус, дата, uuid).

Так что, когда я хочу, чтобы все записи с определенным типом, состоянием и внутри диапазона дат, я могу выполнить: выберите * из таблицы, где типа = «типа» и monthAndYear IN «monthAndYear1 monthAndYear2, monthAndYear3» и статуса IN ('status1', status2 ') и date> = from и date < = to.

Моя единственная проблема здесь в том, что результат этого запроса упорядочен по статусу (так как это первый столбец кластеризации таблицы). Я хочу, чтобы все записи были упорядочены на основе поля даты.

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

Не могли бы вы предложить мне какое-либо решение (если оно существует) для этой проблемы?

Благодаря

+0

http://stackoverflow.com/help/mcve, ** Код ** – theblindprophet

ответ

0

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

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