-->
Velox 利用了大量的运行时优化,例如过滤器和连接的重新排序(conjunct reordering)、数组和基于哈希的聚合和连接的 key 标准化、动态过滤器下推(dynamic filter pushdown)和自适应列预取(adaptive column prefetching)。考虑到从传入的数据批次中提取的可用信息和统计数据,这些优化提供了最佳的本地效率。由于复杂数据类型在现代工作负载中无处不在,Velox 是从头开始设计的,以有效支持复杂数据类型,因此在连接和过滤等基数增加和基数减少操作方面广泛依赖于字典编码,同时仍然为基本数据类型提供快速路径。
Velox 提供的主要组件有:
除了提高效率之外,Velox 还通过统一不同数据计算引擎的执行引擎提供了价值。最最要的集成是 Presto、Spark 和 TorchArrow/PyTorch。
作为 Prestissimo 项目的一部分,Velox 被集成到 Presto 中,Presto Java 实现的 workers 被基于 C++ 实现的 Velox 所取代。该项目最初由 Meta 于2020年创建,目前正在与 Ahana 以及其他开源贡献者合作继续开发。
Prestissimo 提供了 Presto 的 HTTP REST 接口的 C++ 实现,包括 worker- worker 交换序列化协议(exchange serialization protocol)、coordinator-worker 编排和状态报告 endpoints,从而为 Presto worker 提供了一个临时的 C++ 替代。主要包括从 Java 实现的 coordinator 接收 Presto plan fragment ,将其转换为 Velox 查询计划,并将其交给 Velox 执行。
我们进行了两个不同的实验来探索 Velox 在 Presto 中提供的加速。我们的第一个实验使用了 TPC-H 基准测试,在一些 cpu 敏感的查询中,速度提高了一个数量级。对于 shuffle 敏感的查询,我们看到了更温和的加速(平均3-6倍)。
虽然 TPC-H 数据集是一个标准基准测试,但它不能代表真实的工作负载。为了探索 Velox 在这些情况下的表现,我们做了一个实验,在这个实验中,我们执行了 Meta 中各种交互分析工具产生的工作负载。在这个实验中,我们看到数据查询的平均速度提高了6-7倍,有些结果的速度提高了一个数量级以上。可以在这篇论文中查看更详细的介绍。
Intel 创建的 Gluten 项目支持将 Velox 集成到 Spark 中。Gluten 允许在执行 Spark SQL 查询时在 Spark 环境中使用 C++ 执行引擎(例如 Velox)。 Gluten 通过创建基于 Apache Arrow 数据格式和 Substrait 查询计划的 JNI API 将 Spark JVM 和执行引擎解耦,从而允许 Velox 在 Spark 中使用,只需与 Gluten 的 JNI API 进行集成。
TorchArrow 是一个 dataframe Python 库,用于深度学习中的数据预处理,是 PyTorch 项目的一部分。TorchArrow 内部将 dataframe 表示形式转换为 Velox 计划,并将其委托给 Velox 执行。 除了聚合 ML 数据预处理库的碎片空间之外,这种集成还允许 Meta 整合分析引擎和 ML 基础设施之间的执行引擎代码。 它通过公开相同的函数/UDF 集并确保跨引擎的一致行为,为 ML 最终用户提供更一致的体验,这些最终用户通常需要与不同的计算引擎交互以完成特定任务。
Velox 证明了通过将执行引擎整合到一个统一的库中,可以使数据计算系统具有更强的适应性。随着我们继续将 Velox 集成到我们自己的系统中,我们致力于建立一个可持续的开源社区来支持该项目,并加快这个类库的开发和行业采用。我们也有兴趣通过统一这些孤岛之间的功能包和语义来继续模糊 ML 基础设施和传统数据管理系统之间的界限。
展望未来,我们相信 Velox 的统一和模块化特性有潜力为利用数据管理系统的行业带来好处,尤其是那些开发数据管理系统的行业。它将允许我们与硬件供应商合作,并随着硬件的进步主动调整我们的统一软件栈。重用统一且高效的组件还将允许我们随着数据工作负载的发展而更快地创新。我们相信模块化和可重用性是数据库系统开发的未来,我们希望数据公司、学术界和数据库从业人员都能加入我们的行列。
关于 Velox 和这些组件的深入文档可以参考这篇研究论文 Velox: Meta’s unified execution engine。
我们要感谢 Velox 项目的所有贡献者。 特别感谢 Meta 团队的 Sridhar Anumandla、Philip Bell、Biswapesh Chattopadhyay、Naveen Cherukuri、Wei He、Jiju John、Jimmy Lu、Xiaoxuang Meng、Krishna Pai、Laith Sakka、Bikramjeet Vigand、Kevin Wilfong 以及无数社区 贡献者,包括 Frank Hu、Deepak Majeti、Aditi Pandit 和 Ying Su。
本文翻译自:Introducing Velox: An open source unified execution engine
本博客文章除特别声明,全部都是原创!