1>每条记录的主键是否应该是唯一的? (我的猜测是
不是。)详细说明。假设我的桌子是这样的
CREATE TABLE user_action ( user_id int, action text, date_of_action
date, PRIMARY KEY (user_id) )
每个记录/行的主键应该是唯一的。在您提到的示例中,您只能有一条 user_id 记录。为了允许具有相同 user_id 的多行,您必须引入一个区分键。这个键在 Cassandra 中称为集群键,它是主键的一部分。
主键是(分区键和集群键)的组合。 Cassandra 使用分区键来查找分区/记录。如果在数据模型中定义了聚类键,那么它将用于区分不同的行。如果没有像您的情况那样定义聚类键,那么数据库中只会保留一条记录。
在下面的示例中,您可以拥有不同状态的相同 user_id 记录。这里的主键是 (user_id, state) 的组合。 user_id 是分区键,状态是集群键。
CREATE TABLE user_action (
user_id int,
state text,
action text,
date_of_action date,
PRIMARY KEY (user_id,state)
)
我猜我可以有多个具有相同 user_id 的行
如上所述,如果您定义了集群键,则可以有多个具有相同 user_id 的行,否则对于您引用的示例,这是不可能的。
2>如果主键不是每条记录一个,是否可以拆分主键
跨多个分区?
主键不能跨多个分区拆分。如上所述,主键的分区键部分将始终指向唯一分区。
3>一个分区可以有多个主键吗?
在我引用的示例中,(1,RJ), (1,GJ) 可能是指向由分区键值 1 指向的单个分区的主键。因此,从这个意义上说,您可以为一个分区拥有多个主键.
4>是主键本身决定选择分区还是
用于选择分区的主键的 hashCode?p>
分区键的哈希码(主键的一部分)用于获取分区
5>将分区视为文件是否公平?
这取决于您的数据模型。