我在Cassandra有一张表,结构如下:
CREATE TABLE test.top5(
timestamp timestamp,
category text,
term text,
volume int,
PRIMARY KEY(category, volume, term, timestamp)
WITH CLUSTERING ORDER BY (volume DESC);
我试图获得每个类别的前5个搜索。 volume列原本不需要是复合键的一部分,但在阅读了Cassandra(http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/create_table_r.html)中的聚类之后,我将其添加到复合键中,以便按卷自动排序。
由于Cassandra不支持GROUP BY,我目前能够获得每个类别的前5个搜索的唯一方法是:
查询1:SELECT DISTINCT category FROM test.top5;
然后,对于每个类别:
查询2:SELECT term, volume FROM test.top5 WHERE category = thisCategory LIMIT 5;
有更好或更有效的方法吗?在使用大量数据时,我觉得在性能方面会有相当大的开销。