gpt4 book ai didi

cassandra获取时间范围内的所有记录

转载 作者:行者123 更新时间:2023-12-03 06:39:12 26 4
gpt4 key购买 nike

我必须使用以(user_id,时间戳)作为键的列族。在我的查询中,我想获取给定时间范围内的所有记录,与 user_id 无关。这是确切的表架构:

CREATE TABLE userlog (
user_id text,
ts timestamp,
action text,
app_type text,
channel_name text,
channel_session_id text,
pid text,
region_id text,
PRIMARY KEY (user_id, ts)
)

我尝试运行

SELECT * FROM userlog  WHERE ts >= '2013-01-01 00:00:00+0200' AND  ts <= '2013-08-13 23:59:00+0200' ALLOW FILTERING;

它在包含小数据集的本地 cassandra 安装上运行良好,但失败了

Request did not complete within rpc_timeout.

在包含所有数据的生产系统上。

是否有一个查询(最好是 cql)可以与给定的列族顺利运行,或者我们必须更改设计?

最佳答案

超时是因为 Cassandra 的返回数据时间超过了超时时间(默认为 10 秒)。对于您的查询,Cassandra 将在返回之前尝试获取整个数据集。对于多个记录,这很容易花费比超时更长的时间。

对于产生大量数据的查询,您需要分页,例如

SELECT * FROM userlog WHERE ts >= '2013-01-01 00:00:00+0200' AND  ts <= '2013-08-13 23:59:00+0200' AND token(user_id) > previous_token LIMIT 100 ALLOW FILTERING;

其中 user_id 是之前返回的 user_id。您还需要对 ts 进行分页,以确保获得最后返回的 user_id 的所有记录。

或者,在 Cassandra 2.0.0(刚刚发布)中,分页是透明完成的,因此您的原始查询应该不会超时或手动分页。

ALLOW FILTERING 表示 Cassandra 正在读取您的所有数据,但仅返回指定范围内的数据。仅当范围是大部分数据时,这才有效。如果您想查找例如内的记录5 分钟的时间窗口,这效率非常低。

关于cassandra获取时间范围内的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18697725/

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