盘锦建网站,软件开发工具与环境实践报告,网站建设公司招聘面试,发泡机 东莞网站建设pg hashjoin 节点大致步骤#xff1a; 1、分块与分桶。对一个表hash时#xff0c;确定块数和桶数量。#xff08;一块被划分为10个元组的桶#xff09;确定分块号与分桶号是由hashvalue决定的。 2、执行#xff1a;
1、顺序获取S表中所有元组#xff0c;对每一条元组Has…pg hashjoin 节点大致步骤 1、分块与分桶。对一个表hash时确定块数和桶数量。一块被划分为10个元组的桶确定分块号与分桶号是由hashvalue决定的。 2、执行
1、顺序获取S表中所有元组对每一条元组Hash获取块号和桶号块号为0放入内存桶中。 否则放入S表建立的临时文件中。 标记内存中块号curbatch 02、从表R中获取元组进行Hash获取元组块号和桶号。 当块号 当前内存块号直接扫描对应桶寻找满足条件的元组并进行连接。 否则放入为表R建立的临时文件中(每个块都有一个) 一直执行直到R扫描完毕。3、从S表中块号为curbatch1对应的临时文件中读取所有存储的元组将其hash到对应桶内curbatch。4、从R表块中块号为curbatch对应临时文件读取所有存储元组并计算桶号并扫描桶中S寻找满足连接条件的tuple。
build hash table
pg11buildhashtable阶段 1、每个worker并行扫描部分inner_table。 2、在共享内存中并行build一个hash表 3、每个worker并行地扫描outer_table并行执行join probe操作 需要注意的是在join之前需要通过barrier机制先完成自己build操作的线程需要等待hashtable被完整build后才能进入下一步的probe状态。
multipleBatch的probe与hash
1、并行扫描inner_table属于batch0的tuple在内存中构建一个shared hash table不属于这个batch的写入对应batch的inner tuple文件中 2、并行扫描outer_table,写入对应batch的outer_tuple文件。 3、并行地对batch0执行join 4、某些workers先完成batch0地join后分别领取后续batch的join任务。
状态机
对于正在处理某个batch的worker来说 1、若没有build完成且有其他worker加入进来则一起并行build hash table在join之前必须barrier同步 2、若build完成无需barrier 3、在barrier相关的module中每个worker加入执行attach时barrier中维护计数在需要等待的地方判断计数是否归零。
参考
https://zhuanlan.zhihu.com/p/112003245