一、Push-Based Execution 概述
Push-Based Execution 是一种查询执行模式,与传统的 Pull-Based Execution 相对应。在传统的 Pull-Based Execution 中,请求自上而下发出,底层数据源被逐级拉取至上一级,每个操作符等待其下一级操作符提供数据;而在 Push-Based Execution 中,数据是由下至上主动推送的,操作符在准备好数据后将其向后推送至下一级操作符。这种执行模式在 DuckDB 中具有诸多优势,尤其适用于现代的分析型数据库和数据处理场景。
二、Push-Based Execution 的核心原理
-
操作符之间的数据流动:
- 在 Push-Based Execution 中,数据的流动是主动推送的。当一个操作符完成对部分数据的处理后,会立即将处理后的数据推送给下一个操作符,而不是等待下一个操作符的请求。
- 例如,在一个查询计划中,假设有一个
Filter
操作符和一个Projection
操作符,Filter
操作符在筛选出满足条件的数据后,会主动将这些数据推送给Projection
操作符,而不是Projection
操作符来请求Filter
操作符提供数据。
-
管道和流水线处理:
- 可以将 Push-Based E