2016-11-21 9 views
0

У меня есть таблица,Cassandra timeuuid сравнения

CREATE TABLE log (
    uuid uuid, 
    time timeuuid, 
    user text, 
    .... 
    PRIMARY KEY (uuid, time, user) 
) 

и

СОЗДАТЬ CUSTOM INDEX time_idx на Log (время) с использованием 'org.apache.cassandra.index.sasi.SASIIndex';

, то я хочу, чтобы выбрать базу по времени

выберите * из журнала, где время> 84bfd880-b001-11e6-918c-24eda6ab1677;

и ничего не возвращает, он вернется, если я использую равные (=). На каком этапе я ошибся?

ответ

0

Вам нужно сделать индекс time_idx индексом SPARSE.

Индекс SPARSE предназначен для повышения производительности запросов больших, плотных диапазонов чисел, таких как временные метки для данных, вставленных каждые миллисекунды. Если данные являются числовыми, миллионы значений столбцов с небольшим количеством ключей разделов характеризуют данные, а запросы диапазона будут выполняться против индекса, тогда SPARSE - лучший выбор. Для числовых данных, которые не соответствуют этим критериям, PREFIX - лучший выбор.

Отбросьте time_idx и создать с ниже запроса

CREATE CUSTOM INDEX time_idx on Log(time) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'SPARSE' }; 

Теперь вы можете запросить с неравенствами> =,> и < =.

Ограничение: индексирование SPARSE используется только для числовых данных, поэтому запросы LIKE не применяются.

И еще одно, что ваше создание таблиц неверно. Это должно быть

CREATE TABLE log (
    uuid uuid, 
    time timeuuid, 
    user text, 
    PRIMARY KEY (uuid, time, user) 
) 
+0

Спасибо за ответ, но я увидел это ** Существует важное замечание о режиме SPARSE. По разреженным значениям это означает, что для каждого индексированного значения очень мало (максимально 5) соответствующих строк. Если имеется более 5 совпадающих строк, будет выбрано исключение ** Это нормально с моим случаем, потому что он может возвращать более 5 строк? – Schmidt

+0

Мне кажется, что время - столбец с высокой мощностью. > Высокая мощность относится к столбцам со значениями, которые очень необычны или уникальны. Значения столбцов высокой мощности обычно являются идентификационными номерами, адресами электронной почты или именами пользователей. Примером столбца таблицы данных с высокой производительностью будет таблица USERS с столбцом USER_ID. Если это столбец с высокой мощностью, вы должны использовать разреженные –