信息化 频道

金仓数据库KingbaseES MPP并行处理技术

  【IT168信息化】大数据已经成为IT界讨论最热烈的趋势之一,面向大数据时代,在数据仓库、数据分析挖掘等基于海量数据的业务系统中,对于用户的查询,需要进行大量的计算,传统系统的查询时间往往比较长,无法满足业务需求,影响用户体验。

  人大金仓充分针对硬件技术的发展现状,利用多CPU、多核等硬件技术的优势,实现了大规模并行处理技术(MPP),从而实现了针对数据库查询的并行处理。并行查询处理能够利用多个CPU来执行一条数据库查询语句,缩短查询的响应时间,提升海量数据的处理能力,主要应用于运行面向分析型服务的业务中,例如OLAP应用。

  KingbaseES数据库依据系统负载情况通过自动评估查询复杂度来决策是否启用大规模并行处理(MPP)特性来优化复杂查询的处理性能。通过对数据进行分片,并按照分片生成并行执行计划并启动多个线程并行执行,可以充分利用多核或多处理器资源,大幅提高查询处理性能。对大部分复杂查询语句,KingbaseES可以实现线性或近似线性的扩展,这意味着,对同样的SQL语句,如果充分利用一倍的CPU资源,处理的响应时间就可以缩短一半。

  KingbaseES并行查询处理采用基于数据划分的任务分解和执行技术。具体来讲,首先将数据水平分片成若干个大小近似相等的集合;然后将每个集合赋给一个CPU,并由该CPU在该集合上执行原查询。

  例如,对下面查询,KingbaseES并行查询执行特性可能会将1-10号部门的员工记录发向并行线程1,将11-20号部门的员工记录发向并行线程2。并行线程1和2会同时执行该查询,并将执行结果发送到协调线程(即接收用户查询请求的线程)。

  SELECT dept, COUNT(*)

  FROM emp

  GROUP BY dept;

金仓数据库KingbaseES MPP并行处理技术
▲图1并行查询处理实现技术示意

  KingbaseES采用按需分配的方式在不同的并行线程之间分配数据,这样做可以避免由于数据分配不均匀导致不同并行线程的负载不均。例如,如果1-10号部门的员工数远大于11-20号部门的员工数,则并行线程1的处理开销会远大于并行线程2。为避免该情况,KingbaseES不会预先将数据分配给各个并行线程,而是由各并行线程按需读取待处理数据。

  采用按需分配数据的方式会带来一个问题。以上面查询为例,如果两个位于1号部门的员工分别被两个不同的并行线程处理了,则会导致查询执行结果中1号部门会出现两次,而且各统计了一部分员工数量。为解决该问题,KingbaseES采用两种技术:

  数据分解后的操作重建

  KingbaseES能够自动对原始执行计划进行调整,以保证查询结果的正确性。例如,对上面查询,KingbaseES可能采取将Hash Aggregate按照下面方式进行分解和重建。首先各个并行线程对分配给自己的数据进行Hash Aggregate计算,算出这部分数据中各部门的员工个数,并将这部分计算结果发送给协调线程;协调线程接收到这些计算结果后,重新进行Hash Aggregate计算,不同的是,这时会将各并行线程计算出的同一部门员工数进行汇总。

金仓数据库KingbaseES MPP并行处理技术
▲图2数据分解及操作重建示意

  并行线程间的数据交换

  KingbaseES支持并行线程间的数据交换(Redistribute Motion)。例如,对上面查询,KingbaseES还可以通过Redistribute Motion操作将数据重新分布,从而保证同一部门的员工记录只被一个并行线程统计,从而也能保证结果的正确性。

金仓数据库KingbaseES MPP并行处理技术
▲图3并行线程间的数据交换示意

  除了采用基于数据划分的任务分解和执行技术外,KingbaseES还支持按照任务划分的并行执行,从而进一步提高查询的并行度。在按照任务划分的情况下,KingbaseES会将执行计划中每个数据交换结点的两端划分两个不同的任务,分别交给不同的并行线程执行。如下图所示:

金仓数据库KingbaseES MPP并行处理技术
▲图4 按照任务划分的并行执行示意

  最后,KingbaseES并行查询处理时,能够自动根据系统的负载情况来确定并行度,从而避免由于并行执行导致对CPU资源的过度争用。

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
0
相关文章