火山模型和数据库向量化执行引擎
CYY

火山模型

将查询计划拆解为多个算子,每个算子有通用的三个接口(open,close,next)。一个查询计划被算子组成一颗算子树,算子树先自顶向下的调用 open 接口打开每个算子,然后调用 next 自顶向下拉取数据,最后调用 close 自顶向下关闭算子。

举个例子

1
SELECT name FROM users WHERE age > 30;

这个查询计划会被拆解为顶层的 Project(映射算子,负责将下层的一行数据映射出需要的 name 列的数据),Filter(过滤算子,用于过滤下层的一行数据,在例子中用于判断 age 是否大于 30),Scan(表扫描算子,用于从底层获取一行数据)。

向量化执行引擎

对火山模型的优化,在火山模型中 next 接口只吐出一行数据,而向量化执行引擎中 next 接口返回的是多行数据。提升了整个系统的吞吐量。

优点在于

  • 可以用上 simd 指令
  • 批量处理数据时,连续的内存访问模式能更好地利用 CPU 缓存(Cache Locality),减少缓存未命中(Cache Miss)。
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep