Cassandra基于时间的查询

时间:2013-09-30 20:15:25

标签: cassandra cql3

我有以下Cassandra表,记录用户对网页的访问权。

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

并且想做这样的查询:
获取在过去一小时内访问该页面超过10次的用户列表。

有可能在卡桑德拉做到吗? (我有点坚持有限的CQL查询功能)
如果没有,我该如何改造表格呢?

1 个答案:

答案 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访问到一小时的开始。这可以让你每小时访问一次,但这与过去一小时内不一样。