题目
Cassandra 主键组成及分区键的作用
信息
- 类型:问答
- 难度:⭐
考点
主键组成,分区键作用,数据分布原理
快速回答
Cassandra 主键由分区键(Partition Key)和集群键(Clustering Key)组成:
- 分区键决定数据在集群中的物理存储位置(分区)
- 集群键决定分区内数据的排序顺序
- 主键设计直接影响查询效率和负载均衡
1. 原理说明
Cassandra 的主键(PRIMARY KEY)是数据模型的核⼼,包含两部分:
- 分区键(Partition Key):通过哈希算法决定数据存储在哪个节点。相同分区键的数据会存储在同一个物理分区(Partition)中,保证高效读取。
- 集群键(Clustering Key):决定分区内数据的物理排序顺序,支持范围查询和排序操作。
2. 代码示例
创建用户表时定义主键:
CREATE TABLE users (
country_code TEXT, // 分区键(第一部分)
user_id UUID, // 分区键(第二部分)
registration_date DATE, // 集群键
name TEXT, // 普通列
PRIMARY KEY ((country_code, user_id), registration_date)
);说明:
(country_code, user_id)是复合分区键registration_date是集群键- 相同国家+用户的数据存储在同一个分区
- 分区内按注册日期排序
3. 最佳实践
- 分区键设计:选择高基数字段(如用户ID),避免数据倾斜(如只用
country_code会导致中国分区过大) - 集群键使用:将常用查询条件设为集群键(如时间戳)
- 查询优化:WHERE 子句必须包含分区键,否则触发低效的全集群扫描
4. 常见错误
- 热点分区:分区键设计不当(如只用
status字段),导致某个分区写入/读取压力过大 - 低效查询:未指定分区键的查询(如
SELECT * FROM users WHERE name='Alice') - 过度宽分区:单个分区存储超过 10 万行数据,影响性能
5. 扩展知识
- Token Range:分区键通过
token()函数哈希为 token 值,决定数据在环上的位置 - 复合主键:分区键和集群键均可由多列组成(如
PRIMARY KEY ((col1, col2), col3, col4)) - 数据局部性:同一分区的数据物理上连续存储,高效读取