Query Engines: Push vs. Pull (2021)
a year ago
- #performance
- #query-engines
- #database-systems
- 基于推送的查询引擎将结果推送给下游算子,提高了缓存效率,并支持高效处理DAG形态的执行计划。
- 基于拉取的查询引擎采用Volcano或迭代器模型,由消费者通过向算子请求数据来驱动系统。
- 基于推送的系统将工作与消费解耦,使其特别适合Flink、Materialize等流处理系统。
- 由于具备更优的行数据调度与生命周期管理能力,DAG形态的执行计划在推送系统中处理效率更高。
- 基于推送的系统在编译时能自然地展开为更简洁的代码,从而提升性能表现。
- 合并连接(merge join)和LIMIT算子等算法在推送系统中实现难度较大。
- 循环图结构在两种模型中处理都很复杂,但Naiad和Timely Dataflow等推送系统已在该领域取得突破。
- 虽然直接对比研究较少,但现代分析型系统正越来越多地探索推送模型的应用。