Cassandra timeuuid сравнение

У меня есть стол,

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

и

СОЗДАТЬ ПОЛЬЗОВАТЕЛЬСКИЙ ИНДЕКС time_idx в журнале (время) ИСПОЛЬЗОВАНИЕ 'org.apache.cassandra.index.sasi.SASIIndex';

тогда я хочу выбрать базу вовремя

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

и ничего не возвращается, он вернется, если я использую equal(=). Какой шаг я сделал неправильно?


person Schmidt    schedule 21.11.2016    source источник


Ответы (1)


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

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

отбросьте 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)
) 
person Ashraful Islam    schedule 21.11.2016
comment
Спасибо за ответ, но я видел это Есть важное замечание о режиме SPARSE. Разреженность означает, что для каждого индексированного значения очень мало (фактически максимум 5) совпадающих строк. Если имеется более 5 совпадающих строк, будет выдано исключение Это нормально для моего случая, потому что он может вернуть более 5 строк? - person Schmidt; 21.11.2016
comment
Мне кажется, что время — это столбец с высокой кардинальностью › Высокая кардинальность относится к столбцам со значениями, которые очень необычны или уникальны. Значения столбца с высокой кардинальностью обычно представляют собой идентификационные номера, адреса электронной почты или имена пользователей. Примером столбца таблицы данных с высокой кардинальностью может быть таблица USERS со столбцом с именем USER_ID. Если это столбец с высокой кардинальностью, вы должны использовать разреженный - person Ashraful Islam; 21.11.2016