
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据库的开发架构应用是大多数后端编程开发程序员需要重点掌握的一个编程开发技术,而今天我们就通过案例分析来了解一下,数据库分布表的分布列选取需要满足哪些原则。
a)列值应比较离散,以便数据能够均匀分布到各个DN
分布列值分布不均匀会导致数据在数据节点分布不均匀(某些DataNode上数据量大,某些DataNode上数据量小),这会导致不同DataNode上数据扫面的计算量不均衡,从而拖慢整个表扫描的性能;同时会因为部分DataNode的磁盘容量提前爆满,集群只读,导致集群有效容量下降。通常情况下使用表的主键列或者索引列作为表的分布列是一个不错的选择
b)考虑选择查询中的连接条件为分布列
GaussDB(DWS)的散列策略是hash,根据GaussDB(DWS)的分布式查询框架,当两表等值关联(join)列刚好是表的分布列时(如果分布列是多列,那么要求所有列都存在等值关联条件),join任务可以不再数据重分布的情况下直接Join,这样可以省去数据重分布的时间开销和网络资源开销,从而提升查询计算性能。
c)在满足前面两条原则的情况下尽量不要选取存在常量等值filter的列
GaussDB(DWS)会协调节点(Coordinator)上进行任务规划,此时会根据表的过滤条件(Filter)进行扫面操作剪枝优化,以较小IO资源开销。如果表dwcjk的分布列是zqdh,且表dwcjk扫描时存在Filter条件zqdh=’000001’,而根据散列策略zqdh=’000001’的值都分布在数据节点DN1上,那么协调节点(Coordinator)上进行任务规划时会对dwcjk表的扫描操作进行剪枝(指定只有在数据节点DN1对表dwcjk进行数据扫描操作)。这样对于表扫描的实际压力会值落在节点DN1,导致不同数据节点的IO压力不均衡。
注意此策略主要适用于统计分析类的重查询场景,对于详单查询等以点查为主要场景的查询类业务,在满足前两个约束的前提下,可以优选存在常量等值Filter约束列作为分布列。因为这种场景在数据节点上使用索引加速查询,查询耗时往往以ms或者几十ms计,通过剪枝把查询任务map到具体的某个数据节点上执行,节省无效操作(不用连接到所有的数据节点上操作),同时也会大大的提高并发能力
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。