首页 > 解决方案 > 分区键的第一个键可以是集群键吗?

问题描述

在 Cassandra 数据库中使用以下模式:

CREATE TABLE IF NOT EXISTS  stackoverflow_sorted_by_key_part_two (
      key_part_one      UUID,
      key_part_two      UUID,
      idempotence_key   int,
      data              TEXT,
      PRIMARY KEY((key_part_one, idempotence_key), key_part_two)      
);

(key_part_one, idempotence_key)是分区键 & key_part_two 是集群键。

key_part_two使用上述模式,记录按升序排序(作为表索引的一部分)


但是,为了更快的选择查询(使用WHERE key_part_one == "some_uuid"),我们希望记录按 排序(作为表索引的一部分) key_part_one

以下架构是否增强了选择查询性能?

CREATE TABLE IF NOT EXISTS  stackoverflow_sorted_by_key_part_one (
      key_part_one      UUID,
      key_part_two      UUID,
      idempotence_key   int,
      data              TEXT,
      PRIMARY KEY((key_part_one, idempotence_key), key_part_two)      
)WITH CLUSTERING ORDER BY (key_part_one ASC);

标签: sqldatabasecassandracql

解决方案


不,您不能这样做 - 您只能在WITH CLUSTERING ORDER BY. 如果列是分区键的一部分,则它不可排序 - Cassandra 将散列函数应用于该列的值(或列,如果它是复合键),并使用该散列(令牌)来查找负责该令牌的节点。然后按聚类列排序仅在分区内发生。

PS 浏览DataStax 网站上免费提供的“Cassandra:权威指南,第 3 版”一书的第一章——它将帮助您进行 Cassandra 的数据建模。


推荐阅读