Greenplum 执行器


Greenplum 执行器

什么是执行器

执行器处理一个由执行计划节点组成的树,并返回查询结果

原发性扫描节点

scan

非原发性扫描节点

join agg

执行模型

迭代模型(pipeline模型,Pull方式)

每一个执行节点实现一个next函数,并遵循

  1. 每一次调用,返回一个tuple或者返回NULL
  2. 实现一个循环,每次调用执行子节点的next函数作为输入并处理

优点:易懂,资源使用少,通用性好
缺点:迭代次数多,代码局部性差,CPU cacheline不友好

向量化模型(Vectorization Model)

和迭代模型一样,每一个执行节点实现一个next函数,区别在于
每一次迭代,执行节点返回一组tuple,而非一个tuple
优点:减少迭代次数,可以利用新的硬件特性如SIMD。
单次更多的tuple对列存更友好(可以利用压缩特性等)

PUSH 执行模型

每一个执行节点定义两个函数 produce函数:对原发性扫描节点,该函数名副其实,生产数据,并调用上层节点的comsume函数
对于非原发性扫描节点,produce函数更像一个控制函数,用于调用子节点produce函数,快速定位到数据源头

consume函数:被下层节点调用,接收子节点数据进行处理,然后掉由红父节点的consume函数消费本节点的数据