我的cassandra数据模型:
CREATE TABLE last_activity_tracker ( id uuid, recent_activity_time timestamp, PRIMARY KEY(id));
CREATE INDEX activity_idx ON last_activity_tracker (recent_activity_time) ;
我们的想法是跟踪他们及其最近一次活动的活动。
我需要找到其上一次活动是一年前的“ID”。 所以,我试过了:
SELECT * from last_activity_tracker WHERE recent_activity_time < '2013-12-31' allow filtering;
据我所知,我不能使用&#39; =&#39;对于二级索引列。
但是,我无法添加&#39; recent_activity_time&#39;到密钥,因为我需要使用事件的最近活动时间来更新此列。
非常感谢任何解决我的问题的想法。
答案 0 :(得分:0)
我可以看到您的查询存在问题。你没有打一个分区。因此,查询的性能将非常糟糕。它需要在整个集群中进行查询(假设您已采取措施使其工作)。
如果您要查询ID的最后活动时间,请考虑以更友好的查询格式存储它。你可以试试这个:
create table tracker (dummy int, day timestamp, id uuid, primary key(dummy, day, id));
然后您可以插入日期作为日期的纪元(忽略时间),并且哑= 0。
这应该使你能够:
select * from tracker where dummy=0 and day > '2013-12-31';
您可以在插入时设置ttl,以便旧条目过期(在这种情况下可能在一年之后)。我们的想法是以适合您查询的方式存储信息。