0
点赞
收藏
分享

微信扫一扫

《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》

Build Hash Table流程

  • 1、初始化​​row buffer​
  • 2、从​​build input table​​中读一行
  • 3、若读完​​build input table​​​所有row,返回状态​​READING_ROW_FROM_PROBE_item​
  • 4、否则,向​​hash map​​中写入一条row
  • 5、如果​​hash map​​ 写入成功,返回2,继续执行
  • 6、若​​hash map​​​满了,则写​​chunk file​
  • 1、初始化​​chunk file​
  • 2、将剩余的row写入​​chunk file​
  • 3、返回状态​​READING_ROW_FROM_PROBE_item​​​ 流程图如下:
    《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》_流程图

Write Rows to chunks流程

  • 1、从​​input​​表(build 或者 probe)读row
  • 2、写入​​chunk file​
  • 1、构造​​join key​
  • 2、计算​​hash key​​​并选择​​chunk file​
  • 3、写入相应的​​chunk file​​​中
    流程图如下:
    《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》_数据库_02

单线程hash join 步骤

step1:初始化

  • build table init
  • memory buffer init
  • create hash map
  • probe table init
  • state 设为​​Reading_Row_From_Probe_Iterator​

step2:HashJoinIteratorRead,根据state做调整

  • (1)、state为​​Reading Row from probe iterator​
  • 1、从​​probe table​​ read一行row
  • 2、如果所有​​probe input row​​都读完了
  • 如果非​​spill to disk​​​,对​​build input​​​剩余的row构造​​hash map​​​,重新对​​probe​​表做init,回到1继续
  • 如果为​​spill to disk​​,goto(2)
  • 3、如果​​build input​​​有​​chunk file​​​,将​​probe input​​​表写入​​chunk file​
  • 4、从​​hash map​​​里查找​​probe input​​row的查询结果
  • 5、goto(4)
  • (2)、state为​​Loading next chunk pair​
  • 找到下一对​​chunk pair​​​做​​hash join​
  • (3)、state为​​Reading row from probe input file​​,读一个​​probe chunk​​的row做​​hash join​
  • 1、从​​probe chunk​​读一行row
  • 2、在​​hash table​​里查询匹配
  • 3、goto(4)
  • (4)、state为​​Reading from hash table​​,读取​​hash table​​中匹配记录
  • 1、将查到的​​row buffer​​​写入​​build input​​​表的​​record[0]​​中
  • 2、若读取完​​hash table​​中记录,goto(1)或者(3)

状态流程图:
《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》_单线程_03


举报

相关推荐

0 条评论