Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 在cassandra中拥有多个集群密钥有什么好处?_Nosql_Cassandra_Data Modeling - Fatal编程技术网

Nosql 在cassandra中拥有多个集群密钥有什么好处?

Nosql 在cassandra中拥有多个集群密钥有什么好处?,nosql,cassandra,data-modeling,Nosql,Cassandra,Data Modeling,据此: ORDER BY子句只能选择一列,该列必须是复合主键中的第二列。这甚至适用于主键中包含两个以上列组件的表。排序可以按升序或降序进行,默认为升序,并使用ASC或DESC关键字指定 复合主键中的第二列表示第一个群集键。如果组合主键中的第二列必须是排序依据列,那么拥有多个群集键的好处是什么?需要记住的一点是,群集键列也是主键列。大多数情况下,您希望引入额外的键列(碰巧也是集群列),这不是因为它们提供了更大的排序灵活性,而是为了能够存储更多的唯一行 记住这一点,如果引入额外的集群键列,您将能够利

据此:

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


复合
主键中的第二列表示第一个群集键。如果组合
主键中的第二列必须是
排序依据
列,那么拥有多个群集键的好处是什么?

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

记住这一点,如果引入额外的集群键列,您将能够利用它们进行结果排序和范围查询

考虑下表:

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)