Используйте Astyanax, чтобы перечислить все строки в семействе столбцов Cassandra
У меня есть несколько вопросов, связанных с Кассандрой:
Я должен хранить некоторые данные (около 10 миллионов строк) (скажем, естественный ключ - сортируемый, отметка времени обновления, createDate (только YYYYMMDD) и поле значения. Я планирую создать следующий CF
CREATE TABLE data (
id text,
createdate text,
updatedate timeuuid,
value text,
PRIMARY KEY (id, updatedate)
);
CREATE TABLE data_createdate (
id text,
createdate text,
value text,
PRIMARY KEY (id, createdate)
);
Мой запрос на использование будет выглядеть так:
- получить все строки (идентификатор, значение, созданный, обновленный), поэтому CQL, как это будет делать
SELECT * FROM data
Я использую Astyanax, как мне сделать пейджинг? Нужно ли включать разделитель как сохраненный в порядке, чтобы я мог использовать token(id)
в диапазоне значений для пролистывания.
- получить все строки с обновленным диапазоном, так что CQL, как это будет делать
SELECT * FROM data where updatedate > startdate and updatedate < enddate
Опять же, как мне сделать пейджинг?
- получить все строки с созданным диапазоном, это похоже на приведенный выше вопрос, но я могу запустить CQL против
data_createdate
CF. Опять же, как мне сделать пейджинг?
Любые предложения и комментарии? Большое спасибо.
2 ответа
В общем, вы хотите избежать всего, что требует перебора всех ключей в семействе столбцов. Как и в RDBM, вы должны выполнять только те запросы, для которых настроены правильные индексы.
поскольку updatedate
является частью составного ключа строки для data
В таблице вы можете использовать диапазонные запросы к этому столбцу для пейджинга (к сожалению, как именно выполнять пейджинг в Cassandra - довольно сложная тема). Это означает, что ваши первые два варианта использования на самом деле одинаковы.
Я не совсем уверен, что вы подразумеваете под третьим случаем, вы имеете в виду, что вы хотите запросить строки в data
с запросом диапазона на createdate
- например SELECT * FROM data WHERE createdate > '20130206' AND createdate < '20130228'
? Я смущен твоим вторым столом (data_createdate
) и где это вписывается.
Если вы имеете в виду то, что я думаю, вы имеете в виду, что одним из решений может быть добавление вторичного индекса к createdate
столбец data
(CREATE INDEX data_createdate_index ON data (createdate)
). Вы можете прочитать больше о вторичной индексации в документации.
Если вы хотите добиться подкачки страниц, попробуйте сохранить последний ключ из последнего полученного набора, чтобы при следующем получении фрагмента страницы в следующий раз точкой входа вашего запроса был последний сохраненный ключ. Предложит вам перейти по этой ссылке http://www.datastax.com/docs/1.2/cql_cli/using/paging.