CN114365115A - 用于大容量数据处理的sql分析查询的异构硬件执行的技术 - Google Patents
用于大容量数据处理的sql分析查询的异构硬件执行的技术 Download PDFInfo
- Publication number
- CN114365115A CN114365115A CN202080063355.9A CN202080063355A CN114365115A CN 114365115 A CN114365115 A CN 114365115A CN 202080063355 A CN202080063355 A CN 202080063355A CN 114365115 A CN114365115 A CN 114365115A
- Authority
- CN
- China
- Prior art keywords
- operator
- operators
- hardware
- data
- physical
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24537—Query rewriting; Transformation of operators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Operations Research (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库的优化访问。本文是加速执行自组织查询、异构硬件和波动工作负载的任何组合的技术。在实施例中,计算机接收对数据元组的数据访问请求并将数据访问请求编译成关系运算符。特定关系运算符的特定实施方式是从多个可互换实施方式中动态选择的。每个可互换实施方式都包含相应的物理运算符。用于特定物理运算符的特定硬件运算符选自多个可互换的硬件运算符,包括:在第一处理硬件上执行的第一硬件运算符,以及在第二处理硬件上执行的第二硬件运算符,第二处理硬件在功能上与第一处理硬件不同。对数据访问请求的响应是基于以下各项生成的:数据元组、特定关系运算符的特定实施方式,以及特定硬件运算符。
Description
技术领域
本发明涉及数据库的优化的访问。本文是加速执行自组织查询、异构硬件和波动工作负载的任何组合的技术。
背景技术
在关系数据库系统中,可以使用关系代数来定义查询,并且可以编译查询计划并将其表示为由关系运算符组成的二叉树。随后在执行阶段,通过不同的关系运算符遍历数据库数据以计算结果。在运行时,从树中的子关系运算符中一次单独提取行集合(诸如关系表)中的一行,以返回到父关系运算符。在一些情况下,行在关系运算符之间作为几百行的批次被传送。
关系运算符是粗粒度的逻辑单元,应当准备好逻辑单元以处置数以亿计的子用例,从而支持由于关系模式变化和数据值分布而在组合上可能的所有潜在用例。为数百万行中的特定行采用许多控制流分支中的哪一个的决策部分地是在编译时使用静态计划优化部分做出的并且部分地是在运行时用自组织数据驱动的部分做出的。技术问题是关系运算符的算法必须适合所有用例,包括对于当前数据的当前查询不能出现的用例和在给定数据库服务器中永远不会出现的用例。无论是否使用批处理,关系运算符树方法都会造成对大量数据的数据处理效率低下。
现有技术的数据库系统可以通过对数据进行垂直分区来支持对大数据的结构化查询语言(SQL)分析查询,诸如用可以编码或不编码和压缩关系表的列的列式数据库。因此,同一列的数千或数百万行数据存储在一起,并准备好从向量化处理中受益。但是,SQL执行引擎中的关系运算符树方法仅在基表扫描中具有列统一编码的数据,然后表扫描的关系运算符从这些数据中急切而完整地解码并将列转换回行优先的数据以进行分析。这充其量只是将老式的行处理模型改造到调制解调器硬件上。一般而言,此类方法涉及为过时的计算风格和硬件设计的数据结构、格式和算法。
附图说明
在附图中:
图1是描绘示例数据库管理系统(DBMS)的框图,该数据库管理系统基于可用硬件和波动条件从同一关系运算符的若干可互换实施方式中动态选择专门的实施方式,以在执行数据库查询期间被调用;
图2是描绘示例查询编译过程的流程图,该过程基于可用硬件和波动条件从同一关系运算符的若干可互换实施方式中动态选择专门的实施方式,以在执行数据库查询期间被调用;
图3是对于相同的示例结构化查询语言(SQL)查询描绘示例关系代数分析树和两个替代示例结果集的框图。
图4是描绘由DBMS执行的示例查询的流程图,其包括将矩阵转置应用于关系表或其它行集合的示例转置运算符。
图5是对于查询的示例物理计划描述物理运算符的示例有向无环图(DAG)的框图,该物理运算符易于移植到差异硬件体系架构并且可以机会性地卸载到不同的硬件(诸如(一个或多个)协处理器)。
图6是描绘DBMS可以用来计划和优化包括诸如用于散列联接的散列表的数据流的示例过程的流程图。
图7是描绘示例DAG优化过程的流程图,DBMS可以用来计划、优化和执行物理运算符的DAG和/或硬件运算符的DAG,诸如用于执行数据访问请求。
图8是描绘专门用于相应场景的三种间接聚集(gather)的框图。
图9是描绘两种分段的聚集的框图。
图10是图示可以在其上实现本发明的实施例的计算机系统的框图;
图11是图示可以用于控制计算系统的操作的基本软件系统的框图。
具体实施方式
在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是,将显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了众所周知的结构和设备,以避免不必要地使本发明晦涩难懂。
总体概述
本文是用于关系查询的新颖执行技术,包括硬件友好的操作的集合,本文称为物理运算符,其比已知的关系运算符更细粒度,但是独立于硬件并且可以接受列式数据以增加吞吐量。每个关系运算符都可以被表示为物理运算符的数据流网络。每个物理运算符表示容易映射到硬件以进行处理的最小有益工作单位,如本文所述。
物理运算符的重要特点包括影响查询计划和优化的以下设计维度,如本文所讨论的。
·基于如何调度物理运算符,有四种类型:阻塞、流水线、高速缓存和可融合;
·基于空间消耗,一些运算符增加存储器需求,诸如当输出尺寸远大于输入时,并且一些运算符代替地释放存储器以进行回收,诸如通过丢弃不再需要的中间数据;
·基于物理运算符的主要资源需求,诸如计算受限相对于总线/存储器带宽受限。
优化需要调谐上述维度以基于异构硬件存在和动态条件(诸如波动的工作负载和数据值分布)平衡上述问题。这种优化以及本文中的方法如何分解每个关系运算符从根本上改变了数据库管理系统(DBMS)如何处理查询以促进DBMS计算机本身的效率增加和其它性能改进,包括以下好处。
通过将关系运算符分解成物理运算符,查询计划被转换成具有更细粒度的运算符和运算符之间的更多数据流路径互连的有向无环图(DAG)。从而暴露出更多的优化机会,包括运算符内部和运算符之间的机会。
通过映射到直接在硬件上执行的硬件运算符来针对每个硬件平台进一步调谐每个物理运算符以促进复杂的优化,诸如以下人工智能(AI)优化活动。
·离线收集特点和度量以对不同的工作负载场景进行建模,并使用历史数据来训练机器学习(ML)模型以用于运算符配置设置(诸如批尺寸)的最优调谐;
·在运行时,ML模型观察当前工作负载并预测用于每个物理运算符的配置设置的最优值;
·当前运行的结果将被用于进一步训练离线模型。
因为查询首先被分解成作为较小工作单位的物理运算符,并且取决于互连的物理运算符的特性(诸如本文讨论的阻塞、流水线、高速缓存和可融合),所以存在可能执行图的巨大解决方案空间,对其而言,优化器/调度器可以是资源感知的,诸如根据可用硬件的波动条件和异构种类、量和容量。
如本文所述,对波动条件和硬件的多样性的认识促进高度机会优化。当在不同平台上执行时,甚至在查询的同一次执行期间,本文的不同优化技术可以被用于相同的物理运算符。物理运算符接口的统一性促进了可重用的优化启发法,即使DBMS具有异构硬件也是如此,从而鼓励各种水平和/或流水线并行性,诸如将运算符卸载到差异协处理器上。
例如,已知的SQL处理仅被分解成关系运算符。因此,无论编译器如何选择,整个运算符和/或运算符树都纯粹针对中央处理单元(CPU)进行了优化。本文的细粒度物理运算符针对异构方法进行了单独优化,诸如单指令多数据(SIMD)指令和/或协处理器卸载,尤其是对于列式数据。
例如,在本文中,联接关系运算符可以被分解成多个更细粒度的操作,诸如散列、构建散列表、构建布隆过滤器、探测散列表和/或从散列表聚集字段(诸如用于从散列表中投影)。这些操作中的一些可以被进一步分解。例如,散列表的构建进一步被分解成联接键值的解码、基于联接键值的行的分区、将联接键值和伴随的其它值插入到散列表的桶中,以及溢出的处置。用于所有那些活动的物理运算符都可以互连以实现流水线并行和/或水平缩放,诸如用对称多处理(SMP)。细粒度的运算符提供了更多的分解、更多的解耦,因此为负载平衡和卸载提供更多的异步性,从而提高了吞吐量。
在实施例中,计算机接收对数据元组的数据访问请求并将数据访问请求编译成关系运算符。特定关系运算符的特定实施方式是从多个可互换的实施方式中动态选择的。每个可互换的实施方式包含相应的物理运算符。用于特定物理运算符的特定硬件运算符选自多个可互换的硬件运算符,包括:在第一处理硬件上执行的第一硬件运算符,以及在功能上不同于第一处理硬件的第二处理硬件上执行的第二硬件运算符。生成基于以下的对数据访问请求的响应:数据元组、特定关系运算符的特定实施方式和特定硬件运算符。
1.0示例计算机
图1是描绘实施例中的示例数据库管理系统(DBMS)100的框图。DBMS 100基于可用硬件和波动条件从同一关系运算符的多个可互换的实施方式中动态选择专门实施方式,以在执行数据库查询期间被调用。DBMS 100可以托管在一个或多个计算机上,诸如机架式服务器(诸如刀片式服务器)、个人计算机、大型机、虚拟计算机或其它计算设备。当由多个计算机托管时,计算机通过通信网络互连。
在各种实施例中,DBMS 100存储并提供对大容量数据存储库的访问,诸如关系数据库、图形数据库、NoSQL数据库、列数据存储库、元组数据存储库(诸如资源描述框架(RDF)三元存储库)、键值数据存储库,或文档数据存储库(诸如用于包含JavaScript对象表示法(JSON)或可扩展标记语言(XML)的文档)。在任何情况下,数据存储库都可以由诸如应用之类的软件或诸如DBMS 100之类的中间件进行管理。存储在数据存储库中的数据可以驻留在易失性和/或非易失性存储装置中。
在这个示例中,数据被组织为多字段元组121-122。在这个示例中,字段可以具有逻辑和/或物理的表格布置,使得字段被布置为每行一个记录和每列一个字段。例如,元组121-122中的每一个可以是关系表中的行、列族或诸如中间结果之类的内部行集合。
在操作中,DBMS 100接收或生成数据访问请求110以在数据存储库中读取和/或写入数据。在实施例中,数据访问请求110被表述为数据操纵语言(DML),诸如创建读取更新删除(CRUD)语句或通过示例查询(QBE)。例如,数据访问请求110可以是结构化查询语言(SQL)DML语句,诸如查询。在实施例中,数据访问请求110是通过开放数据库连接(ODBC)接收的。
DBMS 100基于分别检查、重新布置、修改、传送或以其它方式处理诸如元组121-122之类的大块数据或诸如以下中间结果之类的派生数据的一般化的运算符来编译或以其它方式解释数据访问请求110。在实施例中,DBMS 100将数据访问请求110编译成查询计划,该查询计划被布置为关系运算符131-132的逻辑树(未示出)。
在实施例中,逻辑树是通过修饰或以其它方式变换从数据访问请求110生成的解析树而导出的。在修饰实施例中,解析树的每个节点可以绑定到相应的关系运算符。在实施例中,数据访问请求110通过解释或以其它方式执行所生成的查询计划来执行。
在实施例中,关系运算符131-132是一般化的逻辑运算符,其或多或少直接与由数据访问请求110指定的操作相关。例如,关系运算符131-132可以是关系代数运算符。例如,关系运算符131可以表示关系表扫描或两个关系表的关系联接。
根据本文的技术,关系运算符131-132是一般化的逻辑运算符,每个逻辑运算符由比关系代数更细粒度的一个或多个物理运算符组成。例如,关系运算符131包含物理运算符161-162,它们被组合使用以提供一种关系代数运算,诸如联接。例如,可以将关系联接分解成作为构建操作的物理运算符161和作为探测操作的物理运算符162,如本文稍后讨论的。
换句话说,基于用于一个关系运算符131-132中的每一个的多个物理运算符的经编译的查询计划可以具有比关系代数分析树更多的节点并且更复杂。例如,如本文稍后解释的,基于关系运算符131-132的许多物理运算符的查询计划可以是有向无环图(DAG)而不是树。与关系代数解析树相比,由更多、更细粒度和更互连的运算符产生的复杂性为查询计划优化提供了更多机会,如本文稍后讨论的。例如,更高效的数据流可以基于复制更少数据和/或融合运算符,如本文稍后讨论的。
关系运算符131-132被一般化并且可以有些抽象,使得关系运算符131-132的提供可能需要或受益于专门的实施方式,诸如利用诸如图形处理单元(GPU)之类的特殊硬件来进行向量加速。例如,关系运算符131可以配备可互换实施方式131A-B中的任一个,其可以不同地专门用于不同条件,诸如:a)DBMS 100的波动工作负载,b)可用硬件,和/或c)元组121-122的示意性细节和/或数据值分布。
关系运算符131-132中的每一个由相同或不同量的(一个或多个)物理运算符组成。一个关系运算符的物理运算符中没有一个、一些或全部可以与另一个关系运算符的物理运算符相同。例如,实施方式131A-B都包含物理运算符161,这意味着物理运算符161具有两个可以相同或稍微不同配置的事件或实例。
物理运算符的重要配置是哪个硬件运算符将为物理运算符执行。即,同一个物理运算符的每个实例具有相应的硬件运算符,并且同一物理运算符的不同实例可以具有相同或不同的硬件运算符。例如,物理运算符161的两个所示实例可以具有同一硬件运算符161B的相应实例。可替代地,物理运算符161的一个实例可以具有如图所示的硬件运算符161B,而物理运算符161的另一个实例可以代替地具有硬件运算符161A。
与关系运算符或物理运算符(两者都是处理一般化)不同,硬件运算符实际上是可执行的,但仅在特定硬件上是可执行的。例如,硬件运算符161B可以包含只能在支持特定指令集体系架构(ISA)的中央处理单元(CPU)上运行的机器指令。例如,硬件运算符161A-B可以分别在GPU和CPU上执行。如果DBMS 100缺少GPU,那么硬件运算符161A在那种情况下将不可用,使得DBMS 100不会将硬件运算符161A用于任何物理运算符并且不会生成或以其它方式选择包括硬件运算符161A的任何实施方式。
本文的查询计划优化包括基于波动条件从同一关系运算符的若干可互换实施方式中动态选择专门的实施方式。例如,DBMS 100应当动态地选择对关系运算符131最高效的实施方式131A-B中的任何一个。在本文稍后讨论的实施例中,这种动态选择根据各种计算机资源(诸如处理硬件、处理时间和/或存储器空间)是基于成本的。
关系运算符132还具有可互换的实施方式132A-B。因而,如本文后面所讨论的:a)初始查询计划中出现的关系运算符越多,b)每个运算符具有的可互换实施方式越多,以及c)可用的处理硬件替代方案越多,那么可比较的查询计划由于组合学而越多。例如,本文的技术可以促进用于同一数据访问请求110的数千或数百万不同但等效的查询计划。
如本文稍后解释的,成本计算可以帮助(a)避免低效查询计划的生成和/或考虑和/或(b)在许多候选查询计划之间选择最佳计划。实施方式131B和132A以及硬件运算符161A用虚线示出,以指示在这个示例中它们没有被生成或以其它方式被选择。即,在这个示例中,实施方式131B和132A、物理运算符161-162和硬件运算符161B被选择并用于实际执行数据访问请求110的优化的查询计划。
所有关系运算符、它们的实施方式(诸如131AB和132A-B)、物理运算符和硬件运算符都可以直接或通过实例化(诸如从模板)可重用,并且因此可以结合到相同或不同查询的不同执行计划中。例如,DBMS 100可以具有预定义的硬件运算符、预定义的物理运算符、哪些硬件运算符可以用于哪些物理运算符的声明和/或关系运算符以及它们的实施方式(诸如131A-B和132A-B)的库。在实施例中,诸如131A-B和132A-B之类的预定义的关系运算符实施方式包括一个硬件运算符到物理运算符的每个实例的预定义绑定。
实施例可以具有模板化的预定义的关系运算符实施方式,其包含物理运算符但不包含硬件运算符,使得DBMS 100通过将硬件运算符指派给物理运算符的实例来急切地或懒惰地生成精确的关系运算符实施方式(诸如131A-B和132A-B)。以那种方式,模板化的预定义的关系运算符实施方式及其物理运算符独立于硬件并且完全可移植,诸如跨不同的指令集体系架构和处理方法,诸如GPU与CPU。
换句话说,当DBMS 100具有诸如GPU和CPU的混合之类的异构硬件时,本文中的此类运算符组件容易适应新硬件以适应未来并无缝地利用硬件多样性。因此,本文中的此类运算符组件可以使用分布式处理来通过水平和/或垂直缩放和/或卸载(诸如将过滤下推到提供数据持久性的存储计算机,诸如用智能扫描)来增加处理带宽和吞吐量。
因为DBMS 100的查询计划包括基于波动条件对诸如131A之类的关系运算符实施方式的动态选择,包括对硬件运算符的动态选择,所以DBMS 100可以负载平衡。例如,GPU通常可以是执行物理运算符161的最快方式,但如果GPU当前太忙,那么DBMS 100可以代替地通过选择使用CPU硬件运算符用于物理运算符161的关系运算符实施方式来使用CPU。例如,关系运算符实施方式132A-B可以具有完全相同的物理运算符集合并且仅在一个、一些或所有硬件运算符上不同。
实际上,一个关系运算符实施方式与相同和不同关系运算符的所有其它实施方式的最终区别在于,每个关系运算符实施方式具有不同的硬件运算符集合,或者至少具有不同的硬件运算符有向无环图。在任何情况下,任何关系运算符、它们的实施方式(诸如131A-B和132A-B)、物理运算符和硬件运算符都可以接受配置设置和数据输入以促进或调谐运算符执行。
如本文稍后所讨论的,运算符诸如在数据流图中互连,使得诸如列式数据之类的数据从上游运算符的数据输出流向连接的下游运算符的数据输入。因此,每个运算符都有数据的(一个或多个)输入和(一个或多个)输出。
每个运算符实例还具有在生成运算符实例时设置并且通常不随后调整的配置设置。诸如哪些上游运算符提供哪些输入以及哪些下游运算符接收输出之类的拓扑细节可以是运算符实例的配置设置。附加配置设置会影响运算符实例的语义或效率。例如,缓冲区尺寸可以是配置设置,并且缓冲区存储器地址可以是数据输入。因此,即使是同一运算符的实例也可以通过它们的配置设置、它们接收的数据以及它们在查询计划内(诸如在运算符的DAG内)的位置来区分。
在查询编译和计划之后是数据访问请求110的实际执行。在实施例中,查询计划和优化可以最终生成或选择仅由硬件运算符组成的DAG,硬件运算符指定完全执行数据访问请求110所需的所有活动。例如,关系运算符的实例及其实施方式(诸如131A)虽然对查询计划重要,但可以被丢弃,或者如果预定义,那么在硬件运算符的优化的DAG被选择用于实际执行时被保存以供重用。
例如,查询计划可能需要生成关系运算符131-132的解析树、物理运算符的DAG和硬件运算符的DAG。而实际执行只需要硬件运算符的DAG,其在实际执行数据访问请求110之后可以被丢弃或保存以供重用。在任何情况下,通过硬件运算符从数据访问请求110和元组121-122到响应150的这种优化准备和后续执行(包括数据流和控制流)如下,包括响应150的解释。
2.0示例查询编译过程
图2是描绘示例查询编译过程的流程图,DBMS 100执行该过程以基于波动条件从同一关系运算符的若干可互换实施方式中动态选择专门的实施方式以在数据库查询执行期间被调用。
步骤201接收对元组121-122的数据访问请求110,诸如经由如本文前面讨论的ODBC的SQL查询。
步骤202将数据访问请求110编译成关系运算符131-132,诸如通过根据本文前面讨论的关系代数将数据访问请求110解析成解析树。
步骤203从多个可互换的实施方式131A-B中动态地选择关系运算符131的特定实施方式131A。如本文前面所讨论的,实施方式131A-B中的每一个都包含独立于硬件体系架构的物理运算符161-164中的一些。实施方式131A-B可以如本文前面讨论的那样被预定义和/或模板化。DBMS 100可以根据诸如资源可用性和/或物理运算符161-164的预期资源消耗之类的波动条件动态地生成或以其它方式动态地选择实施方式131A,如本文前面讨论的,诸如通过成本计算。
步骤204从多个可互换的硬件运算符中为特定物理运算符161动态选择特定硬件运算符161B,包括在诸如CPU之类的第一处理硬件上执行的第一硬件运算符161A和在第二处理硬件上执行的第二硬件运算符161B,第二处理硬件在功能上与第一处理硬件(诸如GPU)不同。例如,步骤204可以基于实际硬件库存、波动的硬件工作负载和/或(一个或多个)硬件分配配额,如本文稍后讨论的。各种实施例可以具有各种数量和种类的硬件处理器,诸如以下示例的其它种类的硬件。
·单指令多数据(SIMD)处理器,如本文稍后解释的,
·现场阵列可编程门阵列(FPGA),
·用于非易失性随机存取存储器(RAM)的直接存取(DAX)协处理器,以及
·包含流水线并行性的专用集成电路(ASIC),如本文稍后解释的。
步骤205生成基于以下各项的对数据访问请求110的响应150:元组、特定关系运算符131的特定实施方式131A,以及特定硬件运算符161B。例如,如本文前面讨论的,优化的查询计划中的硬件运算符的DAG可以作为操纵和传输关系数据的数据流图执行,如本文后面讨论的,以生成响应150。响应150是对数据访问请求110的应答,其可以包括最终结果集,诸如本文稍后讨论的列或行优先格式的行集。DBMS 100可以向提交数据访问请求110的同一客户端发送响应150,诸如通过如本文前面讨论的ODBC。
3.0示例SQL解析树
图3是描绘对于同一个示例结构化查询语言(SQL)查询的示例关系代数分析树和两个替代示例结果集的框图。该示例SQL查询为:select dept_name,avg(emp_sal)fromemp,dept where dept.dept_id=emp.dept_id;
在示例SQL查询中,emp表的每一行表示一个员工,dept表的每一行表示一个部门。该示例SQL查询计算每个部门的平均工资。如示例结果集中所示,dept表包含作为标识符的deptl-2,并且示例SQL查询计算作为数字的相应的avgl-2。
每个示例结果集包含两行和两列。顶部结果集是示例SQL查询的实际答案,其可以也可以不按期望的那样布置。其它查询可以代替地生成作为最终结果或中间行集合的底部结果集,该底部结果集是顶部结果集的矩阵转置。换句话说,两个结果集都包含相同的四个值,但布置方式不同。由查询的物理运算符组成的详细物理查询计划与示例SQL查询有些相似并包括转置,如下所示。
4.0示例转置过程
本文稍后为后面的图呈现的是用于加速执行自组织查询、异构硬件和波动工作负载的任何组合的各种方式的技术。下面的转置运算符演示了物理运算符可以提供与硬件无关的奇异功能,并且可以以特殊方式在图1的关系运算符131-132内部和之间使用。这个转置运算符演示了由于更精细的粒度和奇异的语义,各种物理运算符可能超出关系代数的词汇量。其它奇异种类的物理运算符将在后面介绍。
转置是奇异的,因为它没有内置到SQL中。转置的已知变通方案(workaround)通常需要为特定的表手动硬编码的SQL逻辑,例如用枢转操作或用数据库游标的复杂使用。与表无关的已知通用变通方案需要子查询和动态组合的SQL,这是昂贵的。
在任何情况下,已知的变通方案具有包含多个关系运算的查询计划,根据本文的技术,每个关系运算可以包含多个物理运算符。而转置运算符实现与单个物理运算符相同的转置。同样,转置运算符及其硬件运算符更好地利用特殊硬件(诸如GPU),它加速矩阵操作,诸如用表格数据。与SQL的枢转运算符不同,转置运算符不使用枢转列。
图4是描绘由图1的DBMS 100执行的示例查询执行的流程图,其包括将矩阵转置应用于关系表或其它行集合的示例转置运算符。参考图1和图3讨论图4。
步骤402接收图1的数据访问请求110,诸如本文前面讨论的,诸如用于SQL的数据操纵语言(DML)语句。如上面所讨论的,数据访问请求110没有指定枢转列。
步骤404将数据访问请求110编译成包括转置运算符的物理运算符的查询计划。关系表或其它行集合的矩阵转置可以在数据访问请求110中明确指定。可替代地,可以基于各种动态条件隐式地选择这种转置,诸如:a)上游运算符的输出格式到下游运算符的输入格式之间的转换,b)运算符格式和输入或输出文件格式之间的转换,c)行集合中特定数据的隔离,诸如当转置与水平和/或垂直切片结合使用时,如本文后面讨论的,或d)使用硬件运算符,该运算符利用需要或受益于表格数据的特定格式的特殊硬件(诸如GPU)。
转置运算符是执行上述转置的物理运算符。在实施例中,转置物理运算符具有转置硬件运算符,其通过诸如GPU之类的特殊硬件提供矩阵加速。在实施例中并且代替转置运算符或除了转置运算符之外,旋转运算符是根据指定四分之一圈的正或负倍数的配置设置在逻辑上旋转行集合的物理运算符。转置运算符和旋转运算符都不使用SQL枢转所需的枢转列。
当在步骤406中执行查询计划时,转置运算符转置行集合。如本文前面所解释的,图3示出了行集合的转置,该行集合不是关系表,而是按此顺序的联接、分组和统计平均的结果集。如图3中所示,转置前后的结果集被示为顶部和底部行集合,当比较时,揭示转置运算符保持矩阵对角线不变,在这种情况下,对角线包括所示的dept1和avg2值。换句话说,转置运算符将示出的顶部行集合作为输入,并将示出的底部行集合作为输出。
步骤408基于步骤406的转置生成响应150。例如,响应150可以包含底部行集合的一些或全部,或者以其它方式基于底部行集合。例如,所示的底部行集合作为转置运算符的输出被发出,并且可以是或者可以不是中间行集合,它被用作下游运算符进一步处理的输入。
5.0示例数据流
图5是对于查询的示例物理计划描绘易于移植到不同的硬件体系架构并且可以机会性地卸载到不同硬件(诸如本文稍后解释的(一个或多个)协处理器)的物理运算符的示例有向无环图(DAG)500的框图。参考图3讨论图5。图5示出了DAG 500和各种表格结果510、520N、520S、530和540,它们不是DAG 500的一部分,而是在不同时间由本文下面和随后讨论的作为DAG 500一部分的各种所示物理运算符的操作生成的示例数据。
DAG 500可以在逻辑上作为数据流图操作。如本文稍后所解释的,数据流经DAG500的物理运算符并且在物理运算符之间沿着将物理运算符互连的所示箭头的方向流动。图3示出了关系运算符的解析树,它是作为本文前面呈现的示例查询的高级执行计划而生成的。
同样,DAG 500可以从图3的解析树生成为中间级执行计划。图3和图5的直观比较揭示,从初始计划生成中间执行计划会增加规范的复杂性。但是,两个计划之间的计划的语义不变。换句话说,图3和图5中所示的执行计划表示相同的示例查询并实现完全相同的查询结果。
如前面针对图3所解释的,示例查询按部门计算平均工资,这需要按顺序:a)将部门表联接到员工表,b)按部门对联接结果进行分组,以及c)对部门组的工资求平均。为简单起见,图3示出了组合到单个关系运算符AGG(聚合)中的分组和求平均,但是解析树的实际实施例可以代替地具有分别用于分组和求平均的单独关系运算符。
DAG 500比解析树更复杂,因为物理运算符比关系运算符粒度更细,使得一个关系运算符可以由多个物理运算符表示。因此,视觉上识别DAG 500中的示例查询的联接、分组和求平均可以不太明显,如下并且稍后在本文中更详细地解释。
DAG 500中的构建物理运算符、探测物理运算符和散列表HT协作以执行示例查询的联接。DAG 500中的密集分组键(DGK)物理运算符执行示例查询的分组。DAG 500中的平均(AVG)物理运算符执行示例查询的求平均。但是,DAG 500包含许多更专业的物理运算符,它们在执行和数据流中协作以用于示例查询,如下所示。
虽然诸如Apache Parquet之类的一些文件格式可以将同一个关系表的一些或全部列保留在同一个列文件中,但这个示例保留每个列文件一列。因此,表扫描物理运算符(诸如所示的DD、ED、DN和ES)加载一列。其它表扫描运算符实施例可以从同一个列文件加载多个列,或者可以加载行优先数据。
如本文后面所解释的,每个表扫描运算符产生单独扫描的数据流路径,使得一些或全部表扫描运算符可以并行执行。同样如本文后面所解释的,同一个被扫描的数据流路径中的多个物理运算符可以作为处理流水线协作。例如,表扫描运算符ED产生被扫描的数据流路径,该路径包括下游的重新编码运算符和散列运算符,如图所示。所示种类的物理运算符(诸如重新编码和散列)的语义是奇异的,如本文稍后解释的那样。
诸如DAG 500之类的数据流图可以以解析树不能的方式在运算符之间传送数据,如下所述。对于拓扑组合尤其重要的是连接运算符的扇入和扇出。扇入是将多个上游数据流路径汇聚到同一个运算符中。
换句话说,运算符可以具有多个输入,而不管运算符是关系运算符还是物理运算符。因此,图3的解析树和DAG 500都示出了扇入。例如,DAG 500中的探测物理运算符具有扇入以接受来自多个上游物理运算符的输入。
扇出是将相同或不同数据从一个运算符分发到多个下游数据流路径。换句话说,物理运算符可以有多个输出,而关系运算符则不能有。因此,诸如DAG 500之类的数据流图可以以解析树不能的方式在运算符之间传送数据,这包括发出多条下游数据流路径,这些路径可以如本文稍后讨论的那样并发地执行。因此,DAG 500可以比图3的查询树具有更多的并行化。
图5将DAG 500示为图而不是树,因为探测物理运算符的输出具有扇出,示为扇出输出FO,使得两个下游聚集运算符N和S接收相同的探测运算符输出。如图所示,DAG可以具有扇入和扇出两者,而树不能具有两者。
在实施例中,许多或大多数物理运算符和硬件运算符(未示出)可以处理列式数据而不是行优先数据。例如,诸如GPU或单指令多数据(SIMD)之类的向量硬件可以更适合列式数据。同样,大部分关系代数都关注特定的列,诸如联接、过滤、排序、分组和投影。因此,将行优先数据转换成列式数据可以是必要的或有益的。
例如,DAG的第一部分可以具有行优先数据流并且第二部分可以具有列式数据流,并且可能需要转换以使数据在这两个部分之间流动。如上文针对图3所讨论的矩阵转置或如本文稍后所讨论的聚集可以完成从行优先到列式的这种转换,反之亦然。
特别地,在所示示例中,如下所示的物理运算符被互连以实现如下的联接关系运算符(未示出)。一般而言并且如图所示,上游构建运算符和下游探测运算符协作以完成联接,诸如如下所示。因为如图所示构建和探测运算符前面是相应的上游散列运算符,所以这是散列联接。
5.1示例并行化
因为构建运算符前面是上游分区运算符,所以用于散列联接的所示分区的散列表HT的构建阶段被水平分区以用于水平缩放以通过并行化来加速,并且散列表HT的探测阶段不被分区而是串行执行,如本文稍后解释的。在此,水平缩放可能需要分布式编程,诸如聚类的计算和/或对称多处理(SMP),诸如用多核CPU。在极端示例中,分布式编程可能需要弹性水平缩放,诸如用计算机(诸如虚拟计算机)的云。
例如,分区运算符可以接受指示并行化的程度的配置设置,DBMS可以基于诸如空闲计算机的量、已经供应的虚拟计算机的量或公共云中的弹性的单价之类的波动条件来指派并行化的程度。另一个可以有助于确定并行化的程度的动态条件是当前未使用多少并行化配额。
例如,DBMS的特定客户端可以被限制到同时使用最多五个处理核心,并且那些核心中的两个可以已经分配给DAG 500的另一个部分。同样,DBMS可以由仅限于同时使用四个GPU的虚拟计算机托管。如果其中三个GPU已分配给DBMS的另一个客户端,那么并行化的程度可以被限制到1CPU+1GPU=两个。
在任何情况下,被示为接受分区的输入的单个构建物理运算符(如本文稍后解释的那样被示为水平切片HS)可以具有相同或不同硬件运算符的多个实例。例如,对于用于报告、数据挖掘或在线分析处理(OLAP)的所谓离线批量数据处理,诸如根据针对不同计算机(诸如包括两个刀片计算机和一个台式计算机的松散联合计算机)的循环清除方案,单个构建物理运算符可以具有三个构建硬件运算符实例,即,一个台式硬件运算符和同一个刀片硬件运算符的两个实例。因此,水平缩放可以是异构的,并且鼓励将负载卸载到不同的计算机或协处理器的动态决策。因此,本文的查询计划和优化可以是高度机会性的,诸如根据波动的工作负载。
稍后将在本文中进一步解释分区。更一般而言,物理运算符的其它种类的并行化如下。与串联或并联布置元件的电路示意图有些相似,DAG 500将物理运算符串联或并联布置。更具体而言,DAG 500由并行数据流路径组成。
5.2数据流路径的示例联接和分叉
例如,如图所示,各自包含散列运算符的两条平行路径扇入到探测运算符,各自包含聚集运算符的另外两条平行路径扇出探测运算符的扇出的输出FO。由于它作为多条数据流路径的拓扑连接点的角色,探测运算符是联接的配对中心。如下所述,扇出的输出FO提供联接结果510作为聚集运算符N和S的输入。
在这个示例中,探测运算符被用于等值联接表dept和emp,其涉及的主键dept.dept_id和emp.emp_id以及外键emp.dept_id由表扫描运算符DD和ED加载,如本文前面所讨论的。如图所示,探测运算符的匹配可以生成示例联接结果510。如下面和本文稍后所讨论的,联接结果510仅包含可以如下物化或不物化的参考数据。
虽然未示出,但是联接结果510的非物化实施例将仅包含指向列式向量内的值或指向行优先数据中的行的指针,诸如存储器地址或数组偏移量(例如,编码用作序数的字典代码)。例如,在联接结果510中示为一对标识符的内容(诸如Dept1和Emp1)可以改为一对指针。当联接结果510未被物化时,聚集运算符N和S是如本文稍后讨论的间接聚集。
在所示的物化的实施例中,联接结果510包含在配对期间匹配的行的主键列。即使表扫描运算符ED提供的列emp.dept_id是联接键,作为外键,emp.dept_id也被排除在联接结果510之外。在这个示例中,每个员工Emp1-4匹配一次,使得联接结果510包含来自两个扫描且联接的表dept和emp的四对主键值。
联接表的其它列可以在下游组装,诸如用(一个或多个)聚集运算符,如本文稍后讨论的。因此,即使当联接结果510包含物化的主键时,物化也是稍微部分的,使得其它列的物化被委托推迟到下游聚集运算符N和S,诸如为了效率,如本文稍后讨论的。
取决于实施例,联接结果510可以包含在缓冲区、批次或流中,并且可以是列式或行优先,如本文其它地方所讨论的。取决于实施例,扇出的输出FO提供联接结果510的相同或单独副本作为聚集运算符N和S的输入。用于传达联接结果510的机构可能需要复制值或指向值的某种类型的指针,诸如本文稍后用直接和间接聚集讨论的。
在实施例中,聚集运算符N和S各自接收指向包含联接结果510的相同缓冲区的指针作为输入。在列式实施例中,联接结果510被提供为多个指针,这些指针分别指向联接结果510中的每一列的值向量,并且那些向量在存储器中不需要彼此相邻。
5.2示例运算符协作
单独的并行路径上的物理运算符可以诸如用单独的超线程、核心或处理器并行执行以用于加速。例如,两个散列运算符可以并行执行,因为它们参与单独的数据流路径。驻留在DAG中同一数据流路径中的物理运算符是串行布置的,但仍可以通过流水线并行加速,使得上游运算符处理下一行或一批行,而下游运算符同时处理前一行或一批。
因此,可以将串行数据流路径划分为多个部分,使得:每个部分是单独的流水线级;每个部分包含一个或多个物理运算符的子序列;并且每个物理运算符只参与确切地一个流水线级。例如,本文稍后解释的聚集N、DGK和AVG运算符被串行布置,并且可以参与同一个流水线。例如,流水线的前一级可以包含聚集N和DGK运算符,而那个流水线的下一级可以包含AVG运算符。
物理聚集运算符N和S都接收联接结果510的相同或单独的副本,如上面所解释的。虽然本文稍后讨论聚集机制,但聚集运算符N和S的聚集结果如下。一起示出的是两个相互排斥的实施例。一个实施例分别从聚集运算符N和S生成单独的聚集结果520N和520S。另一个实施例代替地生成聚集运算符N和S协作填充的组合聚集结果530。
聚集运算符N和/或S是直接聚集还是间接聚集取决于聚集的输入是否被物化。如图所示,聚集运算符N和S各有两个输入,对于这两个聚集运算符,输入之一是联接结果510。对于聚集运算符N和S,另一个输入分别是用于表扫描运算符DN和ES的列式输出。即,聚集运算符具有扇入,使得它们接受来自多个相应数据流的多个输入,如本文别处所讨论的。
在这个示例中,表扫描运算符DN和ES发出物化的输出,但是联接结果510可以被物化或不被物化,如本文前面所讨论的。因此,聚集运算符可以被配置为仅接受物化或非物化的输入或输入的某种组合,如本文稍后讨论的。因此,稍后在本文中作为相互排斥的直接或间接聚集示例性地呈现的内容可以一起发生在具有在物化方面不同的多个输入的同一个聚集运算符中。
通过如本文稍后对比的直接或间接聚集,聚集运算符N生成聚集结果520N。在任一情况下,聚集运算符N都用如图所示的物化的数据填充聚集结果520N。在各种实施例中,聚集结果520N是行优先或一对单独的值向量。在实施例中,所有联接结果510和聚集结果520N和520S中的dept.dept_id列都是相同的(即,共享的)或单独的(即,复制的)向量。用于填充聚集结果520N和520S的机构将在下文中呈现。
如上面所解释的,组合的聚集结果530是单独的聚集结果对520N和520S的设计替代方案,使得聚集运算符N和S协作地填充组合的聚集结果530。聚集运算符N和S分别填充聚集结果530中的dept.dept_name和emp.emp_sal列。如图所示,聚集结果530被物化,其可以是行优先的或列式的。
仅聚集运算符N和S之一填充聚集结果530中的dept.dept_id列。不管是使用组合的聚集结果530还是单独的聚集结果520N和520S,聚集运算符N和S都可以并发地发出输出,因为它们驻留在如本文别处所讨论的单独的数据流路径上。
5.3示例优化
在各种实施例中,多列行集合或单个列可以被分段成批,诸如存储器内压缩单元(IMCU),使得下一个流水线级处理前一个IMCU,而前一个流水线级同时处理下一个IMCU。同样,前一级可以产生下一级随后消耗的IMCU。批次(诸如IMCU)可以作为缓冲区操作,用于解耦同一流水线的相邻级。例如,相邻级可以彼此异步操作。
例如,对于相邻级之间的任何种类的缓冲,前一级可以产生许多行或许多批次,而下一级由于级的不匹配带宽而同时仅消耗一行或一个批次,这是可容忍的。如果缓冲区溢出,那么上游运算符的执行将暂停,直到缓冲区中的空间可用。例如,DAG 500会经历沿着数据流路径向后传播的背压,这是可容忍的。
如本文前面所解释的,每个物理运算符由对应的硬件运算符执行。在同一流水线级的实施例中,一些或全部硬件运算符或一些或全部物理运算符被融合到组合运算符中,如本文稍后讨论的。如果将两个物理运算符融合到一个物理运算符中,那么它们的硬件运算符融合到一个硬件运算符中,但反过来不一定成立,使得即使物理运算符没有融合,两个硬件运算符也可以融合。
另一种并行加速是用于非弹性水平缩放的单指令多数据(SIMD)。不管硬件运算符是否是通过融合创建的,硬件运算符都可以在内部使用SIMD来通过数据并行化进行加速,如本文后面所解释的。
两个物理运算符或两个硬件运算符可以被融合,即使它们包含在不同关系运算符的实施方式中。例如在图1中,关系运算符131的同一实施方式131A中的任何物理运算符161-162和/或硬件运算符161B可以与不同关系运算符132的实施方式132B中的运算符融合。融合的机构可以如下。
物理运算符实例是声明性的并且不是直接可执行的。在实施例中,在同一实施方式131A中融合物理运算符161-162需要用一个组合的物理运算符替换两个物理运算符,该组合的物理运算符由对物理运算符161-162的引用组成。融合物理运算符包括融合硬件运算符。
硬件运算符包括诸如调用堆栈帧、操作数堆栈帧、硬件寄存器和/或机器指令序列(诸如用于CPU或GPU的)之类的执行构造。当对于被融合的两个硬件运算符是共同的时,一个输入可以被融合。例如在图5中,聚集N和S共享相同的输入。被融合的运算符的指令序列可以通过级联被融合。优化器可以消除级联指令序列中的冗余。堆栈帧或寄存器文件是两个硬件运算符在融合时可以共享的词法范围。
5.4示例聚集
聚集是物理运算符的类别,其组装来自不同源(诸如同一关系表不同列或行集合或不同上游物理运算符的输出)的数据。物化是聚集的目的,尤其是当过滤或联接结果可用且未物化以及物化所需的实际值可用但以不兼容的形式物化时。例如,如下文所解释的,聚集可以通过复制来聚合自不同物化的行集合的列,或者可以复制具有来自一个物化的行集合的列的子集的垂直切片以生成新的物化的行集合。例如,对保留在单独的列文件中的同一关系表的两列进行投影可能需要聚集运算符。聚集运算符输出(一个或多个)元组,每个元组具有多个字段,诸如输出行集合的一行。
聚集不同于联接,因为联接组合尚未相关的数据,而聚集组合虽然尚未实际存储在一起但已经相关的数据。聚集可以补充联接,尤其是在联接之后,诸如从联接结果投影列时。例如,这种联接后投影在图5中被示为两个下游聚集运算符N和S,它们从探测运算符扇出,因为对于示出的物化场景中正在被聚集的dept_name和emp_sal列都需要单独的聚集运算符用于联接结果,如本文后面讨论的。由于急切或推迟的物化,直接和间接聚集分别是急切或推迟的,如本文稍后对比。
5.5键和代码
在各种实施例中,重新编码运算符是可以对字典编码的列进行解码或者可以将字典编码的列从一个编码字典转码到另一个编码字典的物理运算符,诸如当每个IMCU具有其自己的本地编码字典时,诸如在两个IMCU的单独本地编码字典之间和/或规范的全局编码字典。
密集分组键(DGK)运算符是为标量列中的每个不同值生成相应不同的无符号整数的物理运算符。在实施例中,整数值在值范围内完全或大部分连续。在未示出的实施例中,DGK运算符水平缩放,使得两个计算线程可以以线程安全和异步的方式,对于相应的未加工值:检测是否已经为值生成了密集键,在两个相应值完全相同时检测两个线程中的哪一个应当生成密集键,并检测每个线程接下来应当生成哪个相应的连续密集键。
在实施例中,DGK运算符生成密集键作为用于正在生成的编码字典的字典代码。换句话说,DGK运算符可以是重新编码运算符的逆。在实施例中,DGK运算符检测列中的不同值。在所示示例中以及如下所示,DGK运算符被用于按dept_name对行进行分组,以便随后通过对作为物理运算符的求平均运算符AVG对emp_sal进行统计平均。
取决于如本文前面讨论的实施例,聚集运算符N物化聚集结果520N或530中的dept.dept_name列,其中任一个都可以是DGK运算符的唯一输入。每当DGK运算符在输入聚集结果520N或530的dept.dept_id列中遇到唯一值时,DGK运算符就可以指派下一个顺序的无符号整数字典代码。在这个示例中,DGK运算符用作转码器,其将输入的dept_id值转换成DGK运算符输出的密集分组键值。
例如,dept_id值可以是稀疏的,诸如文本字符串或不连续的整数。例如,在过滤或联接之后,会在先前连续的不同dept_id值的集合中出现大的和/或许多间隙。DGK运算符转码的结果是间隙被移除,使得DGK运算符从不连续的输入值范围生成连续的输出值范围。因此,如本文稍后所讨论的,密集分组键值可以被用作数组偏移量。
虽然未示出,但是这个DGK运算符的输出具有两列,即,密集分组键列和dept.dept_name列。这两个列,以行优先或列式格式,作为第一输入提供给AVG运算符。AVG运算符还接受作为聚集运算符S的输出的第二输入,根据本文前面解释的实施例,该第二输入可以是聚集结果520S或530。
AVG运算符具有扇入,因为从不同的数据流路径接受两个输入。即使两条数据流路径可以并发地操作,它们也不应当对数据重新排序。数据排序对AVG运算符是重要的,如下所示。
AVG运算符一次处理来自每个输入的一行。即,AVG运算符一起处理来自DGK运算符的一行和来自聚集运算符S的一行。AVG运算符期望一起处理的两行属于同一部门,即,或者Dept1或者Dept2,即使来自DGK运算符缺少dept.dept_id列。只要AVG运算符以相同的顺序接收两个输入的行,即,行如由探测运算符发出的那样出现在联接结果510中,AVG运算符就可以依赖两个输入的行的隐式相关性,这是重要的,如下所述。
根据从DGK运算符提供的输入,AVG运算符使用密集键列中的值作为到作为AVG运算符内部部分的分组区间(未示出)的数组或列表中的偏移量。因此,AVG运算符检测哪个分组区间应当接受来自聚集结果520S或530的对应行中的emp.emp_sal值。特定分组区间的操作如下。
各种示例可以具有各种分组区间内容和行为。在这个示例中,每个分组区间包含计数器和累加器。当一行被定向到特定的分组区间时,计数器加一,并将emp.emp_sal值被添加到累加器中进行求和,这是重要的,如下所示。
如本文别处所解释的,各种类型的运算符可以分别表现为流传输、阻塞或批处理(其是流传输和阻塞的混合)。聚集运算符可以有任何这些行为。例如,聚集运算符可以为每个单独处理的输入行单独发出输出行,这是流传输。
AVG运算符的语义排除了流传输和批处理。即,AVG运算符必然是阻塞的,这意味着AVG运算符在接收并处理完所有输入行之前不能发出任何输出行。在处理完所有输入行之后,对于每个分组区间,AVG运算符将累加器值算术除以计数器值,以计算每个分组区间的相应算术平均值。
因此,在这个示例中,求平均运算符AVG计算每个部门的相应平均工资。作为阻塞运算符并且仅在计算出所有平均值之后,AVG运算符发出最终结果540作为输出,以被返回(ret)运算符接受作为输入。ret运算符可以以符合诸如SQL和/或ODBC之类的标准并且客户端可能期望的格式来序列化最终结果540。
上面以宏观方式讨论了DAG 500,其考虑通过扇出和扇入发散和收敛的数据流路径以实现查询计划。如上面所讨论的,数据流路径由集成的物理运算符的集合组成。以下是一些重要的物理运算符如何实际处理和传送数据的微观视图。下面的讨论对比数据物化的不同方法,这些方法在不更改查询语义的情况下可以影响DAG 500的效率,并且可以影响DAG 500内一些物理运算符的相对放置。换句话说,DAG 500的优化可以基于以下可用的设计替代方案,如图6-图9中所演示的。
5.6通过直接聚集的急切物化
直接聚集需要急切物化位于聚集物理运算符下游的其它(一个或多个)物理运算符所需的数据。因此,直接聚集也可以被称为急切聚集。如下文所讨论的,急切物化发生在直接聚集运算符内,使得直接聚集运算符的输出包含在传播到下游物理运算符期间可能需要复制的物化的数据。当需要复制的数据的物理运算符紧接在直接聚集运算符的下游时,这种复制可以是廉价的。
但是,当物化的数据被重复复制以流经驻留直接聚集运算符和需要物化的数据的进一步下游物理运算符之间的同一数据流路径中的中间物理运算符时,急切物化的数据的这种复制会是昂贵的。虽然通过间接聚集的推迟的物化可以提高效率,但间接聚集的机构可能更复杂,如本文后面所述。因此,下面首先基于通过直接聚集的急切物化来讨论物化机构,如下所示。
虽然如本文稍后讨论的那样,图5在联接之后使用聚集,但是以下各种其它场景在各个方面更直接。投影需要最直接的聚集,因为投影和聚集都需要少量或仅需要多个标量值或多个元组值的物化。为投影而聚集具有以下三种不同复杂度的场景。三个投影场景是针对直接聚集进行解释的,这需要如下的(一个或多个)物化的输入。如本文稍后解释的,间接聚集接受(一个或多个)非物化的输入。
直接聚集仅产生或消耗两种数据,它们是单独的列和行优先数据,其中任一种都可以是直接聚集的输入或输出,如下所示。如果聚集仅投影一列,那么任何直接或间接聚集的唯一输出是物化的列。否则,聚集投影多个列,并且聚集的唯一输出是物化的行优先数据。因此,任何聚集的输出都是物化的,并且物化是聚集的唯一目的,诸如对于投影,如下所示。
虽然任何聚集都仅具有一个输出,但是聚集可以具有一个或多个输入,如下所示。最直接的聚集是从行优先数据投影一列的直接聚集,诸如接受物化的行优先数据作为其唯一输入(诸如关系表或中间行集合)的聚集运算符。输入具有与聚集输出相同的行偏移量范围。即,范围中的相同偏移量将来自聚集输入的行与输出列中的标量值或输出行集合中的行相关联,这具体取决于是否投影了多个列。
例如,聚集输入中的第三行与聚集输出中的第三标量值或行相关。为了演示,讨论了聚集输入和聚集输出的偏移量。例如,流传输聚集可以缺少如本文稍后讨论的偏移量。即使没有流传输,偏移量也可以诸如与如本文稍后解释的可变宽度值相关或不相关。
聚集运算符可以具有多个输入,每个输入可以是行优先数据或标量值的列。如果直接聚集只有一个输入,那么它不应当是标量列,因为输出将与输入相同,并且可能具有将标量从输入复制到输出的附加低效,如本文稍后讨论的。
在没有任何配置设置的情况下,在输入的声明排序中,级联来自每个输入的相同偏移量的标量或行,以在输出中的相同偏移量处生成行。因此,通过复制诸如标量和/或元组之类的值来生成聚集输出。
如本文稍后所讨论的,复制是昂贵的并且应当尽可能避免或推迟。因此,为了效率,应当在数据流中尽可能地推迟聚集操作,这意味着在物理运算符的DAG中应当将聚集运算符推到尽可能远的下游。本文稍后将讨论推迟的聚集。
聚集运算符可以具有指示要投影哪个(或哪些)列和/或以什么顺序级联列的配置设置。如果直接聚集将行优先数据作为唯一输入,那么应当设置该配置设置,这防止输出与输入相同。
投影需要聚合来自相同或不同行集合(诸如关系表)的列。例如,投影可能需要对行优先数据的列的子集进行垂直分区(也称为垂直切片)。如上面所解释的,聚集行优先数据的所有列作为唯一输入是不必要的,因为输出将与输入相同。但是,如果列在多个列文件中被垂直分区,那么投影同一关系表的所有列可能需要直接聚集。因此,将列式关系表转换成行优先数据可能需要直接聚集。
5.7并行聚集
在如下各种实施例中,诸如对于投影,聚集可以是串行的或并行的。通过串行直接聚集,单处理器(诸如CPU的单核)对于那个范围中的每个偏移量并且每次迭代一个偏移量地将当前偏移量处的值从输入向量复制到输出行集合中的同一行中相同的偏移量处。直接聚集的任何输入都可以是复合的,诸如物化的输入行集合。例如,聚集可以完成修饰,使得输入行集合的每一行变得用来自聚集的另一个输入的对应值来修饰。因此,聚集的输出可以比聚集的任一输入更宽。
非弹性水平缩放可能需要按跨步序列的单指令多数据(SIMD)。每个跨步并发地处理在偏移量的范围内具有固定尺寸的连续偏移量子集的批次,诸如并发地将来自多个值的一个标量输入向量的八个值与来自另一个标量输入向量的八个相应值组合在一起以在输出行集合中并发地生成八行的跨步。
虽然两者都水平缩放,诸如用于聚集,但是SIMD跨步与如下的水平分区不同。水平分区可以是非弹性的,诸如对于Beowulf集群或多核对称多处理(SMP),或者是弹性的,诸如对于计算机的云。分区运算符是物理运算符,它将行集合或列划分为存储相等的子集,以供(一个或多个)下游运算符的相应实例并发进行的相应处理,诸如在单独的核上。水平分区,尤其是弹性的,可能需要异构硬件,如本文前面所讨论的,这些硬件会鼓励机会性的水平缩放的卸载。
分区运算符最终可以跟在下游合并运算符之后,该下游合并运算符是物理运算符,它将上游分区的处理的分区的输出级联成组合的输出,通常用于下游运算符的后续串行处理。取决于实施例,合并运算符可以保留或不保留排序,并且可以保留或不保留分类(sorting)。在既不保留排序也不保留分类的一些实施例中,不需要合并运算符,并且分区被隐式级联或排队到下游运算符的相同输入中。
在实施例中,不是合并运算符的一些物理运算符可以隐式地合并输出。例如,所示的构建运算符是水平切片HS的多实例,但探测运算符不是多实例,因为构建运算符隐式地合并并行数据流。无论是由合并运算符隐式合并还是显式合并,所有运算符都是出现在上游分区运算符和下游合并之间的数据流路径中的隐式多实例。
5.8过滤
如本文稍后所讨论的,间接聚集需要非物化的输入,尤其是当某些类型的上游物理运算符发出非物化的输出作为它们的唯一输出时,诸如过滤器运算符或联接运算符。过滤器运算符有一个输入和一个输出。过滤器运算符的唯一输入如下。输入被物化。输入可以是一列标量或一个行集合。输入行集合可以是列式的或行优先的。
过滤运算符的唯一输出如下。取决于实施例,过滤器输出被物化或非物化。如果输入是列,那么输出是列。如果输入是行集合,那么输出是行集合。如果输入行集合是行优先的,那么输出行集合是行优先的。如果输入行集合是列式的,那么输出行集合是列式的。
最直接的过滤示例是如下的由过滤运算符对其应用谓词的列。过滤器运算符具有指定谓词的配置设置。在实施例中,关系运算符可以具有复合谓词,但过滤运算符可以不具有,如下所示。
实施例可以将复合谓词分解成非复合的较小谓词。例如,诸如radius IN(1,3,7)OR radius>20的复合谓词可以分解成两个或更多非复合的较小谓词。实施例可以为每个相应的较小谓词使用相同或不同过滤运算符的单独实例。
例如,在将同一复合谓词的另一个较小谓词应用于任何值之前,可以将复合谓词的一个较小谓词应用于许多或所有输入值,诸如行。例如,复合谓词的一些较小谓词可以并行应用,而同一复合谓词的其它较小谓词可以串行应用或流水线化,诸如根据较小谓词是合取的还是析取的。
谓词仅使用作为过滤器运算符的唯一输入的一部分的(一个或多个)列。在实施例中,复合谓词被分解成较小的谓词,每个较小的谓词可以仍然是复合的,但是每个较小的谓词仅使用一个相应的列。
如果过滤基于复制,那么输出被如下物化。否则,如本文稍后讨论的,输出是未物化的。复制过滤器操作如下。
与聚集运算符不同并且无论是否复制,过滤运算符的唯一输出都可以具有与唯一输入相同或更少的偏移量。例如,一些输入值(无论是行还是标量)可能不满足谓词,在这种情况下,那些值将从输出中排除。满足谓词的值包括在输出中。复制过滤将令人满意的值从输入复制到物化的输出。
5.9其它物理运算符
各种实施例具有各种类别的运算符,诸如过滤运算符,并且在同一类别中可以存在多种运算符或子类型。例如,可以有多种过滤器运算符专门用于各种场景。示例实施例可以具有以下奇异示例物理运算符类型,其中一些在图5中示出并且在本文别处讨论。
·解压缩-解压缩压缩数据
·解码-解码编码的数据
·过滤器-应用单个表谓词
·投影–基于过滤结果投影出条目
·转置-在列式数据和基于行的数据之间转换
·聚集-使用索引/指针的数组从列式/基于行的数据中随机聚集数据,包括直接聚集和间接聚集
·散列-散列数据,对单列或复合(多列)工作
·分区–基于分区键将输入数据分区到多个分区
·构建-将数据插入散列表
·探测-在散列表中查找输入数据的匹配项
·密集键-对于任何给定的稀疏输入数据(诸如文本),进行密集化以使值范围成为无符号整数[0...n]
·分组聚合-给定用于聚合的密集键的数组和输入数据(例如,列),计算聚合
·分类-对输入数据进行分类
·分类-合并-给定多个分类的输入数据流,将输出作为合并的单个分类流
·合并-联接-给定两个联接表中的分类的数据,使用合并方法产生联接结果
·搜索-搜索给定的关键字字符串
因此,处理活动的丰富混合可以包括在物理运算符的硬件中立DAG中以表示任何特定查询。因此,在将查询编译为物理运算符的DAG时,保留了SQL和脚本化SQL(诸如用于SQL的过程语言(PL/SQL))的图灵完整性。
6.0示例联接计划
如下,图6-图7示出了用于计划和优化查询的示例活动。图6示出了用于构造和使用散列表的示例配置活动,以演示以下两者:一般地用于耦合运算符的集成模式,以及用于散列表处理的特定运算符的布置。图7具有更高层次的计划和优化视图。换句话说,图6具有几个运算符的微观视图,如下所示,而图7基于配置整个DAG的宏观视图。
图6是描绘图1的DBMS 100可以用来计划和优化包括散列表的数据流的示例过程的流程图,诸如对于图5中所示的散列联接或其它分区间或分组。参考图5讨论图6。如下,图6包括六个运算符(未示出),除非另有说明,否则它们可以都是物理运算符或者可以都是硬件运算符。
如本文前面所讨论的,图5示出了基于所示散列表HT的散列联接,该散列联接在构建阶段期间由所示构建运算符填充并且随后在探测阶段期间由所示探测运算符使用。构建运算符和探测运算符的选择和优化可以如下发生。
步骤602从各种可互换的构建运算符中动态选择构建运算符。步骤604从各种可互换的探测运算符中动态地选择探测运算符。因此,可以例如根据波动条件动态配置散列表处理。
例如,步骤602和/或步骤604可以为重复提交的相同查询的单独执行选择不同的运算符,因为即使在相同的DBMS 100上,相同的查询也可能不总是具有相同的最优计划。这种灵活性和变化超出了已知的关系运算符计划,因为图6涉及比已知关系运算符更细粒度的物理运算符或硬件运算符。
基于所选择的探测运算符和/或构建运算符,步骤606从各种可互换的硬件运算符中为另一个物理运算符动态地选择硬件运算符。例如在图5中,为所示的分区运算符和/或DGK运算符选择哪个硬件运算符或物理运算符可以取决于为所示的构建运算符和/或探测运算符选择哪个硬件运算符或物理运算符。例如,为构建运算符和/或探测运算符选择的细节(诸如本文别处讨论的数据格式化和引用)可以限制或有益于分区运算符和/或DGK运算符。例如,如果为构建运算符选择的物理运算符或硬件运算符不适应作为构建键值的空值,那么某个(或一些)周围物理运算符或硬件运算符的选择还可以专门化和/或基于排除空进行优化。
如图5中所示,构建运算符和探测运算符被连接。构建运算符还连接到分区运算符,并且探测运算符还连接到散列运算符和聚集运算符N和S。即,作为DAG 500的一部分互连的四个运算符以及构建运算符和探测运算符。这四个运算符可以替代地或附加地包括其它示例中的其它运算符,诸如以下其它示例运算符。
·联接键解码器运算符,
·解压缩运算符,
·字典编码器运算符,
·密集分组键运算符,它可以生成包含间隙的一系列不同的无符号整数,
·统计平均运算符,
·应用简单谓词的过滤运算符,
·分类运算符,
·保留多个分类输入的次序的合并运算符,
·文本搜索运算符,
·使用联接键的水平行分区运算符,
·使用散列表的桶的构建键插入运算符,或
·使用散列表的桶的插入溢出运算符。
构建运算符或探测运算符和其它四个运算符之一通过步骤608根据运算符集成模式连接,诸如数据批处理和/或缓冲、执行流水线和/或同步(也称为阻塞)或异步耦合。例如,在个实施例中,图5中所示的以下物理运算符可以涉及以下示例运算符集成模式和性能问题。
·重新编码和散列:这是可融合运算符,并且计算有界
·分区:这是高速缓存类型运算符,并且将消费所示的水平切片HS的空间,并且是带宽受限的。
·构建,这是阻塞运算符,并且带宽有界,并且生成所示的散列表HT。
·探测,聚集:这些是流水线运算符,并且带宽有界。
·DGK:这是阻塞运算符,并且带宽有界。
·AVG:这是流水线运算符,并且计算有界。
因此,DAG 500被配置为跨异构硬件进行负载平衡,诸如通过卸载和跨物理运算符的DAG,这些物理运算符可以布置在并行数据流路径和流水线级中,具有稍微不匹配的带宽的混合,而不会在DAG内出现性能瓶颈500并且不会降级DAG 500的执行吞吐量。
7.0示例计划优化过程
本文稍后呈现的是用于间接聚集的技术和图,其对于通过推迟聚集来最小化运动中的数据可能或多或少是基础的。以下是通常适用于有向无环数据流图(例如,图5的DAG500)的其它重要优化。查询计划和执行可能需要物理运算符的DAG和/或硬件运算符的DAG,如下所示。
图7是描绘图1的DBMS 100可以用来计划、优化和执行物理运算符的DAG 500和/或硬件运算符的DAG的示例DAG优化过程的流程图,诸如用于执行数据访问请求110。参考图1讨论图7。
为了演示,查询计划可以被认为是线性过程,它按以下次序依次生成以下工件,从而基于前一个工件生成下一个工件:a)数据访问请求的解析树110,其可以是由诸如131-132之类的关系运算符组成并且独立于硬件的初始查询计划,b)独立于硬件并且基于用于关系运算符的动态选择的特定实施方式(诸如131A和132B)的实施方式查询计划,并且包括独立于硬件并布置在物理运算符的DAG中的物理运算符(诸如161-162),以及c)对应的优化的硬件运算符DAG,其代表物理运算符的DAG在异构硬件上执行。
在实践中,DBMS 100的实施例可以具有各种方法,这些方法可以以各种方式偏离计划和执行工件的这种刚性线性进展。例如,代替瀑布方法,计划和优化可以是迭代方法,其中可以基于随后生成的工件来修改或替换先前生成的工件。例如,硬件运算符的DAG是基于物理运算符的DAG生成的,物理运算符可能需要或有益于基于硬件运算符的DAG中硬件运算符的选择、融合和拓扑重新排序的后续修改或替换。
例如,由于初始成本计算,实施方式131B可以如图所示最初未被选择。但是,当通过选择,融合和硬件运算符的重新排序定制所选择的实施方式131a以用于硬件时,实施方式131a的最终成本可以高于预期。例如,诸如由于动态条件,一些硬件、硬件运算符、融合或其它优化可能会意外地不可用。
因此,在计划和优化阶段之间可以存在反馈,其造成先前生成的(一个或多个)工件的修正或替换,诸如根据反馈循环,其中估计成本以增加的准确度被修正。例如,优化迭代可以揭示实施方式131B实际上和意外地成本低于先前选择的实施方式131A。
在操作中,步骤702生成初始执行计划,该初始执行计划不基于准确的硬件细节,诸如基于初始成本计算的关系运算符131-132的初始树,该初始成本计算可能例如错误地假定:悲观地认为没有GPU呈现或乐观地认为所有GPU都处于空闲状态。这种初始假定虽然可能不准确,但可以加快初始计划,并且在许多或大多数情况下实际上可能在统计上准确、可靠和稳健。
步骤704最初并动态地为相应的关系运算符131-132选择实施方式131A和132B。当单独选择并且彼此隔离时,实施方式131A和132B可以独立看起来是最优的。但是,可以存在跨越所选择的实施方式131A和132B之间的运算符间问题,如果改为选择实施131B和/或132A,那么可能会得到更好的优化。例如,即使实施方式131A最初的成本可能低于实施方式131B,DBMS 100也可以在迭代计划和优化期间检测到关系运算符131的实施方式131B的物理运算符164具有更多的协同作用,诸如用于与关系运算符132的计划工件互操作的资源消耗比最初选择的实施方式131A的物理运算符162更少。
因此,步骤706可以迭代地生成优化的执行计划,该执行计划通过修正或替换基于关系运算符的特定初始选择或未选择的实施方式,诸如基于初始选择或未选择的硬件运算符,诸如在物理运算符或硬件运算符融合或重新排序之前或之后。根据收敛准则,规划和优化的迭代最终收敛于物理运算符的最终DAG和硬件运算符的最终DAG,这可以有利于用较少的迭代来进行廉价查询的仓促优化,诸如根据行计数和/或值分布(诸如基数),并且可以有利于许多迭代以长期优化昂贵的查询(诸如用巨大的数据仓库)。
如上面所讨论的,步骤702、704和706执行查询计划制定,诸如拓扑制定和DAG的重新制定,诸如通过运算符的融合、重新排序和/或替换。但是,即使在迭代收敛于最终计划之后,该计划和/或其运算符也可以具有可能受益于附加调谐的配置设置。例如,物理运算符或硬件运算符的输入或输出可能需要可配置容量的缓冲区,而最优容量可以取决于动态条件,诸如运算符的互连性、运算符的融合、将运算符的子集分离为流水线级、参与的硬件的细节,和/或有效载荷数据的细节(诸如容量和数据类型)。
DBMS 100可以包含机器学习(ML)模型,该模型在步骤708中预测最优配置设置,诸如用于调谐DAG中不同位置的不同运算符的不同实例的数据批次和缓冲区的相应最优固定尺寸。ML模型的预测基于称为特征的输入,其可以包括DAG的细节、DAG的运算符及其互连性、参与的硬件、波动的资源可用性,和/或有效载荷数据的统计数据。
取决于特定配置设置的性质(诸如数值或归类),各种ML模型可以或多或少适合于提供预测。如本文稍后讨论的,示例种类的ML模型包括决策树、随机森林、人工神经网络(ANN)(诸如多层感知器(MLP))、线性或逻辑回归器,以及支持向量机(SVM)。在离线训练期间用诸如DBMS 100之类的(一个或多个)DBMS的历史操作信息进行强化学习可以准备ML模型以对现场生产设置中的最优性进行高度准确的预测,诸如本文稍后讨论的。步骤708完全或几乎不增加时延并且可以显著加速DAG的后续执行。在步骤708之后,硬件运算符的DAG既是最优的,也准备好直接执行。
8.0通过间接聚集的推迟的物化
如本文前面所讨论的,通过直接聚集的急切物化可能需要将物化的数据过度复制到可以比直接聚集运算符更下游的物理运算符,这会是低效的。通过间接聚集推迟的物化可以会以创新方式提高效率,如下面所讨论的。间接聚集也可以被称为推迟的聚集,因为可以通过将间接聚集运算符放置在尽可能远的下游(诸如与需要物化的数据的远下游物理运算符相邻)来推迟聚集。通过这种拓扑优化减少的有效载荷复制将在本文后面讨论。
图5的探测运算符在两个表之间执行配对,但实际上并不级联匹配的行以物化联接结果。代替地,探测运算符仅发出非物化的联接结果,其包含对两个表的匹配行的引用的对,诸如具有行标识符、存储器地址指针或缓冲区内部偏移量。探测运算符不发出任何表列,甚至不发出主键列。
用于联接结果的物化的这种列投影被委托给(一个或多个)下游聚集运算符。当两列来自同一个关系表或同一个物化的行集合时,两个列都可以由单个聚集运算符聚集,即使该聚集运算符位于联接的下游,诸如探测运算符的下游。但是,当两个列来自单独的关系表时,如dept_name和emp_sal列分别来自图3的dept和emp表,那么聚集这两个列要求两个聚集运算符N和S,如图5中所示。在实施例中,聚集运算符N和S都并行执行,诸如本文前面所讨论的。
本文技术的重要创新是最小化实际数据流(所谓的运动中或飞行中的数据),包括最小化数据复制的发生和范围。因此,由于过度复制,可能不鼓励直接聚集,尤其是当任一输入宽(诸如具有多个字段)或具有一个宽字段(诸如文本)时。在本文中,间接可以通过在物理运算符的DAG的数据流中传送引用(诸如行标识符)而不是实际值(诸如多字段元组)来最小化复制。同样,只有在直接聚集的某个输入中直接提供要复制到聚集输出的所有值时,才能使用直接聚集。
例如,直接聚集不能与非物化输入(诸如如上面所解释的联接结果)一起使用。该限制可能需要将值复制到直接聚集的输入向量中,这通常不是最优的并且通常是不使用直接聚集的原因。因此,以下种类的间接聚集常常在时间和/或空间上比直接聚集更高效。间接聚集的另一个好处是,因为它们预期诸如由联接产生的(一个或多个)非物化输入,因此间接聚集补充如上面讨论的联接。
图8是描绘三种间接聚集的框图,这些间接聚集专门用于如下的相应场景。诸如本文签名讨论的过滤器运算符或关系联接的输出之类的非物化的数据可以作为输入提供给下游间接聚集,并且可以指示行集合中已经被评估为满足过滤器的行的子集。
如图所示,三种间接聚集使用双重间接,使得解除引用一个引用获得另一个引用,该引用随后必须被解除引用以到达行集合的实际行。因此,使用两个缓冲区(诸如对同一间接聚集运算符的两个单独输入)使得第一缓冲区包含对第二缓冲区的引用,如下所示和解释的。这种双重间接可以保留已经应用的过滤,如下所示。
换句话说,第二缓冲区可以包含所有源行,并且第一缓冲区可以包含对满足过滤器的行的子集的引用。因此,第一缓冲区可以具有比第二缓冲区更少和更窄的条目。因此,使用第一缓冲区作为双重间接的附加缓冲区不会消耗大量附加的存储器。
所示的数组间接和CLA间接示例具有用于双重间接的两个缓冲区,使得第一缓冲区在左侧示出,而第二缓冲区在右侧示出。指针间接示例可以或如图所示可以没有第二缓冲区。对于数组间接和CLA间接示例,第二缓冲区将原始行集合的行合并到连续存储器中。如图所示,dataIN指向可以是如下讨论的片段的第二缓冲区。
因为指针间接示例的第一缓冲区包含指针而不是偏移量,所以这些指针可以指向地址空间中的任何地方以进行完全随机存取,使得不需要连续存储行集合的行。因此,指针间接示例不需要第二缓冲区来提供行集合的行。虽然具有第二缓冲区不会干扰指针间接,但指针比偏移量更宽,因此指针间接通常仅在没有第二缓冲区时使用。
如下并如本文稍后讨论的,间接聚集适应分段的输入,诸如当输入:a)太大以至于无法分配连续存储器,b)根据诸如用于批处理或高速缓存的IMCU之类的特殊方案分段,和/或c)如本文前面所讨论的分区成水平切片,诸如用上游分区运算符。这种分段可以要求间接聚集来维护指向当前正在由聚集处理的段的指针,示为dataIN,以及哪些引用与哪个段对应,示为baseIN或clalN。那些对应的引用可以如下处理。
当前片段被处理为引用的连续数组,其可以诸如通过迭代(诸如根据所示的变量i)来单独访问。例如,baseIN[i]可以随机存取第一数组中的一个引用,示为偏移量或指针,其可以被用于随机存取第二数组中的实际数据。
在所有三个示例间接聚集中,第一数组包含相同的相应固定宽度的引用。数组间接的第二数组包含固定宽度的数据,使得所示的偏移量用作到第二数组的数组索引。所示的指针间接的指针可以指向固定宽度或者其可变宽度由空终止符或长度计数器自描述的数据。
间接聚集可变宽度数据的另一种方式是用累积长度数组(CLA),其连续地打包非自定界的可变宽度数据。CLA间接需要两字节偏移量来访问第二数组中的一个数据,如图所示。在第一数组中,所示的offset[i]是一字节偏移量,它指示给定数据在第二缓冲区开始后的多少字节处开始。在第一数组中,所示的offset[i+1]是一字节偏移量,它指示下一个连续数据在第二缓冲区开始后多少字节处开始。因此,可变宽度给定数据在第二个数组中由这两种字节偏移量界定。
图8是描绘专门用于如下相应场景的三种间接聚集的框图。诸如本文早先讨论的过滤器运算符或关系联接的输出之类的非物化的数据可以作为输入提供给下游间接聚集,并且可以指示行集合中已经被评估为满足过滤器的行的子集。
9.0分段聚集
图9是描绘两种分段的聚集的框图。参考图8讨论图9。如图所示,图9的常规分段聚集如上文针对图8所讨论的那样,其中数据片段是第二输入缓冲区,并且对第二输入缓冲区的对应引用存储在第一输入缓冲区中,使得常规分段的聚集运算符接受第一和第二缓冲区作为单独的输入。
图9还示出了仅具有一个输入的CLA分段的聚集,其是自定界的,即使其可变宽度数据不是自定界的。即,如图所示,第一和第二缓冲区级联成单个自定界输入缓冲区,如图所示。
10.0数据库概述
本发明的实施例在数据库管理系统(DBMS)的上下文中使用。因此,提供了示例DBMS的描述。
一般而言,诸如数据库服务器之类的服务器是集成的软件组件和诸如存储器、节点以及节点上用于执行集成的软件组件的进程之类的计算资源的分配的组合,其中软件和计算资源的组合专用于代表服务器的客户端提供特定类型的功能。数据库服务器控制并促进对特定数据库的访问,处理客户端访问数据库的请求。
用户通过向数据库服务器提交使数据库服务器对存储在数据库中的数据执行操作的命令来与DBMS的数据库服务器进行交互。用户可以是在与数据库服务器交互的客户端计算机上运行的一个或多个应用。多个用户在本文中也可以被统称为用户。
数据库包括数据和数据库字典,其存储在诸如硬盘集之类的持久性存储器机构上。数据库由其自己的分开数据库字典定义。数据库字典包括定义数据库中包含的数据库对象的元数据。实际上,数据库字典定义了许多数据库。数据库对象包括表、表列和表空间。表空间是用于存储各种类型的数据库对象(诸如表)的数据的一个或多个文件的集合。如果将用于数据库对象的数据存储在表空间中,那么数据库字典将数据库对象映射到保存用于数据库对象的数据的一个或多个表空间。
DBMS参考数据库字典来确定如何执行提交给DBMS的数据库命令。数据库命令可以访问由字典定义的数据库对象。
数据库命令可以是数据库语句的形式。为了使数据库服务器处理数据库语句,数据库语句必须符合数据库服务器支持的数据库语言。许多数据库服务器支持的数据库语言的一个非限制性示例是SQL,包括由诸如Oracle之类的数据库服务器支持的SQL专有形式(诸如,Oracle Database 11g)。将SQL数据定义语言(“DDL”)指令发布到数据库服务器以创建或配置数据库对象,诸如表、视图或复杂类型。数据操纵语言(“DML”)指令被发布给DBMS,以管理存储在数据库结构内的数据。例如,SELECT(选择)、INSERT(插入)、UPDATE(更新)和DELETE(删除)是一些SQL实施方式中常见的DML指令示例。SQL/XML是在对象-关系数据库中操纵XML数据时使用的SQL的常见扩展。
多节点数据库管理系统由互连的节点组成,这些节点共享对同一数据库的访问。通常,节点经由网络互连,并在不同程度上共享对共享存储装置的访问,诸如对一组盘驱动器和存储在其上的数据块的共享访问。多节点数据库系统中的节点可以是经由网络互连的一组计算机(诸如工作站和/或个人计算机)的形式。可替代地,节点可以是网格的节点,该网格由与机架上的其它服务器刀片互连的服务器刀片形式的节点组成。
多节点数据库系统中的每个节点都托管数据库服务器。服务器(诸如数据库服务器)是集成软件组件和计算资源(诸如存储器、节点以及节点上的用于在处理器上执行集成软件组件的进程)的分配的组合、专用于代表一个或多个客户端执行特定功能的软件和计算资源的组合。
可以分配来自多节点数据库系统中多个节点的资源,以运行特定的数据库服务器的软件。软件和节点中的资源的分配的每种组合都是在本文中被称为“服务器实例”或“实例”的服务器。数据库服务器可以包括多个数据库实例,其中一些或全部在单独的计算机(包括单独的服务器刀片)上运行。
10.1查询处理
查询是表达式、命令或命令集,在执行时,使服务器对数据集执行一个或多个操作。查询可以指定要从中确定(一个或多个)结果集的(一个或多个)源数据对象,诸如(一个或多个)表、(一个或多个)列、(一个或多个)视图或(一个或多个)快照。例如,(一个或多个)源数据对象可以出现在结构化查询语言(“SQL”)查询的FROM子句中。SQL是用于查询数据库对象的众所周知的示例语言。如本文所使用的,术语“查询”被用于指表示查询的任何形式,包括数据库语句形式的查询和用于内部查询表示的任何数据结构。术语“表”是指被查询引用或定义并且表示行的集合(诸如数据库表、视图或内联查询块(诸如内联视图或子查询))的任何源对象。
查询可以在(一个或多个)对象被加载时逐行地对来自源数据对象的数据执行操作,或者在(一个或多个)对象已被加载之后对(一个或多个)整个源数据对象执行操作。由一些操作生成的结果集可以让(一个或多个)其它操作可用,并且以这种方式,可以基于某些标准将结果集过滤掉或缩小范围,和/或与(一个或多个)其它结果集和/或(一个或多个)其它源数据对象联接或组合。
子查询是查询的一部分或组成部分,它与查询的其它(一个或多个)部分或(一个或多个)组成部分不同,并且可以与查询的其它(一个或多个)部分或(一个或多个)组成部分分开评估(即,作为单独的查询)。查询的其它(一个或多个)部分或(一个或多个)组成部分可以形成外部查询,其可以包括也可以不包括其它子查询。嵌套在外部查询中的子查询可以被单独评估一次或多次,同时为外部查询计算结果。
一般而言,查询解析器接收查询语句并生成查询语句的内部查询表示。通常,内部查询表示是互连的数据结构的集合,其表示查询语句的各种组件和结构。
内部查询表示可以是节点图的形式,每个互连的数据结构与节点和所表示的查询语句的组件对应。内部表示通常在存储器中生成,以用于评估、操作和变换。
硬件概述
根据一个实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备(诸如被持久地编程为执行这些技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可以包括被编程为根据固件、存储器、其它存储装置或组合中的程序指令执行这些技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制编程相结合,以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持设备、联网设备或者结合硬连线和/或程序逻辑以实现这些技术的任何其它设备。
例如,图10是图示可以在其上实现本发明实施例的计算机系统1000的框图。计算机系统1000包括总线1002或用于传送信息的其它通信机制,以及与总线1002耦合以处理信息的硬件处理器1004。硬件处理器1004可以是例如通用微处理器。
计算机系统1000还包括耦合到总线1002的主存储器1006,诸如随机存取存储器(RAM)或其它动态存储设备,用于存储将由处理器1004执行的信息和指令。主存储器1006还可以用于存储在执行由处理器1004执行的指令期间的临时变量或其它中间信息。当存储在处理器1004可访问的非瞬态存储介质中时,这些指令使计算机系统1000成为被定制以执行指令中指定的操作的专用机器。
计算机系统1000还包括耦合到总线1002的只读存储器(ROM)1008或其它静态存储设备,用于存储用于处理器1004的静态信息和指令。提供存储设备1010(诸如磁盘、光盘或固态驱动器)并耦合到总线1002,用于存储信息和指令。
计算机系统1000可以经由总线1002耦合到显示器1012(诸如阴极射线管(CRT)),用于向计算机用户显示信息。包括字母数字键和其它键的输入设备1014耦合到总线1002,用于将信息和命令选择传送到处理器1004。另一种类型的用户输入设备是光标控件1016(诸如鼠标、轨迹球或光标方向键),用于将方向信息和命令选择传送到处理器1004并用于控制显示器1012上的光标移动。这种输入设备通常在两个轴上具有两个自由度,第一轴(例如,x)和第二轴(例如,y),这允许设备指定平面中的位置。
计算机系统1000可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑(它们与计算机系统相结合,使计算机系统1000成为或将计算机系统1000编程为专用机器)来实现本文所述的技术。根据一个实施例,响应于处理器1004执行包含在主存储器1006中的一个或多个指令的一个或多个序列,计算机系统1000执行所述的技术。这些指令可以从另一个存储介质(诸如存储设备1010)读入到主存储器1006中。包含在主存储器1006中的指令序列的执行使得处理器1004执行本文所述的处理步骤。在替代实施例中,可以使用硬连线的电路系统代替软件指令或与软件指令组合。
如本文使用的术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非瞬态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘、磁盘或固态驱动器,诸如存储设备1010。易失性介质包括动态存储器,诸如主存储器1006。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。
存储介质不同于传输介质但可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线1002的导线。传输介质也可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些。
各种形式的介质可以参与将一个或多个指令的一个或多个序列传送到处理器1004以供执行。例如,指令最初可以在远程计算机的磁盘或固态驱动器上携带。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统1000本地的调制解调器可以在电话线上接收数据并使用红外发送器将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路系统可以将数据放在总线1002上。总线1002将数据传送到主存储器1006,处理器1004从主存储器1006检索并执行指令。由主存储器1006接收的指令可以可选地在由处理器1004执行之前或之后存储在存储设备1010上。
计算机系统1000还包括耦合到总线1002的通信接口1018。通信接口1018提供耦合到网络链路1020的双向数据通信,其中网络链路1020连接到本地网络1022。例如,通信接口1018可以是集成服务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或者提供与对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口1018可以是局域网(LAN)卡,以提供与兼容LAN的数据通信连接。还可以实现无线链路。在任何此类实现中,通信接口1018都发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。
网络链路1020通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路1020可以提供通过本地网络1022到主计算机1024或到由互联网服务提供商(ISP)1026操作的数据设备的连接。ISP 1026进而通过全球分组数据通信网络(现在通常称为“互联网”1028)提供数据通信服务。本地网络1022和互联网1028都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及网络链路1020上并通过通信接口1018的信号(其将数字数据携带到计算机系统1000和从计算机系统1000携带数字数据)是传输介质的示例形式。
计算机系统1000可以通过(一个或多个)网络、网络链路1020和通信接口1018发送消息和接收数据,包括程序代码。在互联网示例中,服务器1030可以通过互联网1028、ISP1026、本地网络1022和通信接口1018发送对应用程序的所请求代码。
接收到的代码可以在被接收到时由处理器1004执行,和/或存储在存储设备1010或其它非易失性存储器中以供稍后执行。
软件概述
图11是可以用于控制计算系统1000的操作的基本软件系统1100的框图。软件系统1100及其组件,包括它们的连接、关系和功能,仅仅是示例性的,并且不意味着限制(一个或多个)示例实施例的实现。适于实现(一个或多个)示例实施例的其它软件系统可以具有不同的组件,包括具有不同的连接、关系和功能的组件。
软件系统1100用于指导计算系统1000的操作。可以存储在系统存储器(RAM)1006和固定存储装置(例如,硬盘或闪存)1010上的软件系统1100包括内核或操作系统(OS)1110。
OS 1110管理计算机操作的低级方面,包括管理进程的执行、存储器分配、文件输入和输出(I/O)以及设备I/O。表示为1102A、1102B、1102C...1102N的一个或多个应用可以被“加载”(例如,从固定存储装置1010传送到存储器1006中)以供系统1100执行。意图在计算机系统1000上使用的应用或其它软件也可以被存储为可下载的计算机可执行指令集,例如,用于从互联网位置(例如,Web服务器、app商店或其它在线服务)下载和安装。
软件系统1100包括图形用户界面(GUI)1115,用于以图形(例如,“点击”或“触摸手势”)方式接收用户命令和数据。进而,这些输入可以由系统1100根据来自操作系统1110和/或(一个或多个)应用1102的指令来操作。GUI 1115还用于显示来自OS 1110和(一个或多个)应用1102的操作结果,用户可以提供附加的输入或终止会话(例如,注销)。
OS 1110可以直接在计算机系统1000的裸硬件1120(例如,(一个或多个)处理器1004)上执行。可替代地,管理程序或虚拟机监视器(VMM)1130可以插入在裸硬件1120和OS1110之间。在这个配置中,VMM 1130充当OS 1110与计算机系统1000的裸硬件1120之间的软件“缓冲”或虚拟化层。
VMM 1130实例化并运行一个或多个虚拟机实例(“访客机”)。每个访客机包括“访客”操作系统(诸如OS 1110),以及被设计为在客户操作系统上执行的一个或多个应用(诸如(一个或多个)应用1102)。VMM 1130向访客操作系统呈现虚拟操作平台并管理访客操作系统的执行。
在一些情况下,VMM 1130可以允许访客操作系统如同其直接在计算机系统1000的裸硬件1120上运行一样运行。在这些实例中,被配置为直接在裸硬件1120上执行的访客操作系统的相同版本也可以在VMM 1130上执行而无需修改或重新配置。换句话说,VMM 1130可以在一些情况下向访客操作系统提供完全硬件和CPU虚拟化。
在其它情况下,访客操作系统可以被专门设计或配置为在VMM 1130上执行以提高效率。在这些实例中,访客操作系统“意识到”它在虚拟机监视器上执行。换句话说,VMM1130可以在某些情况下向客户操作系统提供半虚拟化。
计算机系统进程包括硬件处理器时间的分配,以及存储器的分配(物理和/或虚拟)、用于存储由硬件处理器执行的指令的存储器的分配,用于存储由硬件处理器执行指令所生成的数据,和/或用于当计算机系统进程未运行时在硬件处理器时间的分配之间存储硬件处理器状态(例如,寄存器的内容)。计算机系统进程在操作系统的控制下运行,并且可以在计算机系统上执行的其它程序的控制下运行。
云计算
本文一般地使用术语“云计算”来描述计算模型,该计算模型使得能够按需访问计算资源的共享池,诸如计算机网络、服务器、软件应用和服务,并且允许以最少的管理工作或服务提供商交互来快速提供和释放资源。
云计算环境(有时称为云环境或云)可以以各种不同方式实现,以最好地适应不同要求。例如,在公共云环境中,底层计算基础设施由组织拥有,该组织使其云服务可供其它组织或公众使用。相反,私有云环境一般仅供单个组织使用或在单个组织内使用。社区云旨在由社区内的若干组织共享;而混合云包括通过数据和应用可移植性绑定在一起的两种或更多种类型的云(例如,私有、社区或公共)。
一般而言,云计算模型使得先前可能由组织自己的信息技术部门提供的那些职责中的一些代替地作为云环境内的服务层来输送,以供消费者使用(根据云的公共/私人性质,在组织内部或外部)。取决于特定实现,由每个云服务层提供或在每个云服务层内提供的组件或特征的精确定义可以有所不同,但常见示例包括:软件即服务(SaaS),其中消费者使用在云基础设施上运行的软件应用,同时SaaS提供者管理或控制底层云基础设施和应用。平台即服务(PaaS),其中消费者可以使用由PaaS的供应者支持的软件编程语言和开发工具,以开发、部署和以其它方式控制它们自己的应用,同时PaaS提供者管理或控制云环境的其它方面(即,运行时执行环境下的一切)。基础设施即服务(IaaS),其中消费者可以部署和运行任意软件应用,和/或提供进程、存储装置、网络和其它基础计算资源,同时IaaS提供者管理或控制底层物理云基础设施(即,操作系统层下面的一切)。数据库即服务(DBaaS),其中消费者使用在云基础设施上运行的数据库服务器或数据库管理系统,同时DbaaS提供者管理或控制底层云基础设施和应用。
为了说明可以用于实现(一个或多个)示例实施例的基本底层计算机组件而呈现的上述基本计算机硬件和软件以及云计算环境。但是,(一个或多个)示例实施例不必限于任何特定的计算环境或计算设备配置。代替地,根据本公开,(一个或多个)示例实施例可以在本领域技术人员将理解为能够支持本文呈现的(一个或多个)示例实施例的特征和功能的任何类型的系统体系架构或处理环境中实现。
在前面的说明书中,已经参考众多具体细节描述了本发明的实施例,这些细节可以从实现到实现有所变化。因而,说明书和附图应被视为说明性而非限制性的。本发明范围的唯一和排他性指示,以及申请人意图作为本发明范围的内容,是以发布这种权利要求书的具体形式从本申请发布的权利要求书集合的字面和等同范围,包括任何后续更正。
Claims (21)
1.一种方法,包括:
接收对多个元组的数据访问请求;
将数据访问请求编译成一个或多个关系运算符;
从多个可互换实施方式中为所述一个或多个关系运算符中的特定关系运算符动态地选择特定实施方式,其中所述多个可互换实施方式中的每个实施方式包括相应的一个或多个物理运算符;
从多个可互换的硬件运算符中为所述一个或多个物理运算符中的特定物理运算符动态选择特定硬件运算符,硬件运算符包括:在第一处理硬件上执行的第一硬件运算符,以及在第二处理硬件上执行的第二硬件运算符,第二处理硬件在功能上与第一处理硬件不同;
生成对数据访问请求的响应,该响应基于:所述多个元组、特定关系运算符的特定实施方式,以及特定硬件运算符。
2.如权利要求1所述的方法,其中:
该方法还包括向或从特定硬件运算符传送列式数据;
所述传送列式数据是基于流水线并行化以及:异步或数据批次。
3.如权利要求2所述的方法,还包括机器学习(ML)模型预测所述数据批次的最优固定尺寸。
4.如权利要求1所述的方法,其中:
所述编译数据访问请求包括为数据访问请求生成第一执行计划,该第一执行计划不基于所述第一处理硬件也不基于所述第二处理硬件;
所述动态选择所述特定实施方式是基于第一执行计划的;
该方法还包括基于以下各项为数据访问请求生成第二执行计划:特定关系运算符的所述特定实施方式,以及所述特定硬件运算符。
5.如权利要求1所述的方法,其中所述编译数据访问请求包括为数据访问请求生成执行计划,该执行计划是有向无环图(DAG):
它不是树,以及
包括所述一个或多个关系运算符中的每个关系运算符的所述一个或多个物理运算符。
6.如权利要求1所述的方法,还包括:
检测所述特定硬件运算符和第二硬件运算符对于与特定硬件运算符相同或不同的关系运算符是否能够融合成组合的硬件运算符,以及
在相同的词法范围内并基于所述检测,将所述特定硬件运算符和第二硬件运算符融合成所述组合的硬件运算符。
7.如权利要求1所述的方法,其中所述动态选择所述特定实施方式还基于以下各项的动态可用性:
a)可用存储器,
b)可用处理带宽,或
c)以下各项的预期的存储器消耗或处理时间:所述特定实施方式、所述特定物理运算符或所述特定硬件运算符。
8.如权利要求1所述的方法,其中:
所述多个元组包含列;
该方法还包括:
从所述特定物理运算符向作为聚集运算符的特定物理运算符传送特定数据,该特定数据:基于所述多个元组而不基于所述列;以及
由聚集运算符将所述列与所述特定数据组合。
9.如权利要求8所述的方法,其中:
所述多个可互换实施方式包括第二实施方式,所述第二实施方式包括第二物理运算符,该第二物理运算符是不同于所述聚集运算符的第二聚集运算符;
所述聚集运算符和所述第二聚集运算符中的每一个是:
复制行标识符或不使用行标识符的直接聚集,
解除引用行标识符的间接聚集,或
能够处理分段的数组的分段的聚集。
10.如权利要求9所述的方法,其中分段的数组的片段包含:数据值和对所述数据值的引用。
11.如权利要求9所述的方法,还包括从以下至少两项动态选择所述间接聚集:
读取数据的数组的聚集,
解除引用多个存储器指针的聚集,以及
双重间接聚集。
12.如权利要求1所述的方法,其中:
所述多个元组包括构建数据行和探测数据行;
所述数据访问请求要求构建数据行与探测数据行的关系联接;
所述动态选择特定实施方式包括:
从多个可互换的构建运算符中动态选择作为构建运算符的第一物理运算符,以及
从多个可互换的探测运算符中动态选择作为探测运算符的第二物理运算符。
13.如权利要求12所述的方法,其中:
所述特定物理运算符包括构建运算符或探测运算符;
第三物理运算符包括:
联接键解码器运算符,
解压缩运算符,
字典编码器运算符,
密集分组键运算符,它能够生成包含间隙的序列,
统计均值运算符,
应用简单谓词的过滤器运算符,
分类运算符,
保留多个分类的输入的排序的合并运算符,
文本搜索运算符,
使用联接键的水平行分区运算符,
使用散列表的桶的构建键插入运算符,或
使用散列表的桶的插入溢出运算符;
该方法还包括基于所述特定物理运算符从第二多个可互换的硬件运算符中为第三物理运算符动态选择特定硬件运算符。
14.如权利要求13所述的方法,其中:
运算符集成包括:
融合成组合的运算符,或
异步流水线;
该方法还包括应用运算符集成来连接以下两个:构建运算符、探测运算符和第三物理运算符。
15.如权利要求1所述的方法,其中所述第一处理硬件是:
单指令多数据(SIMD)处理器,
图形处理单元(GPU),
现场阵列可编程门阵列(FPGA),
直接访问(DAX)协处理器,或
包含流水线并行化的专用集成电路(ASIC)。
16.一种方法,包括:
接收对多个关系元组的数据访问请求,其中数据访问请求不指定枢转列;
将数据访问请求编译成至少转置运算符;
由转置运算符转置所述多个关系元组;
生成基于所述转置所述多个关系元组的对数据访问请求的响应。
17.一种或多种存储指令的非暂态计算机可读存储介质,所述指令在由一个或多个处理器执行时使得:
接收对多个关系元组的数据访问请求,其中数据访问请求不指定枢转列;
将数据访问请求编译成至少转置运算符;
由转置运算符转置所述多个关系元组;
生成基于所述转置所述多个关系元组的对数据访问请求的响应。
18.一种或多种存储指令的非暂态计算机可读存储介质,所述指令在由一个或多个处理器执行时使得:
接收对多个元组的数据访问请求;
将数据访问请求编译成一个或多个关系运算符;
从多个可互换实施方式中为所述一个或多个关系运算符中的特定关系运算符动态地选择特定实施方式,其中所述多个可互换实施方式中的每个实施方式包括相应的一个或多个物理运算符;
从多个可互换的硬件运算符中为所述一个或多个物理运算符中的特定物理运算符动态选择特定硬件运算符,硬件运算符包括:在第一处理硬件上执行的第一硬件运算符,以及在第二处理硬件上执行的第二硬件运算符,第二处理硬件在功能上与第一处理硬件不同;
生成对数据访问请求的响应,该响应基于:所述多个元组、特定关系运算符的特定实施方式,以及特定硬件运算符。
19.如权利要求18所述的一种或多种非暂态计算机可读存储介质,其中:
所述指令还使得向或从特定硬件运算符传送列式数据;
所述传送列式数据是基于流水线并行化以及:异步或数据批次。
20.如权利要求18所述的一种或多种非暂态计算机可读存储介质,其中:
所述多个元组包含列;
所述指令还使得:
从所述特定物理运算符向作为聚集运算符的特定物理运算符传送特定数据,该特定数据:基于所述多个元组而不基于所述列;以及
由聚集运算符将所述列与所述特定数据组合。
21.如权利要求18所述的一种或多种非暂态计算机可读存储介质,其中:
所述多个元组包括构建数据行和探测数据行;
所述数据访问请求要求构建数据行与探测数据行的关系联接;
所述动态选择特定实施方式包括:
从多个可互换的构建运算符中动态选择作为构建运算符的第一物理运算符,以及
从多个可互换的探测运算符中动态选择作为探测运算符的第二物理运算符。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962898460P | 2019-09-10 | 2019-09-10 | |
US62/898,460 | 2019-09-10 | ||
US17/015,580 US11429604B2 (en) | 2019-09-10 | 2020-09-09 | Techniques of heterogeneous hardware execution for SQL analytic queries for high volume data processing |
US17/015,580 | 2020-09-09 | ||
PCT/US2020/050227 WO2021050747A1 (en) | 2019-09-10 | 2020-09-10 | Techniques of heterogeneous hardware execution for sql analytic queries for high volume data processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114365115A true CN114365115A (zh) | 2022-04-15 |
Family
ID=74851021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080063355.9A Pending CN114365115A (zh) | 2019-09-10 | 2020-09-10 | 用于大容量数据处理的sql分析查询的异构硬件执行的技术 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11429604B2 (zh) |
EP (2) | EP4328761A1 (zh) |
CN (1) | CN114365115A (zh) |
WO (1) | WO2021050747A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741993A (zh) * | 2022-04-18 | 2022-07-12 | 山东浪潮科学研究院有限公司 | 一种基于脚本的数据流图生成方法及装置 |
CN115168408A (zh) * | 2022-08-16 | 2022-10-11 | 北京永洪商智科技有限公司 | 基于强化学习的查询优化方法、装置、设备及存储介质 |
CN115378789A (zh) * | 2022-10-24 | 2022-11-22 | 中国地质大学(北京) | 一种多层次协作的流资源管理方法及系统 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11727289B2 (en) * | 2018-05-04 | 2023-08-15 | International Business Machines Corporation | Iterative generation of top quality plans in automated plan generation for artificial intelligence applications and the like |
US10769150B1 (en) | 2019-12-26 | 2020-09-08 | Snowflake Inc. | Pruning indexes to enhance database query processing |
US11372860B2 (en) * | 2019-12-26 | 2022-06-28 | Snowflake Inc. | Processing techniques for queries where predicate values are unknown until runtime |
US10877967B1 (en) * | 2020-03-13 | 2020-12-29 | Snowflake Inc. | System and method for disjunctive joins |
US11321142B2 (en) * | 2020-05-04 | 2022-05-03 | Accenture Global Solutions Limited | NOSQL database capacity configuration optimization system for cloud computing |
US11567998B2 (en) * | 2021-03-25 | 2023-01-31 | Databricks, Inc. | Dataflow graph processing |
US11907215B2 (en) * | 2021-09-08 | 2024-02-20 | Sap Se | Staged query compilation with common data structure |
US20230259507A1 (en) * | 2022-02-15 | 2023-08-17 | Capricorn Holdings Pte. Ltd. | Systems, methods, and media for retrieving an entity from a data table using semantic search |
CN114328592B (zh) * | 2022-03-16 | 2022-05-06 | 北京奥星贝斯科技有限公司 | 聚合计算方法和装置 |
US11927634B2 (en) | 2022-04-01 | 2024-03-12 | Samsung Electronics Co., Ltd | Systems and methods for database scan acceleration |
US20240037151A1 (en) * | 2022-07-28 | 2024-02-01 | Oxla sp. z o.o. | Channel based flow control of data during execution of database queries |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3213585B2 (ja) | 1998-07-09 | 2001-10-02 | 株式会社インフォメックス | データ検索方法及び装置、データ検索システム、記録媒体 |
US6609131B1 (en) | 1999-09-27 | 2003-08-19 | Oracle International Corporation | Parallel partition-wise joins |
US6665684B2 (en) | 1999-09-27 | 2003-12-16 | Oracle International Corporation | Partition pruning with composite partitioning |
US6954776B1 (en) | 2001-05-07 | 2005-10-11 | Oracle International Corporation | Enabling intra-partition parallelism for partition-based operations |
US7020661B1 (en) | 2002-07-10 | 2006-03-28 | Oracle International Corporation | Techniques for pruning a data object during operations that join multiple data objects |
US7340452B2 (en) | 2003-12-16 | 2008-03-04 | Oracle International Corporation | Parallel single cursor model on multiple-server configurations |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8769485B2 (en) * | 2006-12-04 | 2014-07-01 | Tibco Software, Inc. | Data parallelism and parallel operations in stream processing |
US8037096B2 (en) | 2007-06-29 | 2011-10-11 | Microsoft Corporation | Memory efficient data processing |
US7870174B2 (en) | 2007-10-11 | 2011-01-11 | Oracle International Corporation | Reference partitioned tables |
US7730055B2 (en) | 2008-06-23 | 2010-06-01 | Oracle International Corporation | Efficient hash based full-outer join |
US8185519B2 (en) | 2009-03-14 | 2012-05-22 | Microsoft Corporation | Techniques for exact cardinality query optimization |
US8166022B2 (en) | 2009-08-18 | 2012-04-24 | International Business Machines Corporation | System, method, and apparatus for parallelizing query optimization |
US9275031B2 (en) * | 2009-10-09 | 2016-03-01 | Microsoft Technology Licensing, Llc | Data analysis expressions |
US8751533B1 (en) | 2009-11-25 | 2014-06-10 | Netapp, Inc. | Method and system for transparently migrating storage objects between nodes in a clustered storage system |
US8332389B2 (en) | 2009-12-04 | 2012-12-11 | International Business Machines Corporation | Join order for a database query |
US20110145220A1 (en) * | 2009-12-10 | 2011-06-16 | Ramakumar Kosuru | System and method for executing a query |
US8447754B2 (en) * | 2010-04-19 | 2013-05-21 | Salesforce.Com, Inc. | Methods and systems for optimizing queries in a multi-tenant store |
US20120016641A1 (en) | 2010-07-13 | 2012-01-19 | Giuseppe Raffa | Efficient gesture processing |
US9043310B2 (en) | 2011-11-08 | 2015-05-26 | International Business Machines Corporation | Accessing a dimensional data model when processing a query |
US8660985B2 (en) | 2012-04-11 | 2014-02-25 | Renmin University Of China | Multi-dimensional OLAP query processing method oriented to column store data warehouse |
WO2014049596A1 (en) | 2012-09-28 | 2014-04-03 | Sqream Technologies Ltd | A system and a method for executing sql-like queries with add-on accelerators |
US9384244B1 (en) * | 2012-11-28 | 2016-07-05 | BloomReach Inc. | Search with autosuggest and refinements |
US9442993B2 (en) * | 2013-02-11 | 2016-09-13 | Dell Products L.P. | Metadata manager for analytics system |
US9195712B2 (en) | 2013-03-12 | 2015-11-24 | Microsoft Technology Licensing, Llc | Method of converting query plans to native code |
US9576039B2 (en) * | 2014-02-19 | 2017-02-21 | Snowflake Computing Inc. | Resource provisioning systems and methods |
US10545917B2 (en) | 2014-02-19 | 2020-01-28 | Snowflake Inc. | Multi-range and runtime pruning |
US10073885B2 (en) | 2015-05-29 | 2018-09-11 | Oracle International Corporation | Optimizer statistics and cost model for in-memory tables |
US10067954B2 (en) | 2015-07-22 | 2018-09-04 | Oracle International Corporation | Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations |
WO2017031082A1 (en) * | 2015-08-14 | 2017-02-23 | California Institute Of Technology | Algebraic query language (aql) database management system |
US10409560B1 (en) | 2015-11-18 | 2019-09-10 | Amazon Technologies, Inc. | Acceleration techniques for graph analysis programs |
KR101751970B1 (ko) * | 2016-06-20 | 2017-07-03 | 주식회사 티맥스데이터 | 쿼리를 실행하기 위한 방법, 장치 및 컴퓨터 판독가능 매체 |
KR101747265B1 (ko) * | 2016-06-20 | 2017-06-15 | 주식회사 티맥스데이터 | 쿼리를 실행하기 위한 방법, 장치 및 컴퓨터 판독가능 매체 |
US10853125B2 (en) | 2016-08-19 | 2020-12-01 | Oracle International Corporation | Resource efficient acceleration of datastream analytics processing using an analytics accelerator |
CN109844730B (zh) | 2016-09-12 | 2023-06-13 | 甲骨文国际公司 | 用于评估数据库查询的方法、计算机系统、介质和装置 |
US10558659B2 (en) | 2016-09-16 | 2020-02-11 | Oracle International Corporation | Techniques for dictionary based join and aggregation |
KR102511927B1 (ko) * | 2018-01-18 | 2023-03-21 | 한국전자통신연구원 | Jit 컴파일 기반 데이터베이스 시스템, 이의 질의 처리 방법 및 이의 저장 프로시저 최적화 방법 |
US11580102B2 (en) * | 2020-04-02 | 2023-02-14 | Ocient Holdings LLC | Implementing linear algebra functions via decentralized execution of query operator flows |
US11775529B2 (en) * | 2020-07-06 | 2023-10-03 | Ocient Holdings LLC | Recursive functionality in relational database systems |
-
2020
- 2020-09-09 US US17/015,580 patent/US11429604B2/en active Active
- 2020-09-10 WO PCT/US2020/050227 patent/WO2021050747A1/en active Search and Examination
- 2020-09-10 CN CN202080063355.9A patent/CN114365115A/zh active Pending
- 2020-09-10 EP EP23207874.1A patent/EP4328761A1/en active Pending
- 2020-09-10 EP EP20780493.1A patent/EP4028906B1/en active Active
-
2022
- 2022-08-25 US US17/895,445 patent/US11989179B2/en active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741993A (zh) * | 2022-04-18 | 2022-07-12 | 山东浪潮科学研究院有限公司 | 一种基于脚本的数据流图生成方法及装置 |
CN115168408A (zh) * | 2022-08-16 | 2022-10-11 | 北京永洪商智科技有限公司 | 基于强化学习的查询优化方法、装置、设备及存储介质 |
CN115168408B (zh) * | 2022-08-16 | 2024-05-28 | 北京永洪商智科技有限公司 | 基于强化学习的查询优化方法、装置、设备及存储介质 |
CN115378789A (zh) * | 2022-10-24 | 2022-11-22 | 中国地质大学(北京) | 一种多层次协作的流资源管理方法及系统 |
CN115378789B (zh) * | 2022-10-24 | 2023-01-10 | 中国地质大学(北京) | 一种多层次协作的流资源管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
EP4028906A1 (en) | 2022-07-20 |
WO2021050747A1 (en) | 2021-03-18 |
EP4328761A1 (en) | 2024-02-28 |
US11429604B2 (en) | 2022-08-30 |
US11989179B2 (en) | 2024-05-21 |
US20210073226A1 (en) | 2021-03-11 |
US20220405282A1 (en) | 2022-12-22 |
EP4028906B1 (en) | 2023-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4028906B1 (en) | Techniques of heterogeneous hardware execution for sql analytic queries for high volume data processing | |
García-Gil et al. | A comparison on scalability for batch big data processing on Apache Spark and Apache Flink | |
Wang et al. | Asynchronous and fault-tolerant recursive datalog evaluation in shared-nothing engines | |
US9613068B2 (en) | Scalable analysis platform for semi-structured data | |
KR102361153B1 (ko) | 데이터 유형에 관련된 데이터 프로파일링 동작 관리 | |
CN113227998A (zh) | 全面支持自主json文档对象(ajd)云服务的技术 | |
US10733184B2 (en) | Query planning and execution with source and sink operators | |
US11797539B2 (en) | Accelerated building and probing of hash tables using symmetric vector processing | |
US11010383B2 (en) | Hierarchy rearrange operator | |
EP4028907B1 (en) | Accelerated building and probing of hash tables using symmetric vector processing | |
WO2013153027A1 (en) | Method and system for streaming processing in a map and reduce distributed computing platform | |
Birjali et al. | Evaluation of high-level query languages based on MapReduce in Big Data | |
Michiardi et al. | In-memory caching for multi-query optimization of data-intensive scalable computing workloads | |
Ayall et al. | Graph computing systems and partitioning techniques: A survey | |
Chan et al. | A distributed stream library for Java 8 | |
Sarkar et al. | MapReduce: A comprehensive study on applications, scope and challenges | |
US20140379691A1 (en) | Database query processing with reduce function configuration | |
Hüske | Specification and optimization of analytical data flows | |
Kalavri | Performance optimization techniques and tools for distributed graph processing | |
Herodotou | Business intelligence and analytics: big systems for big data | |
Hagedorn et al. | Stream processing platforms for analyzing big dynamic data | |
Luengo et al. | Big data: Technologies and tools | |
Zhao et al. | A multidimensional OLAP engine implementation in key-value database systems | |
Perera | Towards Scalable High Performance Data Engineering Systems | |
Fegaras | A query processing framework for large-scale scientific data analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |