我必须使用以(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我们必须更改设计?
EDIT1:在原始问题之后添加了一个描述问题的案例.
我想查询一个不属于我的密钥的列.如果我理解正确,我需要在该列上定义二级索引.但是,我希望使用大于条件(不仅仅是平等条件),而且似乎仍然没有支持.
我错过了什么吗?你会如何解决这个问题?
我想要的设置:
Cassandra 1.1.6
CQL3
CREATE TABLE Table1(
KeyA int,
KeyB int,
ValueA int,
PRIMARY KEY (KeyA, KeyB)
);
CREATE INDEX ON Table1 (ValueA);
SELECT * FROM Table1 WHERE ValueA > 3000;
Run Code Online (Sandbox Code Playgroud)
由于在Cassandra 1.1.6中仍然不支持在具有复合键的ColumnFamilies上定义二级索引,因此我必须解决丢弃其中一个键的临时解决方案,但我仍然遇到与非相等条件相同的问题.
还有另一种解决方法吗?
感谢您的时间.
相关来源:http : //cassandra.apache.org/doc/cql3/CQL.html#selectStmt http://www.datastax.com/docs/1.1/ddl/indexes
EDIT1
这是一个可以解释问题的案例.正如rs-atl所指出的那样,它可能是一个数据模型问题.假设我在stackoverflow上保留了所有用户的列族.对于每个用户,我保留了一批统计信息(Reputation,NumOfAnswers,NumOfVotes ......所有这些都是int).我想查询这些统计信息以获取相关用户.
CREATE TABLE UserStats(
UserID int,
Reputation int,
NumOfAnswers int,
.
.
.
A lot of stats...
.
.
.
NumOfVotes int,
PRIMARY KEY (UserID)
);
Run Code Online (Sandbox Code Playgroud)
现在我有兴趣根据这些统计数据切割UserID.我希望所有用户拥有超过10K的声誉,我希望所有用户的答案少于5,等等.
我希望有所帮助.再次感谢.