【问题标题】:What is the benefit of having more than one cluster key in cassandra?在 cassandra 中拥有多个集群密钥有什么好处?
【发布时间】:2014-01-26 16:11:32
【问题描述】:

据此blog

ORDER BY 子句只能选择单个列,并且该列必须是复合 PRIMARY KEY 中的第二列。这甚至适用于在主键中具有 2 个以上列组件的表。排序可以按升序或降序进行,默认升序,并使用 ASC 或 DESC 关键字指定。

复合PRIMARY KEY 中的第二列表示第一个簇键。如果ORDER BY 列必须是组合PRIMARY KEY 中的第二列,那么拥有多个集群键有什么好处?

【问题讨论】:

    标签: nosql cassandra data-modeling


    【解决方案1】:

    要记住的一点是集群键列也是主键列。大多数情况下,您会希望引入额外的键列(也恰好是集群列),不是因为它们为您提供了更大的排序灵活性,而是为了能够存储更多唯一的行。

    考虑到这一点,如果您确实引入了额外的集群键列,您能够利用它们进行结果排序和范围查询。

    考虑这张表:

    CREATE TABLE table4 (col1 int, col2 int, col3 int, col4 text, PRIMARY KEY (col1, col2, col3));
    

    1) 跨多列聚类意味着您可以发出复合范围查询,例如:

     cqlsh:ks> SELECT * FROM table4 WHERE col1=1 AND col2=2 AND col3 > 1;
    
     col1 | col2 | col3 | col4
    ------+------+------+------
        1 |    2 |    2 |  122
        1 |    2 |    3 |  123
    
     (2 rows)
    

    2) 至于按多列排序(博客文章声称您不能这样做):您可以事实上这样做:

    cqlsh:ks> SELECT * FROM table4 WHERE col1=3 ORDER BY col2 DESC, col3 DESC;
    
     col1 | col2 | col3 | col4
    ------+------+------+------
        3 |    3 |    3 |  333
        3 |    3 |    2 |  332
        3 |    3 |    1 |  331
        3 |    2 |    3 |  323
        3 |    2 |    2 |  322
        3 |    2 |    1 |  321
        3 |    1 |    3 |  313
        3 |    1 |    2 |  312
        3 |    1 |    1 |  311
    
    (9 rows)
    

    但是有一个问题。除了需要查询引擎对行重新排序的简单反向之外的任何操作都是不允许的。所以下面的方法不起作用,因为它需要非平凡的排序:

    cqlsh:ks> SELECT * FROM table4 WHERE col1=3 ORDER BY col2 DESC, col3 ASC;
    Bad Request: Unsupported order by relation
    

    换句话说,查询引擎只能处理两种可能的顺序:自然顺序或反向顺序。要指定两者中的哪一个,您永远需要为 ORDER BY 指定多个列。因此,这样的查询将返回与上述查询完全相同的结果集(#2):

    cqlsh:ks> SELECT * FROM table4 WHERE col1=3 ORDER BY col2 DESC;
    
     col1 | col2 | col3 | col4
    ------+------+------+------
        3 |    3 |    3 |  333
        3 |    3 |    2 |  332
        3 |    3 |    1 |  331
        3 |    2 |    3 |  323
        3 |    2 |    2 |  322
        3 |    2 |    1 |  321
        3 |    1 |    3 |  313
        3 |    1 |    2 |  312
        3 |    1 |    1 |  311
    
    (9 rows)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2020-10-18
      • 2023-03-02
      • 2015-01-04
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多