【问题标题】:Query in Cassandra that will sort the whole table by a specific fieldCassandra 中的查询将按特定字段对整个表进行排序
【发布时间】:2016-03-18 17:26:11
【问题描述】:

我有一张这样的桌子

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

我想编写一个查询,该查询将按名称对整个表进行排序,而不仅仅是每个分区。

这可能吗?编写该查询的“Cassandra 方式”是什么?

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

【问题讨论】:

    标签: cassandra cql cqlsh


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-10-22
        • 2020-01-26
        • 1970-01-01
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2019-01-13
        相关资源
        最近更新 更多