Sql 分区键的第一个键可以是集群键吗?
在Cassandra数据库中使用以下模式: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
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
称为分区键和群集键吗?不,您不能将同一列同时用作分区键和群集列。但您可以创建第二列,该列将使用与第一列相同的内容填充。或者更确切地说,我们不需要群集列,因为它是一列。因为我们不需要排序因此,仅仅散列(列值)就足够了