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

简介: 前面写了一些关于优化器的文章,现在开个小差,写一些执行器的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执行器的影子,其影响力是毋庸置疑的。

目录
相关文章
|
NoSQL Linux 程序员
Linux:gdb调试器的解析+使用(超详细版)
Linux:gdb调试器的解析+使用(超详细版)
855 1
|
分布式计算 网络协议 Java
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
631 0
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
|
设计模式 前端开发 Java
总结丨Spring 源码学习,看这一篇就够了
在日常工作中,产品不断写业务需求,他们加班一天,我们开发就得工作一周来完成。 业务领域达到一定地步后,发现日常编写业务代码已经很难让我有突破性的进步,日复一日,担心自己变成一个业务代码生产机器,而无法面对新技术和环境变化。 同时也有危机感,长江后浪推前浪,自己不继续学习的话,很快就会有人超过。 而且我算是比较热心的好同学,喜欢帮别人解决问题和记录解决方案,所以不希望在别人问我工作中有什么常用的框架,遇到这个问题该怎么办,我却回答不上的感觉
8601 1
总结丨Spring 源码学习,看这一篇就够了
|
存储 缓存 监控
极致 ElasticSearch 调优,让你的ES 狂飙100倍!
尼恩分享了一篇关于提升Elasticsearch集群的整体性能和稳定性措施的文章。他从硬件、系统、JVM、集群、索引和查询等多个层面对ES的性能优化进行分析,帮助读者提升技术水平。
|
供应链 数据库 UED
图解:订单系统的设计
本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考。
2291 1
图解:订单系统的设计
|
小程序
微信小程序wx.previewImage实现图片预览
微信小程序wx.previewImage实现图片预览
2105 0
|
应用服务中间件
idea新建javaweb项目完成Tomcat部署及一些常见错误的解决办法
首先,新建个项目(模块步骤也一一样),勾选Web这个选项 给项目起个名字: 此时,观察项目结构是这样的: 打开项目设置:
1094 0
idea新建javaweb项目完成Tomcat部署及一些常见错误的解决办法
|
监控 安全 网络安全
如何使用PortTunnel端口映射工具?
【10月更文挑战第8天】PortTunnel是一种端口映射工具,它允许用户将本地计算机上的端口映射到远程服务器上。要使用PortTunnel,您需要首先下载并安装该软件,然后按照以下步骤进行操作:,1. 打开PortTunnel并配置您的本地和远程端口设置。,2. 在“本地地址”字段中输入您要映射的本地IP地址。,3. 在“远程地址”字段中输入远程服务器的IP地址。,4. 在“本地端口”字段中输入您要映射的本地端口号。,5. 在“远程端口”字段中输入远程服务器上的端口号。,6. 单击“启动”按钮以开始映射过程
2320 2
|
存储 固态存储 Windows
|
存储 人工智能 Serverless
通义千问大模型
在数字化时代,企业面临海量客户对话数据处理的挑战。阿里云推出的AI大模型助力客户对话分析方案,通过整合多种云服务,实现对话内容的自动化分析,提升服务质量和客户体验。本文将深入评测该方案的优势与实际应用效果。