加载中...

火山模型(Volcano Model),又称迭代器模型(Iterator Model),是 Goetz Graefe 在 Volcano 项目中系统阐述的查询执行架构:执行计划是由算子组成的树,每个算子实现统一的 open()/next()/close() 接口,上层算子调用下层的 next() 逐行(tuple-at-a-time)拉取数据。
查询从根算子开始自顶向下"拉动"数据:例如聚合算子向连接算子要下一行,连接算子再向扫描算子要行。数据像岩浆一样自底向上涌出,故名火山模型。算子之间只通过接口耦合,新增算子无需修改框架。
优点是抽象统一、组合灵活、内存占用小(流水线执行,无需物化中间结果)。缺点是每行数据都要经历一长串虚函数调用,CPU 分支预测与缓存不友好,在分析型负载下开销显著。
针对其 CPU 效率问题,现代引擎发展出两条路线:向量化执行(每次 next 返回一批数据,如 MonetDB/X100、ClickHouse)与查询编译(将整个流水线编译为机器码,如 HyPer),二者也常被结合使用。

登录 后参与讨论
暂无讨论,来发表第一条评论吧