我有以下Cassandra表,记录用户对网页的访问权。
create table user_access (
id timeuuid primary key,
user text,
access_time timestamp
);
并且想做这样的查询:
获取在过去一小时内访问该页面超过10次的用户列表。
有可能在卡桑德拉做到吗? (我有点坚持有限的CQL查询功能)
如果没有,我该如何改造表格呢?
答案 0 :(得分:3)
目前尚不清楚您使用的timeuuid代表什么。
您可以将其重新组织为
CREATE TABLE user_access (
user text,
access_time timestamp,
PRIMARY KEY (user_id, access_time)
);
SELECT COUNT(*)
FROM user_access
WHERE user_id = '101'
AND access_time > 'current unix timestamp - 3600'
AND access_time < 'current unix timestamp';
然后以您选择的语言自行过滤结果。我不会等待子查询支持。
如果你有很多用户,这将是非常低效的。
可能有一个更好的解决方案,使用cql的计数器列和binning访问到一小时的开始。这可以让你每小时访问一次,但这与过去一小时内不一样。