4

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

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

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

可以在 Cassandra 中进行吗?(我有点卡在有限的 CQL 查询功能上)
如果没有,我该如何改造表来做到这一点?

4

1 回答 1

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 的计数器列和对小时开始的分箱访问可能会有更好的解决方案。这可以让您每小时访问一次,但这与过去一小时内不同。

于 2013-10-01T13:53:22.190 回答