浅析数据库多表连接:ZNBase的分布式join计算
常用 Join 算法
Nested-Loop Join
Hash Join
Merge Join
ZNBase 采用的分布式 join 算子
Merge join
ZNBase 检查相等列上的索引,并且它们的排序方式相同(即 ASC 或 DESC)。
ZNBase 从每个表中取一行并进行比较。
如果行相等,则 ZNBase 返回行。
如果有多个匹配项,则返回匹配项的笛卡尔积。
如果行不相等,则 ZNBase 将返回 NULL 非匹配列,并使用下一行重复该过程,直到处理完所有行。
如果行相等,则 ZNBase 返回行。
如果有多个匹配项,则返回匹配项的笛卡尔积。
如果行不相等,ZNBase 将丢弃较低值的行并使用下一行重复该过程,直到处理完所有行。
对于内连接:
对于外连接:
HashJoin
ZNBase 读取两个表并尝试选择较小的表。
ZNBase 在较小的表上创建内存中的哈希表。如果哈希表太大,它将溢出到磁盘存储(这可能会影响性能)。
然后,ZNBase 扫描大表,查找哈希表中的每一行。
Lookup Join
从 Inner 表中取一批数据;
通过 join key 以及这一批数据构造在 outer 表的取值范围,只读取对应范围内的数据
对从 inner 表取出的每一行数据,都与 2 中取出的对应范围内的每一条数据执行 join 操作并输出结果交给上层处理
重复步骤 1.2.3 直到遍历完 Outer 表为止。
分布式 join 计算和数据重分布
重分布
广播
相关文章