我有以下 Cassandra 表,它记录了用户对网页的访问。
create table user_access (
id timeuuid primary key,
user text,
access_time timestamp
);
并想做这样的查询:
获取在过去一小时内访问该页面超过 10 次的用户列表。
可以在 Cassandra 中进行吗?(我有点卡在有限的 CQL 查询功能上)
如果没有,我该如何改造表来做到这一点?
你能做到吗?是的。你能有效地做到吗?我不相信。
目前尚不清楚您使用的 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 的计数器列和对小时开始的分箱访问可能会有更好的解决方案。这可以让您每小时访问一次,但这与过去一小时内不同。