Apache Doris存储层向量化改造设计与实现总结
Apache Doris引擎介绍
Apache Doris是一款基于MPP架构的OLAP数据库,支持离线和实时场景的数据分析,并兼容SQL。
向量化编程介绍
向量化编程利用计算机的SIMD指令和寄存器,通过批量计算提升性能。开发者需改造现有算法以充分利用SIMD指令。
Apache Doris存储层概览
存储层主要负责数据的读取、谓词下推优化、数据输出和归并。磁盘数据经过解码和归并后,由物理算子进行计算。主键更新表的数据写入涉及文件归并和压缩。
Apache Doris存储层向量化改造
改造目标
- 梳理可向量化的代码逻辑,如谓词计算、数据拷贝等。
- 使用SIMD指令替换不可向量化的逻辑。
- 优化无法向量化的部分,如变长类型处理。
关键优化点
- 谓词下推:通过延迟物化优化,根据谓词列的选择性动态选择是否延迟物化,以减少I/O开销。
- 数据类型优化:将变长类型转换为定长类型,利用SIMD指令批量处理,减少不必要的拷贝。
- 索引优化:使用RoaringBitmap保存行号,但需优化遍历和读取代价。
性能测试
- 定长类型:存储层性能提升60%,SQL性能提升50%。
- 变长类型:存储层性能提升50%,SQL性能提升30%~40%。
总结
- 存储层向量化改造的核心是统一数据结构与执行层。
- 代码逻辑优化(如scan并行度、延迟物化)对性能提升显著。
- 性能优化需结合代码分析、计算机行为和性能工具。
行动建议
- 参与Apache Doris社区,当前主分支已支持查询路径的向量化,欢迎试用与测试。