2013-09-30 139 views
4

我有以下Cassandra表记录用户对网页的访问权限。Cassandra基于时间的查询

create table user_access (
    id timeuuid primary key, 
    user text, 
    access_time timestamp 
); 

,并愿做这样的查询:
得到谁访问页面超过10倍,在最后一小时的用户列表。

在Cassandra中可以做到吗? (我有点卡住了有限的CQL查询功能)
如果不是,我该如何重新编码表来做到这一点?

回答

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的计数器列和合并访问到小时开始。这可能会让你每小时访问一次,但这与最近一小时内不一样。