Как получить максимальное значение из таблицы cassandra с предложением where - PullRequest
0 голосов
/ 03 мая 2018

У меня небольшая проблема с дизайном, у меня следующий запрос:

SELECT MAX(idt) FROM table WHERE idt < 2018

но я не могу понять, как создать таблицу согласно этому запросу. idt должен быть ключом кластеризации, чтобы иметь возможность делать больше, чем или ниже, чем операций, а также максимальное ухудшение, но я не знаю, что я должен использовать в качестве ключа раздела (я не хочу использовать разрешить фильтрацию). Единственное решение, которое я нашел, это использовать постоянное значение в качестве ключа раздела, но я знаю, что это считается плохим дизайном. Любая помощь?

Спасибо,

1 Ответ

0 голосов
/ 03 мая 2018

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

SELECT id FROM table WHERE bucket = '2018' AND id < 100 limit 1;

Тогда ваш ключ будет выглядеть как ((bucket), id) упорядоченный идентификатор DESC, столь большой в начале раздела. В этом случае сегменты делятся на год, поэтому в конечном итоге вы делаете запрос в год, который вы ищете. если idt не уникален, вам может потребоваться сделать что-то вроде:

((uuid), idt) или ((bucket), uuid, idt) сортировка по IDT DESC (еще раз выдает, если не уникален для этой записи). Тогда вы можете делать такие вещи, как

SELECT max(idt) FROM table WHERE GROUP BY bucket

хотя все же лучше

SELECT max(idt) FROM table WHERE bucket = '2018' GROUP BY bucket

, который даст вам максимум для каждой корзины, так что вам придется пролистывать его и генерировать глобальный максимум самостоятельно, но это лучше для кластера, поскольку он естественным образом ограничивает небольшой запрос по сравнению с одним запросом, отбивающим весь кластер. Может быть хорошей идеей в этом запросе также ограничить размер выборки до 10 или 100 или что-то по сравнению с 5000 по умолчанию, поэтому страницы набора результатов работают медленнее (что предотвращает слишком большую работу с координатором).

Чтобы выполнить всю эту работу где-то еще, вы, возможно, захотите рассмотреть Spark, поскольку он может дать вам гораздо более насыщенные запросы и выполнять их настолько эффективно, насколько это возможно (что может быть неэффективно, но будет пытаться).

...