Скажем, у меня есть таблицаКаковы подводные камни материализованных представлений Кассандры и запросов IN?
CREATE TABLE events (
stream_id text,
type text,
data text,
timestamp timestamp,
PRIMARY KEY (stream_id, timestamp)
);
Шаблон запроса является то, что мне нужно, чтобы получить все события, stream_id
.
, например. SELECT * FROM events WHERE stream_id = 'A-1';
Тогда мне нужно получить все события с учетом набора type
. Поэтому я создаю MV:
CREATE MATERIALIZED VIEW events_by_type AS
SELECT * FROM events
WHERE type IS NOT NULL AND
timestamp IS NOT NULL
PRIMARY KEY (type, stream_id, timestamp)
WITH CLUSTERING ORDER BY (timestamp DESC);
Запрос похож
SELECT * FROM events_by_type WHERE type IN ('T1', 'T2);
Каковы подводные камни с этим шаблонов запросов и данных модели? Если есть, можно ли его улучшить?
Спасибо за очень подробный ответ. Учитывая изменения, вы предлагаете, как я могу запросить все события stream_id? Или это time_bucket влияет только на то, как я пишу данные? Что касается согласованности, вы говорите, что запись кворума в базовую таблицу не гарантирует чтение кворума из MV. Я согласен с тем, что MV в конечном итоге соответствует базовой таблице. –
просят «все» события для серии, я бы рекомендовал искру или по мере роста набора данных, это может занять слишком много времени. Если вы запрашиваете все события за определенный период времени, вы можете перебирать промежутки времени в этом диапазоне и выполнять запрос на каждый ведро. Поэтому, если ваше ведро времени составляет ГГГГ-ММ (ежемесячно), и вы хотите отчет за конец года, добавьте данные в свою обработку один месяц за раз. Его значительно более сложный, но имеющий дополнительную таблицу, которая содержит time_buckets для идентификатора потока, может сэкономить ваши потраченные впустую чтения. https://academy.datastax.com/demos/getting-started-time-series-data-modeling. –
Спасибо большое! Принято. –