暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase8c 的数据分布策略建议

原创 在或不在 2023-05-23
464

(1) 是否建议手动选择分布键

实际生产中,建议手动进行分布键选择。对于分布式数据库,分布键(hash类型)的选取对于数据库的性能影响还是比较大的,如果选取不当,可能会导致:

1. 数据倾斜,查询时出现部分DN节点的IO短板,从而影响整体查询性能。

2. 增加跨节点间的网络通信数据量

一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列

(2) 数据分布策略建议

1. 分布方式:

策略

描述

适用场景

Hash

表数据通过hash方式散列到集群中的所有DN实例上。

数据量较大的事实表

Replication

集群中每一个DN实例上都有一份全量表数据。

小表,维度表

· 复制表(Replication)方式将表中的全量数据在集群的每一个DN实例上保留一份。主要适用于记录集较小的表。这种存储方式的优点是每个DN上都有该表的全量数据,在join操作中可以避免数据重分布操作,从而减小网络开销,同时减少了plan segment(每个plan segment都会起对应的线程);缺点是每个DN都保留了表的完整数据,造成数据的冗余。一般情况下只有较小的维度表才会定义为Replication表。

· 哈希(Hash)表将表中某一个或几个字段进行hash运算后,生成对应的hash值,根据DN实例与哈希值的映射关系获得该元组的目标存储位置。对于Hash分布表,在读/写数据时可以利用各个节点的IO资源,大大提升表的读/写速度。一般情况下大表定义为Hash表。

2. Hash 分布表的分布键建议选取原则:

· 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。

· 在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表tab1相关的部分查询中出现tab1的列col1存在常量的约束(例如col1=’000001’),那么就应当尽量不用col1做分布列。

· 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论