我有一张这样的表
CREATE TABLE my_table(
category text,
name text,
PRIMARY KEY((category), name)
) WITH CLUSTERING ORDER BY (name ASC);
我想编写一个查询,它将按名称在整个表中排序,而不仅仅是每个分区。
这可能吗?什么是" Cassandra方式"写那个查询?
我已经在StackOverflow网站上阅读了其他答案,并且一些示例创建了单个分区,其中一个id(存储桶)是主键,但我不想这样做,因为我希望将数据分布在按类别划分的节点
答案 0 :(得分:4)
Cassandra不支持跨分区排序;它只支持在分区内进行排序。
所以你可以做的是分别查询每个类别,它会返回每个分区的排序名称。然后,您可以在客户端中对这些已排序的结果进行合并(这比完整排序要快得多)。
另一种方法是使用Spark将表读入RDD并在Spark中对其进行排序。
答案 1 :(得分:2)
始终通过访问模式对cassandra表进行建模(关系db / cassandra填充不同的需求)。
对于Cassandra 2.X,必须为每个访问模式建模新的列族(表)。因此,如果您的访问模式需要对要排序的特定列进行排序,请在分区/集群键中使用该列对表进行建模。因此代码必须插入 master 表和投影表中。 注意,根据您的业务逻辑,如果有并发更新,则可能难以同步,尤其是在更新后执行 读取预测时。
使用Cassandra 3.x,现在有物化视图,这将允许您具有类似的功能,但这将由Cassandra在内部处理。不确定它是否适合你的问题因为我没有用3.X玩太多但是这可能值得调查。
更多关于blog。