Используйте 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.

Другие вопросы по тегам