我必须使用以(user_id,timestamp)为键的列族.在我的查询中,我想获取给定时间范围内的所有记录,与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)
)
Run Code Online (Sandbox Code Playgroud)
我试着跑
SELECT * FROM userlog WHERE ts >= '2013-01-01 00:00:00+0200' AND ts <= '2013-08-13 23:59:00+0200' ALLOW FILTERING;
Run Code Online (Sandbox Code Playgroud)
这在我的本地cassandra安装中工作正常,包含一个小数据集,但失败了
Request did not complete within rpc_timeout.
Run Code Online (Sandbox Code Playgroud)
在包含所有数据的生产系统上.
是否有一个,最好是cql,查询与给定的列系列顺利运行或de我们必须更改设计?
CREATE TABLE users (
userID uuid,
firstname text,
lastname text,
state text,
zip int,
age int,
PRIMARY KEY (userID)
);
Run Code Online (Sandbox Code Playgroud)
我想构造以下查询:
select * from users where age between 30 and 40
select * from users where state in "AZ" AND "WA"
Run Code Online (Sandbox Code Playgroud)
我知道我需要两个表来执行此查询但我不知道应该如何?
编辑
从卡罗的评论中,我发现这是唯一的可能性
CREATE TABLE users (
userID uuid,
firstname text,
lastname text,
state text,
zip int,
age int,
PRIMARY KEY (age,zip,userID)
);
Run Code Online (Sandbox Code Playgroud)
现在选择年龄在15到30之间的用户.这是唯一的可能性:
select * from users where age IN (15,16,17,....30)
Run Code Online (Sandbox Code Playgroud)
但是,不建议在此使用IN运算符,并且是反模式.
如何在年龄上创建二级指数?
CREATE index users_age ON users(age) …Run Code Online (Sandbox Code Playgroud) 我是 Cassandra 的新手,我正在尝试弄清楚应该如何存储数据,以便能够并行执行快速读取。我读过,分区数据会带来性能问题?是否可以并行从同一分区中的 Cassandra 表读取数据?