对于gp数据库,DK(Distributed key)遵循以下原则:
数据均匀分布原则:
为达到最好性能,实例应当尽量存储等量的数据。如数据的分布不均匀,不平衡,倾斜,那些储存了较多数据的实例在处理自己的那部分数据时,会耗费更多的工作量。对于此,可以考虑选择具备唯一性的DK, 如主键。
本地操作原则:
在处理查询时,例如 关联,排序,聚合,可以先做的先做。 跨越系统级别的操作效率低。当不同的TABLE 的 DK相同时,在DK上的关联会 最高效的方式把大部分工作在本地完成。同时,总分父子表的DK应当保持一致。中间过程表,临时表的DK应尽可能的保持和源表的一致性,避免发生重分布。
均衡的查询负载均衡原则:
当发生查询的时候,期望使得所有的实例处理等量的数据。所以通过合理的DK设计,尽可能的使得查询的处理负载均衡在每一个节点,并保证where的结果集在各个节点上也是均匀的。
DK字段越少越好.
DK设计规范如下:
每个表必须通过distributed by显示指定分布键。不允许使用默认DK建立。对于无法确定的采用随机分布。
分布键原则上是一个,最多尽量不超过3个。
相关联的表分布键应该尽量一致,例如账户主档,账户明细档,账户资金余额档存在关联查询的需求,可以把 账号作为三张表的分布键。
对于维表,代码表,应选择其主键作为分布键。
对于实体表,选择逻辑主键作为分布键。
对于协议主题的所有表,以及协议主题和其他的主题的关系表,应采用协议编号作为分布键。
对于当事人主题的表,采用当事人编号作为分布键。
对于事件主题表,采用事件编号作为分布键。
对于其他的主题,采用逻辑主键作为分布键。
分布键字段不可执行 update 操作
尽量不要使用随机分布,因为数据在节点之间交换迁移的时候影响性能。
为了保证数据分布均匀,在没有合适的字段作为分布键的情况下,应选择数据表的主键作为分布键。
对于没有逻辑主键,又没有合适的字段作为分布键的数据表,才会采用设置其分布策略为 distributed randomly。
随机分布的适合使用场景:查询时不需要跟其他的表关联,或者只会跟小表关联的数据表,才会采用随机分布策略。