Мне нужно иметь возможность вернуть всех пользователей, которые выполнили действие в течение указанного интервала.Определение таблицы в Cassandra чуть ниже:
create table t ( timestamp from, timestamp to, user text, PRIMARY KEY((from,to), user))
Я пытаюсь реализовать следующий запрос в Cassandra:
select * from t WHERE from > :startInterval and to < :toInterval
Однако этот запрос, очевидно, не будет работать, поскольку он представляетзапрос диапазона для ключа раздела, заставляющий Cassandra искать все узлы в кластере, отказываясь от своей цели в качестве эффективной базы данных.
Есть ли эффективный способ моделирования этого запроса в Cassandra?
MyРешение состоит в том, чтобы разделить обе метки времени на соответствующие им годы и месяцы и использовать их в качестве ключа разделения.Таблица будет выглядеть следующим образом:
create table t_updated ( yearFrom int, monthFrom int,yearTo int,monthTo int, timestamp from, timestamp to, user text, PRIMARY KEY((yearFrom,monthFrom,yearTo,monthTo), user) )
Если бы я хотел, чтобы пользователи, которые выполняли действие в период с января 2017 года по июль 2017 года, запрос выглядел бы следующим образом:
select user from t_updated where yearFrom IN (2017) and monthFrom IN (1,2,3,4,5,6,7) and yearTo IN (2017) and monthTo IN (1,2,3,4,5,6,7)
Будет либыть лучшим способом смоделировать этот запрос в Кассандре?Как бы вы подошли к этому вопросу?