GaussDB 分片和分区策略

HASH 分布

根据分布键的哈希值,将数据均匀映射到各个节点,是

默认推荐

的方式

数据量大、更新频繁、查询多为等值条件(如 

WHERE id = ?

)的业务表,如订单表、用户表

DISTRIBUTE BY HASH(order_id);

RANGE 分布

将分布键的值划分为连续的区间,每个区间对应一个节点

数据有明显有序特征(如时间、地区),且频繁进行

范围查询

的场景,如日志表、监控数据表

DISTRIBUTE BY RANGE(create_time) ( ... );

LIST 分布

将分布键的

具体值

映射到指定节点,例如将特定省份的数据存放到固定节点

需要按业务定义的离散值(如地区、状态码)进行数据隔离或路由的场景

DISTRIBUTE BY LIST(region) ( ... );

REPLICATION 分布

复制表

,在每个节点上都保存一份完整的数据副本,并非真正意义上的分片

数据量不大(如小于2000万行)、更新频率低、但被频繁关联查询的小表,如字典表、配置表

DISTRIBUTE BY REPLICATION;

注意REPLICATION 表会造成存储空间膨胀(每节点一份全量),且更新时所有节点同步,会影响写入性能,需要谨慎使用

二、表分区策略(单节点内部分区)

这是在单个数据节点内部,进一步对表进行水平拆分的方式,主要用来提升查询性能维护便捷性(如快速删除历史分区)。GaussDB 支持以下几种分区类型:

  • 范围分区:根据数据范围(如日期、数值区间)将数据划分到不同分区,是最常用的分区方式。
  • 列表分区:根据离散的值列表进行分区,例如按业务类型、地区代码分区。
  • 哈希分区:通过哈希算法将数据均匀分布到多个分区,用于打散热点数据。
  • 间隔分区:一种特殊的范围分区,当插入的数据超出已有范围时,数据库会自动创建新分区,极大简化了按时间分区的维护工作。
  • 二级分区:在上述一级分区的基础上,再嵌套一层分区,例如先按 范围分区(按年),再按 哈希分区(按用户ID),以应对更复杂的场景。

💡 区分要点

  • 分布策略决定了数据存储在哪台机器上,解决的是横向扩展问题。
  • 表分区决定了数据在单台机器内部如何组织,解决的是单表管理和查询剪枝问题。

三、分片键选择的核心原则

分片键(分布键)的选择是 GaussDB 设计中最关键的一环,直接影响系统性能。主要遵循以下原则:

  1. 数据均匀:选择取值离散且分布均匀的列(如用户ID),避免数据倾斜导致部分节点过载。
  2. 贴合查询:高频查询的 WHERE 条件中应包含分片键,实现“单点命中”,避免 SQL 下发到所有节点执行(即“读放大”)。
  3. 利于关联:对于经常 JOIN 的大表,尽量选择相同的列作为分片键,使关联操作在节点内本地完成,大幅减少跨节点数据传输。
  4. 避免更新:分片键的值一旦插入,不建议更新。更新分片键可能导致数据需要在节点间迁移,带来严重的性能开销。
  5. 控制数量:复合分片键不宜超过3列。
全部评论

相关推荐

牛客52811839...:实习要写出来业务和产出,你这写的像流水账没人看。项目经历也没有,换个极简简历试试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务