并行执行原理
- 并行执行采用数据并行的并行模式,将需要执行的数据表划分为独立的数据块,然后启动不同的worker工作线程在划分的数据块上并行执行,最后leader线程通过消息队列汇总worker线程产生的部分结果。
- 整个并行执行分为三部分
- 数据切分:将并行扫描的表,切成独立的数据块;
- 启动worker线程并行执行
- 每个worker线程拷贝物理执行计划;
- worker之间通过争抢地方式获取数据块,保证负载均衡;
- 将执行结果通过消息队列发送给leader线程。
- 归并并行执行的部分结果
- leader线程从消息队列获取worker线程的部分结果;
- 归并这些部分结果, 得到最终结果;
- 发送最终结果至客户端client 。
并行执行支持算子-并行扫描
- 并行执行支持并行扫描,包括全表扫描(Table Scan)和索引扫描(Index Scan)。
- 每个worker线程独立地扫描表中部分数据,leader结点汇总这些数据,不需要额外的处理,就可以发送给client。
并行执行支持算子-并行聚合
- 并行执行支持进行聚合计算(Aggregation) ,包括COUNT(), SUM(), AVG(), MAX()和MIN()等。
- 整个的计算逻辑如下
- worker线程并行扫描数据块,在这些数据块上,计算它们的聚合值;
- worker线程通过消息队列将部分的聚合值发送给leader线程;
- leader线程归并这些部分聚合值,计算得到最终的结果。
- 例如:对于查询select sum(a) from t1;
- 假设存在两个worker线程w1和w2,数据表t1被切分为数据块t11和t12, worker w1在t11计算得到部分和s1,worker w2在t12上计算得到部分和s2,那么,w1将结果s1,w2将结果s2通过消息队列发送给leader。然后leader归并得到最终结果s = s1 + s2 。
并行执行支持算子-并行排序
- 并行执行也支持排序算子 order by,包括降序(DESC)和升序(ASC);
- 整个的排序过程如下
- worker线程在数据块上按照排序字段进行排序,保证它所得到的数据块上有序;
- leader线程通过一次merge sort,将worker内的有序数据,归并为全局有序;
- 发送最终的有序结果给client。
并行执行支持算子-并行Join
- 并行执行同样支持Join计算,包括inner join,left join,outer join;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




