侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

Cassandra 主键组成及分区键的作用

2025-12-12 / 0 评论 / 4 阅读

题目

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)
  • 数据局部性:同一分区的数据物理上连续存储,高效读取