在Cassandra中查询将按特定字段对整个表进行排序

时间:2015-12-13 00:20:48

标签: cassandra cql cqlsh

我有一张这样的表

CREATE TABLE my_table(
category text,
name text,
PRIMARY KEY((category), name)
) WITH CLUSTERING ORDER BY (name ASC);

我想编写一个查询,它将按名称在整个表中排序,而不仅仅是每个分区。

这可能吗?什么是" Cassandra方式"写那个查询?

我已经在StackOverflow网站上阅读了其他答案,并且一些示例创建了单个分区,其中一个id(存储桶)是主键,但我不想这样做,因为我希望将数据分布在按类别划分的节点

2 个答案:

答案 0 :(得分:4)

Cassandra不支持跨分区排序;它只支持在分区内进行排序。

所以你可以做的是分别查询每个类别,它会返回每个分区的排序名称。然后,您可以在客户端中对这些已排序的结果进行合并(这比完整排序要快得多)。

另一种方法是使用Spark将表读入RDD并在Spark中对其进行排序。

答案 1 :(得分:2)

始终通过访问模式对cassandra表进行建模(关系db / cassandra填充不同的需求)。

  • 对于Cassandra 2.X,必须为每个访问模式建模新的列族(表)。因此,如果您的访问模式需要对要排序的特定列进行排序,请在分区/集群键中使用该列对表进行建模。因此代码必须插入 master 表和投影表中。 注意,根据您的业务逻辑,如果有并发更新,则可能难以同步,尤其是在更新后执行 读取预测时。

  • 使用Cassandra 3.x,现在有物化视图,这将允许您具有类似的功能,但这将由Cassandra在内部处理。不确定它是否适合你的问题因为我没有用3.X玩太多但是这可能值得调查。

    更多关于blog

  • 的具体化观点