Greenplum 执行器
什么是执行器
执行器处理一个由执行计划节点组成的树,并返回查询结果
原发性扫描节点
scan
非原发性扫描节点
join agg
执行模型
迭代模型(pipeline模型,Pull方式)
每一个执行节点实现一个next函数,并遵循
- 每一次调用,返回一个tuple或者返回NULL
- 实现一个循环,每次调用执行子节点的next函数作为输入并处理
优点:易懂,资源使用少,通用性好
缺点:迭代次数多,代码局部性差,CPU cacheline不友好
向量化模型(Vectorization Model)
和迭代模型一样,每一个执行节点实现一个next函数,区别在于
每一次迭代,执行节点返回一组tuple,而非一个tuple
优点:减少迭代次数,可以利用新的硬件特性如SIMD。
单次更多的tuple对列存更友好(可以利用压缩特性等)
PUSH 执行模型
每一个执行节点定义两个函数
produce函数:对原发性扫描节点,该函数名副其实,生产数据,并调用上层节点的comsume函数
对于非原发性扫描节点,produce函数更像一个控制函数,用于调用子节点produce函数,快速定位到数据源头
consume函数:被下层节点调用,接收子节点数据进行处理,然后掉由红父节点的consume函数消费本节点的数据