Apache Arrow DataFusion:快速、可嵌入、模块化的分析查询引擎
作者与机构
本论文由Andrew Lamb(InfluxData, Boston, MA, USA)、Yijie Shen(Space and Time, Irvine, CA, USA)、Daniël Heres(Coralogix, Utrecht, The Netherlands)、Jayjeet Chakraborty(UC Santa Cruz, Santa Cruz, CA, USA)、Mehmet Ozan Kabak(Synnada, Austin, TX, USA)、Liang-Chi Hsieh与Chao Sun(Apple, Seattle/Cupertino, CA, USA)共同完成,发表于2024年6月的SIGMOD-Companion ‘24会议论文集。
学术背景
研究领域为数据库系统与在线分析处理(OLAP)引擎技术。传统高性能分析引擎(如Vertica、Spark、DuckDB)采用紧密集成的架构,虽能实现峰值性能,但开发成本高昂且难以复用。随着云计算和AI/ML流水线对弹性计算的需求增长,重复实现查询引擎的弊端日益凸显。Apache Arrow DataFusion应运而生,旨在通过模块化设计、开放标准(如Apache Arrow内存模型和Parquet存储格式)和Rust语言的高效实现,提供兼具性能与可扩展性的解决方案。研究目标包括:(1) 展示模块化引擎如何通过标准接口实现高性能;(2) 定义现代OLAP引擎的关键扩展API;(3) 验证其在实际应用中的竞争力。
研究流程与方法
1. 技术基础构建
- 核心技术栈:基于Apache Arrow的列式内存模型(标准化空值表示、字节序等)、Parquet的列式存储(支持谓词下推和延迟物化),以及Rust语言的零成本抽象和内存安全特性。
- 架构设计(图2):采用分层架构,包括目录与数据源、前端(SQL/DataFrame API)、逻辑计划优化、执行计划生成与优化、流式执行引擎。关键创新在于通过10余个扩展API(蓝色模块)实现定制化,而非重写核心功能(绿色模块)。
功能实现
性能优化技术
主要结果
1. 性能基准测试(表1、图5-7):
- ClickBench:DataFusion在选择性谓词查询(如q2、q8)中优于DuckDB(最高6.91倍),但高基数分组(如q19)落后2.36倍。
- TPC-H:部分查询(如q4、q9)因谓词下推优势更快,但连接顺序优化不足导致q17慢1.35倍。
- H2O-G:CSV解析优化使多数查询略优,但corr聚合函数效率待提升。
- 多核扩展性(图7):在192核下,低/中基数查询(如q28)接近线性加速,高基数查询因协调开销出现性能下降,与DuckDB趋势一致。
结论与价值
1. 科学价值:
- 证明模块化设计可通过开放标准(Arrow/Parquet)和精细的API边界(如目录、UDF、执行计划扩展)实现与紧耦合系统相当的性能。
- 提出“解构数据库”(Deconstructed Database)范式,类比LLVM对编译器生态的革新,推动高性能数据基础设施的组件化复用。
研究亮点
1. 方法创新:
- 扩展性设计:通过逻辑/执行计划重写API(第7章)支持深度定制,如Spark特定语义覆盖。
- 性能优化组合:将向量化执行、流式处理与Rust零成本抽象结合,实现单核效率与多核扩展性平衡。
其他价值
- 社区驱动:350+贡献者参与开发,反映开放治理模式(Apache 2.0许可)的技术可持续性。
- 未来方向:计划优化连接排序(#7949)、高基数聚合(#5546),并探索事务处理与分布式KV存储的模块化实现。