Volcano - An Extensible and Parallel Query Evaluation System 论文解读

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 前面写了一些关于优化器的文章,现在开个小差,写一些执行器的paper介绍,从这篇开始。这篇是Graefe的Volcano Project的执行器框架,其概念已被广泛接受和使用,也就是我们最为熟悉的Volcano iterator的执行框架,关于volcano/cascades的优化器介绍

前面写了一些关于优化器的文章,现在开个小差,写一些执行器的paper介绍,从这篇开始。

这篇是Graefe的Volcano Project的执行器框架,其概念已被广泛接受和使用,也就是我们最为熟悉的Volcano iterator的执行框架,关于volcano/cascades的优化器介绍

内容

paper中提出了使用iterator + 标准接口(open/next/close)的思路来执行查询计划。(IBM Starburst当时已经使用了这种方式)

这是一篇1990年的paper了,概念也为大家所熟知,而且其中的内容细节已比较过时,因此不再详细描述,只大概总结下其思想核心和几个有趣的点:

  • 解耦 + 抽象 + 标准接口,从而将各个operator独立起来考虑,提供data stream的抽象,各个operator可以灵活组合和协作,增加新算子/算法,对原有完全不需要修改,很容易扩展(似乎灵活性+扩展性是整个volcano project的核心目标)
  • 整个框架实现了operator的组合和数据的整体处理流程,每个operator实现的就是数据的处理流程,但这些都是机制(mechanism),与具体的执行策略(policy)无关,两者是隔离的,因此具有很强的灵活性

比如算法配置/算法实现,都可以support function的形式接入到operator中作为policy,从而同一个operator可以实现各种不同的算法。

也可以将对数据的解析/处理,封装在support function中,从而实现与data type/data model的正交,整个框架是可以应用到任何data model的

  • 给出了2个meta-operator,它们不处理数据,只是做一些控制性的任务
  1. choose plan operator

可以帮助实现dynamic query plan,其输入可以是bind variables的值,后续接入各种不同的plan,实际在真正执行时,根据value的不同,动态启用不同的plan,是一种AQE的方式。

2. exchange operator

可以帮助实现parallel query,将数据处理与并行化进行了隔离。

算子间并行,仍然是通过标准接口,实现算子间的pipelining,并可以以support function的方式,提供流控等功能。

算子内并行,通过exchange算子实现repartition等机制。

子树间并行,更大粒度。

单个进程/线程内的数据流是demand-driven的(和常规iterator一致),而进程/线程间的数据流是data-driven的。

总结

iterator这种机制虽然简单却很强大,非常灵活而具有扩展性,比如单个operator的执行逻辑完全不需要考虑其上下游是什么,也不需要考虑自身是否是并行在执行,这些逻辑都被放到了外部,而自身的策略也是注入式的,可以由外层灵活修改,整个iterator tree只负责整体处理流程。

考虑到当时的硬件环境(CPU没有pipelining并行能力 + 小内存 + 慢速IO),这是一种非常先进灵活的框架。但我们都知道它对于现代硬件已不再那么适用,海量的数据+tuple-at-a-time的执行方式,使得大量的虚函数调用破坏了cpu的流水线并导致data cache + TLB cache失效。由于内存的容量扩大,负载在逐渐从IO bound像memory bound发展,因此更需要对于cache level/instruction level的极致优化。人们提出了向量化/编译执行的这些方法,无非都是以此为目标,但从现有的一些state of the art执行器方案中,仍然处处可以看到volcano执行器的影子,其影响力是毋庸置疑的。

目录
相关文章
|
7月前
|
机器学习/深度学习 数据挖掘 Python
[Bart]论文实现:Denoising Sequence-to-Sequence Pre-training for Natural Language Generation...
[Bart]论文实现:Denoising Sequence-to-Sequence Pre-training for Natural Language Generation...
54 0
|
机器学习/深度学习 移动开发 自然语言处理
DEPPN:Document-level Event Extraction via Parallel Prediction Networks 论文解读
当在整个文档中描述事件时,文档级事件抽取(DEE)是必不可少的。我们认为,句子级抽取器不适合DEE任务,其中事件论元总是分散在句子中
136 0
DEPPN:Document-level Event Extraction via Parallel Prediction Networks 论文解读
|
人工智能 编解码 自动驾驶
YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
YOLOv7在5 FPS到160 FPS的范围内,在速度和精度方面都超过了所有已知的物体检测器,在GPU V100上以30 FPS或更高的速度在所有已知的实时物体检测器中具有最高的精度56.8% AP。
466 0
|
分布式计算 Apache Spark
《How to Integrate Spark MLlib and Apache Solr to Build Real-Time Entity Type Recognition System for Better Query Understanding》电子版地址
How to Integrate Spark MLlib and Apache Solr to Build Real-Time Entity Type Recognition System for Better Query Understanding
89 0
《How to Integrate Spark MLlib and Apache Solr to Build Real-Time Entity Type Recognition System for Better Query Understanding》电子版地址
|
机器学习/深度学习 算法 数据挖掘
Paper:He参数初始化之《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet C》的翻译与解读
Paper:He参数初始化之《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》的翻译与解读
PAT (Advanced Level) Practice - 1129 Recommendation System(25 分)
PAT (Advanced Level) Practice - 1129 Recommendation System(25 分)
106 0
PAT (Advanced Level) Practice - 1145 Hashing - Average Search Time(25 分)
PAT (Advanced Level) Practice - 1145 Hashing - Average Search Time(25 分)
120 0
|
SQL 关系型数据库 MySQL
Accelerating Queries with Group-By and Join By Groupjoin
这篇paper介绍了HyPer中引入的groupjoin算子,针对 join + group by这种query,可以在某些前提条件下,在join的过程中同时完成grouping+agg的计算。 比如用hash table来实现hash join和group by,就可以避免再创建一个hash table,尤其当join的数据量很大,产生的group结果又较少时,可以很好的提升执行效率。
358 0
Accelerating Queries with Group-By and Join By Groupjoin
|
SQL Oracle 算法
Adaptive and Big Data Scale Parallel Execution in Oracle
在上篇文章中,主要讨论了SQL Server的MPP数仓系统PDW的分布式优化过程,PolarDB的并行优化从中有所借鉴,本篇文章主要看下这篇介绍Oracle并行执行策略的paper,因为在PolarDB的分布式执行策略中,有很多与其有所重叠。
226 0
Adaptive and Big Data Scale Parallel Execution in Oracle
|
SQL Oracle 算法
Cost-based query transformation in Oracle
这篇paper主要介绍了Oracle从10g开始引入的CBQT(Cost Based Query Transformation)框架。虽然以Oracle历来的风格,无法期待它在paper中讨论很多细节,不过这篇还是可以让我们一窥Oracle对于query rewrite的处理思路和很多非常实用的query rewrite模式,对于开发优化器的同学很有参考意义。 值得一提的是,PolarDB目前也在做这方面的工作,而主要的参考正是这篇paper。此外这篇paper的思路和MemSQL optimizer中对query rewrite的处理思路非常接近,关于MemSQL optimizer的介绍可
336 0
Cost-based query transformation in Oracle