中文

用高级语言构建高效查询引擎

数据库 2016-12-19 v1

摘要

无遗憾抽象是指这样一种愿景:使用高级编程语言进行系统开发,而不会对性能产生负面影响。按照这一愿景设计的数据库系统同时提供了更高的生产力和高性能,而不是像现有的难以维护和扩展的单体实现那样牺牲前者以换取后者。在本文中,我们在分析查询处理领域实现了这一愿景。我们提出了 LegoBase,一个用高级语言 Scala 编写的查询引擎。恢复效率的关键技术是应用生成式编程:LegoBase 执行源到源的编译,并通过将高级 Scala 代码转换为专用的低级 C 代码来优化整个查询引擎。我们展示了生成式编程如何允许轻松实现广泛的优化,例如引入数据分区或从行数据布局切换到列数据布局,而这些在使用仅处理查询的现有低级查询编译器时很难实现。我们证明了足够强大的抽象对于应对优化工作的复杂性至关重要,它使开发者免受编译器内部机制的影响,并将各个优化彼此解耦。我们使用 TPC-H 基准测试评估了我们的方法,并表明: 启用所有优化后,LegoBase 显著优于商业数据库和现有的查询编译器。 程序员只需提供几百行高级代码即可实现这些优化,而不是现有查询编译方法所需的复杂低级代码。 与整体执行时间相比,编译开销很低,因此使我们的方法在实践中可用于编译查询引擎。

关键词

引用

@article{arxiv.1612.05566,
  title  = {Building Efficient Query Engines in a High-Level Language},
  author = {Amir Shaikhha and Yannis Klonatos and Christoph Koch},
  journal= {arXiv preprint arXiv:1612.05566},
  year   = {2016}
}