代码之家  ›  专栏  ›  技术社区  ›  ChiMo

Cassandra聚类键序

  •  0
  • ChiMo  · 技术社区  · 8 年前

    所以我有一张桌子,沿着下面的线条看:

    CREATE TABLE schema.table (
      partitionkey int,
      clusterkey text,
      value bigint,
      PRIMARY KEY ((partitionkey), clusterkey)
    );
    

    我们靠这张桌子来按 clusterkey 用于分页。
    问题是:当从Cassandra返回结果时,看起来它们是基于它们的ASCII值排序的,而不是逻辑的A-Z排序。-这在程序上是有意义的,但对一个观看它的人来说却不是逻辑上的。

    所以一个问题是:
    SELECT clusterkey FROM schema.table WHERE partitionkey = 1 ORDER BY clusterkey ASC;
    当我期望得到像右边的结果时,在左边得到结果。

    ---------(current)---                ----------(wanted)---
              clusterkey                           clusterkey 
    ---------------------                ---------------------
           Other capital                      a should be top 
         Starts capital1                        Other capital 
         Starts capital2                      Starts capital1 
         Starts capital3                      starts capital1 
         Starts capital4                      Starts capital2 
            YYYYYYYYYYYY                      Starts capital3
            ZZZZZZZZZZZZ                      Starts capital4 
         a should be top                         YYYYYYYYYYYY 
         starts capital1                         ZZZZZZZZZZZZ 
            zzzzzzzzzzzz                         zzzzzzzzzzzz
    

    我知道我们可以将数据全部更改为小写/大写以正确排序,但这会更改数据的外观。-这绝对是不需要的。

    是否可以更改当前群集顺序的方法?
    -还是另一种逻辑排序方式?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Gangadhar Kairi    8 年前

    集群列按字典顺序排序,这意味着大写字符优先于小写字符。

    cassandra在当前版本中不支持不区分大小写的排序,但cassandra社区请求增强 Provide a locale/collation-aware text comparator 到目前为止,它还没有得到开发人员社区的太多关注。

        2
  •  1
  •   Alex Ott    8 年前

    不,除了使集群列的大小写为小写/大写外,无法对其排序不区分大小写。如果您关心数据的外观,则可以始终在附加列中保留未修改的文本(是的,它将复制数据),并将其显示给用户,而不是显示此集群列。

    推荐文章