当前位置: 首页 > 知识库问答 >
问题:

在Cassandra中拥有多个集群密钥的好处是什么?

索梓
2023-03-14

根据这篇博客:

ORDER BY子句只能选择单个列,并且该列必须是复合主键中的第二列。即使对于主键中包含超过2个列组件的表也是如此。排序可以按升序或降序进行,默认为升序,并用ASC或DESC关键字指定。

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

共有1个答案

田丰
2023-03-14

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

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

考虑下表:

CREATE TABLE table4 (col1 int, col2 int, col3 int, col4 text, PRIMARY KEY (col1, col2, col3));
 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)
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)
 类似资料:
  • 参考文献: https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_compound_keys_c.html Cassandra中分区键、复合键和聚类键的区别?

  • 我想将配置文件中的多个Cassandraendpoint提供给我的Java应用程序。 例如:cassandra主机:“主机1,主机2” 我尝试了< code > addContactPoints(host),但它不起作用。如果其中一个Cassandra节点关闭,我不希望我的应用程序关闭。

  • 我正在使用ADFS 2.0开发OIOSAML。我需要对IdP响应进行签名和加密。以下是我对SAML请求和响应的签名和加密工作原理的理解: < li>SP使用自己的证书密钥(Key-1)对请求进行签名 < li>IdP使用SP的公钥(Key-1)验证请求 < li>IdP使用自己的证书密钥(Key-2)对响应进行签名 < li>IdP使用SP提供的证书密钥(Key-3)加密响应声明 < li>SP使

  • 我试图在卡桑德拉的一小部分数据上运行一个火花工作。我手头有一个键的RDD(分区和集群列),我只想在这些键上运行我的作业。 我在BoundStatementBuilder上收到以下错误:19

  • 问题内容: 页面上有多个页面不好吗?我有一个网站,在不同的时间加载不同的内容。我解雇了里面的那些部分回发功能,但是我一次在页面上有大约4或5。这是不好的做法吗?具体来说,会引起性能问题吗? 问题答案: 这个答案不再重要。 请查看下面的其他文章,以获得更多最新的jQuery $ .ready()影响。这个职位超过3岁。 请参阅:http://jsperf.com/docready/11 答案是不!您