Cassandra 基于聚类键的范围查询

Cassandra 基于聚类键的范围查询,cassandra,cql,Cassandra,Cql,我有一个表,记录在我的网站上执行的用户活动。我的表结构如下所示: CREATE TABLE key_space.log ( id uuid, time bigint, ip text, url text, user_id int, PRIMARY KEY (id, time) ) WITH CLUSTERING ORDER BY (time DESC) 现在我想把过去5分钟里的所有记录都拿来 为了做到这一点,我使用了 select * from

我有一个表,记录在我的网站上执行的用户活动。我的表结构如下所示:

CREATE TABLE key_space.log (
    id uuid,
    time bigint,
    ip text,
    url text,
    user_id int,
    PRIMARY KEY (id, time)
) WITH CLUSTERING ORDER BY (time DESC)
现在我想把过去5分钟里的所有记录都拿来

为了做到这一点,我使用了

select * from key_space.log where 
  time>current_timestamp - 5 minutes ALLOW FILTERING;
但是这个查询没有返回任何结果&我得到了timedoutexception错误。如何解决这个问题?在此方面的任何帮助都将不胜感激。

您的表将id作为分区键,时间作为集群键。为了在集群键上运行范围查询,还需要指定分区键。因此,查询应该是

 select * from key_space.log where id="xyz" and time>current_timestamp - 5 minutes ALLOW FILTERING;

答案很好地描述了不同的卡桑德拉钥匙

与所有Cassandra模型一样,您需要首先构建一个专门为支持该查询而设计的表。即使可以使用当前表,它也必须扫描集群中的每个节点,这可能会超时(如您所见)

一种方法是使用时间“bucket”作为分区键。如果你只关心最后5分钟的记录,那么“一天”应该是有效的,只要你每天不获得数百万条新记录。如果你这样做了,那么你的“桶”就需要一个更小的时间组件

现在,这样的查询将起作用:

aaron@cqlsh:stackoverflow> SELECT day,time,id,user_id FROM log_by_day
  WHERE day=201920 AND time > 1563635871941;

 day    | time          | id                                   | user_id
--------+---------------+--------------------------------------+---------
 201920 | 1563635872259 | 7fef03da-6c23-4bf2-9e98-fd126ab17944 |    1234
 201920 | 1563635872259 | 9a0c49ce-5ad2-45c5-b570-cd9de1c060d1 |    4607
 201920 | 1563635872209 | 9227166e-cda2-4909-b8ac-4168922a0128 |    2112

(3 rows)

专业提示:在一个唯一的
id
上进行分区对于数据分发来说是非常好的,但是在查询灵活性方面没有给你太多的帮助。

我必须获取所有的记录,而不仅仅是id xyz的记录。这在Cassandra中是不可能的。即使将“时间”移动到分区键,也不能对分区键运行范围查询。
aaron@cqlsh:stackoverflow> SELECT day,time,id,user_id FROM log_by_day
  WHERE day=201920 AND time > 1563635871941;

 day    | time          | id                                   | user_id
--------+---------------+--------------------------------------+---------
 201920 | 1563635872259 | 7fef03da-6c23-4bf2-9e98-fd126ab17944 |    1234
 201920 | 1563635872259 | 9a0c49ce-5ad2-45c5-b570-cd9de1c060d1 |    4607
 201920 | 1563635872209 | 9227166e-cda2-4909-b8ac-4168922a0128 |    2112

(3 rows)