Я знаю, что здесь есть много вопросов по времени, но мой, похоже, не подходит для этих решений. Я также новичок в Cassandra, поэтому я, возможно, приближаюсь к этому с неправильным мышлением. Потерпите меня.Cassandra Time-Series: Разрешить фильтрование, ведра или другое
Я получаю поиск данных в виде:
datetime_searched, term_used, product_found
и запрос я хотел бы сделать:
Учитывая стартап дату и конечный срок, вернуть все которые попадают в это окно времени. Первоначально окно будет длиться месяц. Это может (читать: будет) изменяться.
Например, учитывая следующие данные:
2013-11-20 00:00:00, "christmas", "decorated tree"
2014-12-01 20:00:00, "christmas", "wrapping paper"
2014-12-23 15:00:00, "christmas", "decorated tree" (duplicate term-product)
и запрос для временного диапазона 2014-12-01 до 2015-01-01, Я хотел бы иметь возможность получить:
"christmas", "wrapping paper"
"christmas", "decorated tree"
Мой первоначальный подход выглядел как и большинство примеров для данных временных рядов:
CREATE TABLE search_terms (
datetime_searched timestamp,
term_used text,
product_found text,
PRIMARY KEY (term_used, date_searched)
);
SELECT term_used, product_found
FROM search_terms
WHERE datetime_searched > [start]
AND datetime_searched < [end];
, но для этого требуется, чтобы у меня были вторичные индексы и/или разрешающая фильтрация, что, похоже, я должен избегать, если я только фиксирую небольшой процент фильтруемых данных.
Моя вторая идея заключалась в создании ведра времени, но это решение, похоже, работает, только если я ограничу запрос на ведра. Кажется, он также создает горячие точки - в моем первоначальном случае - месячную горячую точку. Например, для ежедневных ковшей:
CREATE TABLE search_terms_by_day (
datetime_searched timestamp,
day_searched timestamp,
term_used text,
product_found text,
PRIMARY KEY (day_searched)
);
SELECT term_used, product_found
FROM search_terms_by_day
WHERE day_searched=[my limited query's bucket];
Итак, какие у меня варианты? Я ограничиваю свои запросы размером в ковш, возможно, создавая много CF с разными размерами ковша, при создании горячих точек; Я вынужден использовать вторичные индексы; или есть другой вариант, о котором я не знаю?
Заранее спасибо.
Чтобы избежать вопроса о сканировании всех ведер, дата поиска может использоваться вместо дня года –