【问题标题】:How to use OrderBy with primary key in Cassandra CQL?如何在 Cassandra CQL 中使用带有主键的 OrderBy?
【发布时间】:2014-03-27 23:47:52
【问题描述】:

以下是我的 Cassandra 表结构。

广告

AdvertisementId | Ad_Language | Ad_Caption            | Others
----------------------------------------------------------------------
A01(UUID)       | EN_US (text)| englishCaption (text) | Other Info(text)
A01(UUID)       | FR_CA (text)| French Caption (text) | Other Info (text)

主键是 (AdvertisementId, Ad_Language);

我正在使用 java 与 Cassandra 集成。有一个 Java API 调用来获取 List<advertisements>

是否有可能获取类似的行 查询:select * from ad_details orderBy advertisementId;(很遗憾,我无法指定将在 WHERE 或 In 子句中使用的 col_name)

我不能将广告 ID 作为集群键,因为我需要将 UUID 维护为 Cassandra 中复合主键的分区键。

以下查询有效:Select * from ad_details where advertisementId=xxx orderBy language ASC;

有人可以帮我执行 orderBy AdvertisingId 吗?

【问题讨论】:

    标签: java cassandra cql


    【解决方案1】:

    使用MurMur3partitionerRandomPartitioner 时,您不能按分区键排序。如果您使用的是有序分区器,则结果将按照创建表时为分区键指定的类型的顺序排列。

    【讨论】:

    • 虽然您的回答在技术上是正确的,但在生产中使用有序分区器是一个非常糟糕的主意。
    • 我并不是在建议使用有序分区器,只是注意到原始发布者没有指定他们使用的是哪个分区器。
    【解决方案2】:

    除非您使用 IN,否则您不能按主键排序。 如果你没有用“where”来限制你的搜索,你可能需要重新设计你的表,因为它不是一个有效的设计,当表变大时你不能以有效的方式查询它。

    【讨论】:

    • 问题是如何按分区键排序,而不是按集群列。
    • 我的评论没有提到聚类列
    • 使用 IN 进行排序时,您是按聚类列而不是分区键进行排序。发帖人询问按分区键排序,这是不可能的。您的回答没有解决发帖人的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 2013-08-27
    • 2017-05-19
    • 2014-07-02
    • 2014-04-04
    • 2015-02-24
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多