Sql 分区键的第一个键可以是集群键吗?

Sql 分区键的第一个键可以是集群键吗?,sql,database,cassandra,cql,Sql,Database,Cassandra,Cql,在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, idempoten

在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\u part\u one,幂等键)
是一个分区键&
key\u part\u two
是集群的关键

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


但是,为了更快地选择查询(使用
其中key\u part\u one==“some\u uuid”
),我们希望记录按
key\u part\u one
顺序排序(作为表索引的一部分)

下面的模式是否提高了select查询的性能

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);


不,您不能这样做-您可以使用的聚类顺序在
中仅指定聚类列。如果列是分区键的一部分,则它不可排序-Cassandra将哈希函数应用于该列的值(如果它是复合键,则为列),并使用该哈希(令牌)查找哪个节点负责该令牌。然后,按集群列排序只在分区内部进行


另外,请阅读“Cassandra:权威指南,第三版”一书的第一章,它将帮助您为Cassandra进行数据建模。

还有一个问题:对于只有3列的表(
key\u part\u One
key\u part\u two
data
),其中聚类列为
,聚类顺序为(key\u part\u one ASC)
…我们是否需要将语法提到
主键(key\u part\u one,key\u part\u one)
,其中
key\u part\u two
变成分区键yes,如果您至少通过
key\u part\u two
…搜索带有
主键(一些维护id)的表(
一些维护id
。我们可以将
一些维护\u id
称为分区键和群集键吗?不,您不能将同一列同时用作分区键和群集列。但您可以创建第二列,该列将使用与第一列相同的内容填充。或者更确切地说,我们不需要群集列,因为它是一列。因为我们不需要排序因此,仅仅散列(列值)就足够了