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

Query in Cassandra that will sort the whole table by a specific field

我有一个table这样的

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

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

这可能吗?编写该查询的 "Cassandra way" 是什么?

我在 Whosebug 网站上阅读了其他答案,一些示例创建了具有一个 ID(桶)的单个分区,这是主键,但我不想要那样,因为我想让我的数据分布在节点上按类别

Cassandra 不支持跨分区排序;只支持分区内排序

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

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

始终通过访问模式对 cassandra table 进行建模(关系数据库/cassandra 满足不同的需求)。

  • 直到 Cassandra 2.X,必须为每个访问模式建模新的列族 (tables)。因此,如果您的访问模式需要对特定列进行排序,则在 partition/clustering 键中使用该列对 table 进行建模。因此,代码必须同时插入 mastertable 和投影 table。 请注意,根据您的业务逻辑,如果存在并发更新,这可能很难同步,特别是如果有更新要在 读取投影后执行。

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

    更多关于他们 blog 的物化视图。