Volcano - An Extensible and Parallel Query Evaluation System @ 1994
文章时间有点长了,可能在那个年代大家都不知道怎么做一个可扩展的并行查询系统,都处于摸索阶段。可能大家都各自实现了自己的并行查询系统,但是缺点就是自立门户,许多问题也没有完全搞清楚,很难形成合力或者是共识。这篇文章告诉大家,只要加上一个exchange operator就可以很容易地解决并行问题,然后这些operator接口也可以规范起来(iterator, open/next/close). 有了清晰的抽象才能有良好的实现。
除了exchange operator之外,这篇文章还引入了一个叫做choose-plan operator,可以动态地进行执行计划选择。但是好像现在这种做法也比较少了,都是在外层根据逻辑计划生成物理计划,动态的有动态的优势,但是似乎会让问题更加复杂。
exchange operator可以实现水平和垂直两个维度的上的并行:
- 垂直并行是inter-operator并行,exchange operator可以让parent-child进行通信。parent和child属于不同的operator范围,所以是inter-operator.
- 水平并行有bushy和intra-operator并行,parent可以fork多个child, 然后parent和child本质上还是属于一个operator范围,所以是intra-operator. 至于bushy的话可以在每个节点上增加exchange node.