gpt4 book ai didi

cassandra - 集群键的范围查询

转载 作者:行者123 更新时间:2023-12-05 05:09:56 25 4
gpt4 key购买 nike

我有一个表,用于记录在我的网站上执行的用户事件。我的表结构如下:

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 错误。如何解决这个问题呢?对此的任何帮助将不胜感激。

最佳答案

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

一种方法是使用时间“桶”作为分区键。如果您只关心最后 5 分钟的记录,那么“天”应该可以工作,只要您每天没有获得数百万条新记录。如果这样做,那么您的“存储桶”将需要更小的时间组件。

CREATE TABLE log_by_day (
id uuid,
day bigint,
time bigint,
ip text,
url text,
user_id int,
PRIMARY KEY (day, time, id)
) WITH CLUSTERING ORDER BY (time DESC, id ASC);

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

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 进行分区非常适合数据分布,但不会给您带来太多查询灵 active 。

关于cassandra - 集群键的范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57106586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com