Я знаю, что здесь есть много вопросов о временных рядах, но мой, похоже, не подходит для данных решений. Я также новичок в Cassandra, поэтому я могу подходить к этому с неправильным мышлением. Потерпите меня.
Я получаю данные поиска в виде:
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 с разными размерами корзины, и все это при создании хотспотов; я вынужден использовать вторичные индексы; или есть другой вариант, о котором я не знаю?
Заранее спасибо.