【问题标题】:Cassandra time based queryCassandra 基于时间的查询
【发布时间】:2013-10-01 21:53:22
【问题描述】:

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

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

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

在 Cassandra 中可以做到吗? (我有点被有限的 CQL 查询功能所困扰)
如果没有,我该如何改造表格来做到这一点?

【问题讨论】:

    标签: cassandra cql3


    【解决方案1】:

    你能做到吗?是的。 你能有效地做到吗?我不相信。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2017-04-30
      • 2017-04-17
      • 2015-06-06
      相关资源
      最近更新 更多