【发布时间】:2020-09-18 13:00:32
【问题描述】:
在 Cassandra 权威指南一书中,据说分区键和集群键的组合保证了数据库中的唯一记录......我理解分区键是保证记录唯一性的那个 - 节点记录存储的位置。聚类键用于对记录进行排序。有人可以帮我理解这一点吗? 感谢和抱歉这个问题......
【问题讨论】:
-
我看到了...它没有回答...对不起
标签: cassandra cassandra-2.0 cassandra-3.0
在 Cassandra 权威指南一书中,据说分区键和集群键的组合保证了数据库中的唯一记录......我理解分区键是保证记录唯一性的那个 - 节点记录存储的位置。聚类键用于对记录进行排序。有人可以帮我理解这一点吗? 感谢和抱歉这个问题......
【问题讨论】:
标签: cassandra cassandra-2.0 cassandra-3.0
primary key,它必须是唯一的。partition key + clustering key 必须是唯一的,但这并不意味着分区键或集群键必须是唯一的。你可以插入
当您再次插入 (a,b) 时,它将更新现有主键的非主键值。
在以下示例中,userid 是分区键,date 是集群键。
cqlsh:play> CREATE TABLE example (userid int, date int, name text, PRIMARY KEY (userid, date));
cqlsh:play> INSERT INTO example (userid, date, name) VALUES (1, 20200530, 'a');
cqlsh:play> INSERT INTO example (userid, date, name) VALUES (1, 20200531, 'a');
cqlsh:play> INSERT INTO example (userid, date, name) VALUES (2, 20200531, 'a');
cqlsh:play> SELECT * FROM example;
userid | date | name
--------+----------+------
1 | 20200530 | a
1 | 20200531 | a
2 | 20200531 | a
(3 rows)
cqlsh:play> INSERT INTO example (userid, date, name) VALUES (2, 20200531, 'b');
cqlsh:play> SELECT * FROM example;
userid | date | name
--------+----------+------
1 | 20200530 | a
1 | 20200531 | a
2 | 20200531 | b
(3 rows)
cqlsh:play>
【讨论】:
primary key(与 RDBMS 中相同,表中的每一行都必须有一个唯一的主键)是 partition key + clustering columns。 partition key(对于每一行来说不是唯一的,并且在 RDBMS 中不存在)仅用于决定分区中的行将存储在哪个节点上。