Cassandra cql从每个用户中选择最后N条评论

时间:2015-11-03 08:44:39

标签: cassandra cql cql3

我有一张以下表格:

CREATE TABLE user_comment (
    username text,
    time timestamp,
    comment text,
    PRIMARY KEY (username, time)
) WITH CLUSTERING ORDER BY (time DESC);

假设任务是从用户Alice,'Bob'和Charlie检索最后10条评论,返回3 * N条记录。如何形成查询?

我现在正在做的是发出3个查询

SELECT * FROM user_comment WHERE username = 'Alice' limit 10;
SELECT * FROM user_comment WHERE username = 'Bob' limit 10;`
SELECT * FROM user_comment WHERE username = 'Charlie' limit 10;

并连接结果。

但这看起来很愚蠢。有更有效的方法吗?

我正在使用:

> show VERSION ;
[cqlsh 5.0.1 | Cassandra 2.1.8 | CQL spec 3.2.0 | Native protocol v3]

1 个答案:

答案 0 :(得分:3)

三个单独的查询是一个很好的方法。理想情况下,您可以同时运行它们。

您可能也知道IN子句,您可以使用该子句在单个语句中查询所有用户。

SELECT * FROM user_comment WHERE username IN ('Alice', 'Bob', 'Charlie') LIMIT 10;

但是,LIMIT将适用于所有用户,因此任何用户都会获得10。对于这种模式,您可能对ticket for allowing per-partition limits感兴趣(在撰写本文时尚未完成)。