Vectorized Execution Engine in MaxCompute 2.0简介

文章转自ruanxi

前言

    在《数据库系统中的Code Generation技术介绍》一文中,我们阐述了代码的CPU执行效率对于大规模分布式OLAP系统的重要性。现在简单总结如下:

  1. OLAP系统中查询往往比较复杂,比如多表Join, 各种聚合函数以及窗口函数,其中涉及大量的Hash计算(比如采用Hash Join, Hash Aggregation),排序(比如采用Merge-Sort Join)操作,CPU开销比较大。
  2. SSD等高性能存储硬件的使用,以及内存计算的普及(比如Spark中利用RDD来Cache部分数据)大大提高了I/O性能,使得CPU日益成为计算的瓶颈。
  3. 在大规模分布式OLAP系统中(比如MaxCompute),因为需要实现分布式Join,聚合以及窗口函数,一个作业可能会由多级Task组成,Task与Task之间可能会有大量的Shuffle/Sort操作,这其中包含的大量的Hash/Compare可能占据作业执行的大量时间。

   面对日益提高的执行效率述求,除了利用Code Generation等技术为SQL Query生成定制化的执行代码以外,整个执行引擎在设计上也需要有相应的考虑和改变。

Volcano Model:Row to Batch

    传统的关系型数据库基本采用Volcano Model来实现SQL执行引擎。这个模型比较好理解,查询计划中的各个算子(如SELECT, FILTER, JOIN等)实现成一个基类Operator的子类,算子和算子之间根据在查询计划中的数据传输关系形成一个有向无环图(绝大多数时候是一棵树)。除了直接与数据源打交道的算子(如从Storage读数据的TableScan)以外,每个算子都从一个或者多个其他算子读取数据,这些算子成为其“孩子”,这个算子也就是其“孩子”们的“父亲”。Operator基类有如下三个接口: 

  1. Open():做一些初始化工作,包括调用其“孩子”算子的Open()。
  2. Next():调用“孩子”算子的Next()方法获取数据,完成自身的计算逻辑。构造输出数据。
  3. Close():做一些清理工作,包括调用“孩子”算子的Close()方法。

   Volcano Model类型的执行引擎在这行过程中,数据以Record的形式在各个算子之间流动。一个Record即代表从存储层读出的一个数据行,或者某个算子计算过程中产生的中间数据行(下图描述了在Volcano Model中执行“SELECT t1.a + t2.b FROM t1 JOIN t2 ON t1.c = t2.c”中可能出现的Record)。如下图所示:

   Volcano Model的优点在于比较简单直观,SQL的执行流和查询计划对应比较紧密。因为各个算子之间都以固定的接口传递数据,因此相互之间耦合比较低,较容易应对SQL中众多算子复杂组合的场景,因此得到广泛引用。
   在执行效率方面,Volcano Model有明显缺陷。在执行过程中,算子之间通过Next()方法传递数据,而Next()方法往往实现为虚函数(或函数指针),这意味着执行过程中的Function Call的次数与Record数量呈正比,这极大影响了代码的instruction cache performance。此外,在Volcano Model中,需要沿着整个Operator Tree自底向上完成一遍执行,代码的Footprint较大,因此导致代码的 instruction locality 较低,当CPU的 instruction cache较小的时候,在执行过程中可能出现“Cache 颠簸”现象(不同算子之间反复将彼此的指令集从cache中刷出),大大降低代码的执行效率。

   一些改良过的Volcano Model,算子与算子之间以“Batch of Records”传输数据,如下图所示。以Batch的方式传递数据,一方面减少了算子之间的函数调用开销(由Record级别降低为Batch级别),也提高了指令和数据的局部性,有利于程序性能 的提升(靖人在这个方面还发表过一篇Paper, 有兴趣的同学可以参阅(传送门))。

Vectorized Execution

   上面讲到的“Batch Based Volcano Model”采用了行式的内存布局,即同一个Record中的不同列在内存中连续存放,不同行的同一列在内存中是离散的。 这在关系型计算的场景中,常常不是最优的选项。举一个例子,在一个“SELECT”算子当中,输入数据有“t1.a”和“t1.c”两列,SELECT算子从中取出"t1.a"这一列,  若采用行式的内存布局,那么需要从每一个输入Record中摘出a列来构造新的Record,事实上需要大量的内存拷贝。另一方面,在做类似“SELECT t1.a + 1”这样的表达式计算时,虽然“t1.c”这一列并没有用到,但是仍然会被Laod到CPU Cache当中,事实上降低了"t1.a"这一列的Cache命中率。

   MaxCompute 2.0在基于“Batch of Records”的Volcano Model基础上,引入了列式数据库的思想,数据在算子之间传递,处理的时候,相同列的数据在内存中地址连续。如下图所示。
       
基于列式的内存布局在上面提到的场景下有更好的性能。在“SELECT t1.a FROM t1”的场景中,我们只需要做一次指针赋值就可以完成投影操作,而不需要大量的内存拷贝,而在“SELECT t1.a +1”这种表达式计算场景下,我们也避免了Load冗余数据进CPU Cache,从而提高了CPU的Cache命中率。
   此外,列式的执行框架使得我们能够更好的提高CPU Pipeline效率,以及利用SIMD技术进行计算优化。这个我们会在后续的文章中更深入的介绍。

欢迎加入MaxCompute钉钉群讨论

时间: 2024-08-30 04:52:19

Vectorized Execution Engine in MaxCompute 2.0简介的相关文章

MaxCompute 2.0 The Evolution of NewSQL

At the Alibaba Cloud MaxCompute session during the 2017 Computing Conference held on October 14, Lin Wei, computing platform architect of Alibaba delivered a speech titled MaxCompute2.0: The Evolution of NewSQL, sharing the efforts that have been mad

MaxCompute 2.0: Evolution of Alibaba's Big Data Service

The speech mainly covers three aspects: • Overview of Alibaba Cloud MaxCompute • Evolution of Alibaba's Data Platform • MaxCompute 2.0 Moving Forward I. Overview of Alibaba Cloud MaxCompute Alibaba Cloud MaxCompute is formerly known as ODPS, which is

刷新大数据技术知识新高度的MaxCompute 2.0就要来了

中国云计算产业最具影响力的盛会之一--2016杭州云栖大会(https://yunqi.aliyun.com/)将在云栖小镇召开.连续举办七届的云栖大会一直是业界了解阿里云计算生态发展和应用趋势.体验前沿技术和产品的最佳平台,来自海内外的上万名开发者.创业者聚集于此,分享着他们对云计算的思考与实践经验.7年来,从产品发布到行业解决方案展示,从关注技术到技术与服务并重,从单一的客户到生态全景的展现,大会的核心内容一直在"进化",而2016年杭州云栖大会,则以"飞天・进化&quo

POWERDESIGNER 10.0 简介

   POWERDESIGNER 10.0 简介  PowerDesigner 是唯一结合了下列几种标准建模技术的建模工具套件:使用 UML 的应用程序建模.业务流程建模和传统数据库建模技术,从而为您提供了高度集成.基于知识库.可自定义.图形化.直观并易于使用的工具集.产品说明作为功能强大的全部集成的建模和设计解决方案,PowerDesigner 可使企业快速.高效并一致地构建自己的信息系统.PowerDesigner 提供大量角色功能,从而区分企业内部不同职责.PowerDesigner 使用

C#2.0简介

C#2.0简介 C# 2.0引入了很多语言扩展,最重要的就是泛型(Generics).匿名方法(Anonymous Methods).迭代器(Iterators)和不完全类型(Partial Types).• 泛型允许类.结构.接口.委托和方法通过它们所存贮和操作的数据的类型来参数化.泛型是很有用的,因为它提供了更为强大的编译期间类型检查,需要更少的数据类型之间的显式转换,并且减少了对装箱操作的需要和运行时的类型检查.• 匿名方法允许在需要委托值时能够以"内联(in-line)"的方式

《Adobe Flash CS4 ActionScript 3.0中文版经典教程》——ActionScript 3.0简介

ActionScript 3.0简介 在开始学习本书课程之前,最好花点时间了解一下ActionScript的历史以及Adobe ActionScript 3.0如何适用于Adobe Flash和Flash平台. Flash和ActionScript的简要历史 自从Flash在1996年发布以来,Flash和ActionScript是同步发展的.当前,将Flash CS4所提供的设计和动画工具与ActionScript 3.0的高级交互功能相结合,它提供了功能更为强大.使用更为广泛的开发环境:但是

MaxCompute 2.0 NewSQL演进之路

10月14日,2017杭州云栖大会·阿里云大数据计算服务(MaxCompute)专场,阿里巴巴计算平台架构师林伟分享了主题<MaxCompute2.0 NewSQL演进之路>,介绍阿里云大数据计算服务MaxCompute 2.0在NewSQL上所做的优化和实践工作.   DT时代,越来越多的企业应用数据步入云端,NewSQL也成为业内越来越热的话题,它可以帮助用户通过编程接口良好地访问和存储数据.本文将介绍阿里云MaxCompute应用NewSQL的背景.关键技术解读等内容.     背景  

MaxCompute 2.0:阿里巴巴的大数据进化之路

本次分享将主要围绕以下三个方面: 阿里云大数据计算服务概述 阿里巴巴数据平台进化之路 MaxCompute 2.0 Moving forward    一.阿里云大数据计算服务概述 阿里巴巴大数据计算服务MaxCompute的前身叫做ODPS,是阿里巴巴内部统一的大数据平台,其实从ODPS到MaxCompute的转变就是整个阿里巴巴大数据平台的演化过程.所以在本次会着重分享阿里巴巴大数据在过去七八年的时间所走过的路以及后续技术发展大方向.   首先做一个基本的定位,大家可以看到下面这张图是一个航

《MATLAB 7.0从入门到精通(修订版)》——第1章 MATLAB概述 1.1 MATLAB 7.0简介

第1章 MATLAB概述 MATLAB是一种高效的工程计算语言,它将计算.可视化和编程等功能集于一个易于使用的环境.在MATLAB环境中描述问题及编制求解问题的程序时,用户可以按照符合人们科学思维的方式和数学表达习惯的语言形式来书写程序.其典型应用主要包括以下几个方面: 数学计算: 算法开发: 数据采集: 系统建模和仿真: 数据分析和可视化: 科学和工程绘图: 应用软件开发(包括用户界面). MATLAB是一个交互式系统(写程序与执行命令同步),其基本的数据元素是没有维数限制的阵列.这使得用户可