Как я могу получить все строки в Cassandra между заданным диапазоном составных ключей?

Мой формат хранения данных:

RowKey: a:b:c
=> ( counter=d:e:f:g, value=1)
where,
 a: Timestamp (Format : YYYYMMDDHH, HH varies from 00 - 23)
 b: encoded Url
 c: id (Varies from 0 - 9)

 d: string type
 e: floating value
 f: floating value
 g: integer type

Я не хочу извлекать все такие строки (с включенными в них столбцами), где url = заданное значение из всего семейства столбцов, где c — от 00 до 23.

Как это можно сделать в Java (желательно с помощью Гектор клиент) ?


person Sitesh Shrivastava    schedule 08.01.2013    source источник
comment
Я не думаю, что мы могли бы запросить часть составного ключа раздела. Проверьте эту ветку. Вам нужно изменить модель данных.   -  person manuzhang    schedule 09.01.2013


Ответы (1)


В Кассандре это невозможно. CompositeKey довольно просты и просто превращают отдельные части в один ключ. Таким образом, данные хранятся (и сортируются) в cassandra в порядке их ключей, и именно так они извлекаются.

Вы сможете выполнять запросы диапазона/среза только для всего составного ключа (a:b:c), и он сначала сортируется по a, затем по b, затем по c. Если вы хотите иметь возможность выполнять запросы диапазона на c, вам нужно будет хранить свои данные с составным ключом в форме c:a:b - в этом случае вы не сможете выполнять запросы диапазона на a и b в одиночестве.

Здесь у вас есть два варианта:

1) Использовать реляционную базу данных (вероятно, здесь это не очень хорошее решение) 2) Дублировать данные. Итак, у вас есть две строки для ваших данных: одна, где CompositeKey — это a:b:c, а другая, где CompositeKey — это c:a:b (и третья b:c:a, если вам нужно выполнить сортировку запросов диапазона/срезов). только на б). Сами данные будут одинаковыми для всех двух (/трех) этих строк, и вы можете выполнить поиск соответствующей строки на основе нужного вам запроса. К сожалению, это один из недостатков Cassandra, но он необходим для реализации модели BigData.

person agentgonzo    schedule 14.01.2013