Cassandra DB误解分区键和主键

f87krz0w  于 2022-09-27  发布在  Cassandra
关注(0)|答案(1)|浏览(160)

晚上好
我的问题是,我最近对分区和主键的理解是,分区键是在节点之间分发数据,而主键始终包含分区键。我想创建一个分区键来用重复的分区键对数据进行集群,在这些集群中,我想为唯一的行创建一个主键。在我对Cassandra的第一次理解中,如果可以拆分分区和主键,那么这是可能的。这可能吗?
一个简化我想法的例子:
|国家|state|unique_id|
| ------------ | ------------ | ------------ |
|美国|德克萨斯州| 123|
|美国|德克萨斯州| 114|
country和state作为分区键,uniqueid作为主键。
如果我创建这样的主键:primary key((country,state,unique_id)),我无法在不使用unique_id的情况下进行筛选,但我需要一个类似SELECT unique_id FROM表WHERE state='Texas'and country='USA'的查询。如果我以这种方式创建主键:primary key((country,state)),那么很明显,每次插入一个具有相同国家和状态的条目时,它都会覆盖数据,这就是我需要唯一主键的原因。

oprakyz7

oprakyz71#

主键总是包含分区键,它总是主键中的第一项。分区键可以由多个列组成,这就是为什么在示例中的第一项周围有括号的原因。我认为在您的情况下,主键应如下所示:

PRIMARY KEY ((country, state),unique_id)

在这种情况下,分区键是国家+州的组合,然后在该分区内,您将拥有用于选择特定项目的唯一ID。主键的一般语法为:

partition key, clustering column1, clustering column2, ...

其中分区键可以是:

  • column-单列
  • (column1, column2, ...)-多列

相关问题