CN108470072B - 一种查询编译方法和装置 - Google Patents
一种查询编译方法和装置 Download PDFInfo
- Publication number
- CN108470072B CN108470072B CN201810298547.2A CN201810298547A CN108470072B CN 108470072 B CN108470072 B CN 108470072B CN 201810298547 A CN201810298547 A CN 201810298547A CN 108470072 B CN108470072 B CN 108470072B
- Authority
- CN
- China
- Prior art keywords
- jit
- plan
- partial query
- engine
- query plan
- 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.)
- Expired - Fee Related
Links
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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/283—Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
-
- 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/24535—Query rewriting; Transformation of sub-queries or views
Abstract
本说明书实施例提供一种查询编译方法和装置,其中方法包括:在执行部分查询计划之前,JIT引擎判断部分查询计划是否满足JIT处理条件,所述部分查询计划由主节点分配至所述JIT引擎所在的计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;若所述部分查询计划满足所述JIT处理条件,则JIT引擎对所述部分查询计划执行JIT处理,以得到执行结果;否则,所述JIT引擎将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
Description
技术领域
本说明书涉及数据库技术领域,特别涉及一种查询编译方法和装置。
背景技术
在事务处理系统中的数据,主要用于记录和查询业务情况。随着数据仓库(DataWarehouse,简称:DW)技术的不断成熟,企业的数据逐渐变成了决策的主要依据。数据仓库是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,数据仓库可以从许多业务处理系统中抽取、转换得到数据,并利用数据为企业的战略决策提供数据支持。数据仓库涉及的主要操作就是查询操作,数据仓库性能的一个重要方面就是如何提升查询性能。
发明内容
有鉴于此,本说明书提供一种查询编译方法和装置,以提高查询速度。
具体地,本说明书一个或多个实施例是通过如下技术方案实现的:
第一方面,提供一种查询编译方法,所述方法应用于JIT即时引擎,所述JIT引擎设置于数据仓库中的计算节点,所述数据仓库包括主节点和并行的多个计算节点,每个所述计算节点还包括非JIT引擎;所述方法包括:
在执行部分查询计划之前,所述JIT引擎判断所述部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述JIT引擎所在的计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
若所述部分查询计划满足所述JIT处理条件,则所述JIT引擎对所述部分查询计划执行JIT处理,以得到执行结果;否则,所述JIT引擎将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
第二方面,提供一种查询编译装置,所述装置应用于JIT即时引擎,所述JIT引擎设置于数据仓库中的计算节点,所述数据仓库包括主节点和并行的多个计算节点,每个所述计算节点还包括非JIT引擎;所述装置包括:
条件判断模块,用于在执行部分查询计划之前,判断部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述JIT引擎所在的计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
执行处理模块,用于在所述部分查询计划满足所述JIT处理条件时,对所述部分查询计划执行JIT处理,以得到执行结果;否则,将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
第三方面,提供一种数据仓库系统,所述系统包括:主节点和多个并行的计算节点;每一个所述计算节点包括:JIT引擎和非JIT引擎;
所述主节点,用于接收查询请求,并根据查询请求生成查询计划,将所述查询计划中包括的部分查询计划分配到各个计算节点;
所述计算节点中的JIT引擎,用于在执行所述部分查询计划之前,判断所述部分查询计划是否满足JIT处理条件;若所述部分查询计划满足所述JIT处理条件,则所述JIT引擎对所述部分查询计划执行JIT处理,以得到执行结果;否则,所述JIT引擎将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
第四方面,提供一种计算设备,所述计算设备作为数据仓库中的一个计算节点,所述数据仓库包括主节点和并行的多个计算节点;所述计算设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
在执行部分查询计划之前,判断所述部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述计算设备,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
若所述部分查询计划满足所述JIT处理条件,则对所述部分查询计划执行JIT处理,以得到执行结果;否则,对所述部分查询计划执行非JIT的执行处理。
第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下的方法步骤:
在执行部分查询计划之前,判断所述部分查询计划是否满足JIT处理条件,所述部分查询计划由数据仓库的主节点分配至所述处理器所在的计算节点,所述数据仓库包括所述主节点和并行的多个计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
若所述部分查询计划满足所述JIT处理条件,则对所述部分查询计划执行JIT处理,以得到执行结果;否则,将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
本说明书一个或多个实施例的方法和装置,通过JIT引擎在执行查询计划前预先进行了是否值得JIT的判断,不会盲目的全部采用JIT,对于不值得JIT的可以仍然采用非JIT解释执行,实现了以查询更快为目标,从而能够尽可能的提高查询速度。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一个或多个实施例提供的一种数据仓库系统的应用系统图;
图2为本说明书一个或多个实施例提供的一种查询编译方法的流程图;
图3为本说明书一个或多个实施例提供的一种数据仓库的查询流程图;
图4为本说明书一个或多个实施例提供的一种查询编译装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
本说明书一个或多个实施例提供的查询方法,可以应用于海量并行处理(MassiveParallel Processing,MPP)架构的分布式数据仓库。本领域技术人员可以理解的是,该方法不局限于应用于该场景,其他场景也可以应用该方法。
图1示例了一个数据仓库系统,该系统采用MPP架构。该图1的结构只是示例,实际实施中并不局限于此结构。如图1所示,MPP架构的数据库集群可以包括主节点11(为了提供高可用性,通常还可以设置一个从主节点)和多个并行的计算节点12。其中,主节点和每个计算节点都有自己独立的处理器、内存和外部存储。每个计算节点可以是具有数百甚至数千个内核的新一代对称多处理器(Symmetrical Multi-Processing,SMP)结构的服务器。
MPP架构的数据仓库在执行查询语句的时候,查询在每个计算节点上并行执行,每个节点只访问自己的本地资源(内存、存储等),可以是一种无共享(Share Nothing)结构,大大提升了查询的效率。但是,在查询过程中可能会涉及到不同计算节点间的数据交换。为了实现节点之间相互的数据交换,多个计算节点之间可以通过节点互联网络进行连接,协同工作,从用户的角度来看,多个计算节点可以是一个服务器系统。在一个例子中,可以通过Interconnect组件负责在不同的计算节点之间实现数据交换。
请继续参见图1,主节点11作为整个分布式系统集群的大脑,可以负责接收客户端13的连接和查询请求,例如,该查询请求可以是“查询获取2016年12至2017年11月之间的销售数据”。主节点11上可以包括解析器111、优化器112等组件。在接收到查询请求对应的查询语句后,主节点11可以通过解析器111执行词法分析和语法分析,并生成解析树。优化器112可以处理解析树,生成查询计划,查询计划描述了如何执行本次查询。查询计划的优劣可以直接影响查询的执行效率,对于同样一条查询语句,一个好的查询执行效率比一个次好的查询计划可能快上100倍。查询计划的生成可以考虑集群计算节点数量、数据的分布式状态、数据重分布的代价等因素对执行效率的影响。
主节点11在生成查询计划后,可以将查询计划切分成一个个片段(slice),并将各个片段下发到各个计算节点(计算节点也可以称为Segment节点),由各个计算节点并行处理,以提升查询效率。计算节点负责数据的存储以及查询计划的执行。一个计算节点上可以同时执行多个片段,同一个片段也可以由不同的计算节点并行处理。如图1所示,其中一个计算节点12上可以执行片段slice1,同时也执行片段slice2;slice2可以运行在多个计算节点12上。如果将一次查询的查询计划想象成一个矩形块,那么,可以通过各个slice对该矩形块进行横向切分,并通过Segment对该矩形块进行纵向切分,从而将查询计划切分成很多小部分,分配到各个计算节点并行处理。
具体到其中一个计算节点12上,查询计划的执行是在计算节点12上完成。计算节点12在执行查询计划时,将使用计算节点上存储的数据,如图1中示例的数据存储14。数据仓库的数据通常都要进行分区,数据分区的标准可以由开发人员决定,例如,日期、业务范围、地理位置、组织单位等都可以作为数据分区标准的一个因素。在一个例子中,一个计算节点可以对应一个数据分区,多个计算节点相当于多个数据分区,一个片段可以同时运行在这多个数据分区上。参见图1的示例,片段slice1可以同时运行在多个计算节点12,这可以称为“数据并行”。
而不同的片段之间也可以进行数据的流动,片段间的数据流动可以包括同一计算节点上运行的多个片段之间的流动,或者不同计算节点上运行的多个片段之间的流动。例如,以其中一个计算节点12为例,该节点上可以同时运行着slice1和slice2,数据经过slice1处理,流入到slice2,slice2接着处理;在slice2运行的同时,slice1继续处理数据,接着流入slice2;同样,slice2处理的数据也可以流入另一个slice,这可以称为“流水线并行”。一般情况下,所有slice可以同时运行,数据并行和流水线并行可以同时发生。
本例子中,每一个计算节点上都包括JIT(Just-In-Time,即时)引擎15和非JIT引擎16,其中,图1中的非JIT引擎16以Postgres数据库执行器为例,但并不局限于此。JIT引擎15例如可以是LLVM(Low Level Virtual Machine,底层虚拟机)JIT编译器。主节点11向计算节点12下发的查询计划,可以先被JIT引擎15接收,在执行前,由JIT引擎15判断是否值得对该查询计划进行JIT处理,如果值得,则执行JIT;否则,可以再由JIT引擎15将查询计划转发给非JIT引擎处理。这部分过程可以参见图2示意的流程:
在步骤200中,确定待执行的部分查询计划。
本例子中,所述的“部分查询计划”可以是主节点根据查询请求对应的查询语句生成的查询计划的一部分。
比如,如图1的示例,该“部分查询计划”可以对应于图1中的部分查询计划121和部分查询计划122。其中,部分查询计划121可以对应于片段slice1运行于图1所示的最左边的一个计算节点12上的片段部分(片段部分即片段slice运行的其中一个数据分区,这个分区在最左边计算节点12上),而部分查询计划122可以对应于片段slice2运行于所述最左边的一个计算节点12上的片段部分。
此外,部分查询计划还可以是一个逻辑操作节点(query operator),上述的片段部分中可以包括多个在逻辑上划分的不同的逻辑操作节点,相当于树状的查询计划中的一个子节点。
当然,部分查询计划并不限于上述提到的对应某个片段部分或者逻辑操作节点,更加灵活的,一个计算节点上的JIT引擎可以对主节点下发给该计算节点的查询计划中包括的一部分,都可以确定为部分查询计划。
在步骤202中,在执行部分查询计划前,JIT引擎判断部分查询计划是否满足JIT处理条件。
本例子中,如果对部分查询计划进行JIT处理,指的是将查询计划(简写,可以理解,这里指的是部分查询计划,后续同理)编译为机器代码,并调用机器代码得到查询的执行结果。但是,实际实施中,并不一定是JIT引擎执行查询计划是最快的。例如,如果通过主键检索单个元组能在1ms内完成,这种情况就不值得采用JIT处理。因此,JIT引擎可以在执行前,预先对是否值得对查询计划执行JIT进行判断。
JIT处理是否值得的判断依据,可以有多种,可以将这些判断依据称为“JIT处理条件”。满足JIT处理条件,则可以表示值得采用JIT处理;否则,如果不满足JIT处理条件,则表示不值得采用JIT处理。
JIT处理条件的设置,一般可以用来判断JIT处理是否比通常的非JIT处理更加快速。例如,在一个例子中,可以将JIT处理时间作为衡量依据,即考虑JIT处理的时间代价。JIT处理时间可以指的是将查询计划编译为机器代码的耗费时间。如果该JIT处理时间在预设的时间阈值范围内,足够短,则可以认为部分查询计划满足JIT处理条件;否则,认为不满足JIT处理条件。
示例性的,主节点11在生成查询计划时,可以根据查询计划的大小对该查询计划的JIT处理时间有所估算,在向计算节点下发查询计划时,可以一并将估算的JIT处理时间发送至计算节点。对于部分查询计划来说,同样可以包括该部分查询计划对应的JIT处理时间,JIT引擎可以预先存储一个时间阈值,并获取该部分查询计划对应的JIT处理时间,与时间阈值比较来判断。或者,还可以是由JIT引擎自身根据待执行的部分查询计划的大小来估算JIT处理时间。一般情况下,如果查询计划涉及的数据越多,操作越复杂,那么JIT处理时间越长。
还需要说明的是,JIT处理条件也并非限于上述的JIT处理时间的考量,还可以有其他因素的考量。比如,可以考虑内存开销,如果内存开销太大,也可以不进行JIT处理。总之,JIT处理条件的判断目的可以是为了使得查询性能更好。
本步骤中,若所述部分查询计划满足所述JIT处理条件,则继续执行步骤204。否则,执行步骤206。
在步骤204中,JIT引擎对部分查询计划执行JIT处理,以得到执行结果。
本步骤中,所述JIT引擎对所述部分查询计划执行JIT处理,包括:所述JIT引擎将所述部分查询计划编译为机器代码,并执行该机器代码。即JIT引擎可以将部分查询计划编译为机器代码,调用执行该机器代码得到对应该部分查询计划的执行结果。
此外,还可以进行如下处理,以进一步提高查询速度:
查询计划中的变量在生成的机器代码中可以被编码为常量。间接函数调用可以内联或者转换为直接函数调用。在机器代码生成时检测并删除多余的和不重要的代码片段,消除无用条件分支以生成非常严格的运行时代码。原始数据类型一旦被反序列化,就被存储在寄存器中。如果复杂数据类型的长度小于8个字节,则将其压缩到寄存器中。对于原始类型的操作,NULL被处理为没有条件分支。整数和浮点数的溢出检测可以由硬件完成。与通用的元组反序列化过程不同,元组根据其类型自定义元组反序列化,其中,根据字段类型将被迭代数据字段的循环静态地平铺为自定义代码序列。
查询计划中编码的软件模型折叠为针对数据路径优化的程序,类似于编译器中的循环展开。可以不再有更高阶的规划节点(Plan Node)调用子规划节点(Child Plan Node)的getNextTuple()虚拟方法。相反,在子节点生成用于获取或准备数据的代码的情况下,使用推模型,立即调用父节点生成内联代码以直接处理数据。生成的代码无缝地跨越规划节点的边界,同时保留处理器的寄存器,从而最大化数据驻留在寄存器中的时间。
通过JIT处理,可以为查询生成单程序多数据(SPMD,Single Program/MultipleData)程序。如果查询含有必须串行运行的关键路径,实时处理的机器代码可以运行在单线程中,但是尽可能在关键路径前后使用多个内核。达到单线程代码的性能对SPMD代码的生成是非常重要的。SPMD代码的每个部分可以像单线程代码一样跨越几个逻辑操作节点。可以利用无锁算法(使用原子指令)和动态数据分区来最小化线程之间的同步开销。
在步骤206中,JIT引擎将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
本步骤中,相当于切换执行器,对部分查询计划不再采用JIT处理,而是转由非JIT引擎进行解释执行,得到该部分查询计划的执行结果。
此外,对于上述的部分查询计划的执行结果,可以继续参与到流水线并行的处理中,在不同的片段间流动处理,或者在不同的计算节点间流动处理,最终得到的查询结果,由主节点11反馈给客户端13。
本例子的查询方法具有如下优点:
一方面,该方法是一种“JIT+非JIT”的混合模式的执行方法,由于JIT引擎在执行查询计划前预先进行了是否值得JIT的判断,不会盲目的全部采用JIT,对于不值得JIT的可以仍然采用非JIT解释执行,比如,JIT处理更快的就采用JIT处理,非JIT处理更快的就放弃JIT,总之以查询性能的优化为目标,从而能够尽可能的提升查询性能,比如提高查询速度。
另一方面,“JIT+非JIT”的混合模式执行查询,使得即使查询计划不适合JIT,也能够切换回非JIT引擎,实现了对非JIT引擎的兼容。并且,本方法只要在一次查询的过程中,可以非常灵活的对部分查询计划进行JIT的判断,JIT判断的对象也很灵活,比如可以是运行于某个数据分区上的某个片段,或者可以是某个逻辑操作节点。通过对一次查询中的“部分查询计划”采用JIT处理,这种方式能够进一步将查询速度的提升最大化。
图3示例了一个数据仓库的查询方法,该方法以数据仓库系统的角度描述,说明了一次查询过程中是如何应用上述的混合模式和部分查询功能。如图3所示,该查询方法可以包括如下处理:
在步骤300中,主节点接收查询请求,并根据查询请求生成查询计划。
本步骤中,假设用户要通过数据仓库系统查询获取自己需要的信息,可以通过图1所示的客户端13,向数据仓库系统发送查询请求。例如,该客户端13可以是数据仓库系统提供给用户侧查询使用的客户端软件,可以具有人机交互界面,以方便用户查询。例如,查询请求可以是提交给诸如开放数据库互连(ODBC)或Java数据库互连(JDBC)之类的查询通道。
所述的查询请求可以是一个查询语句的发送,该查询语句中可以包括用户限定的各种查询条件,比如,用户要查询2016年11月份至2017年5月份的数据,这是查询数据的时间条件;或者还可以包括查询数据的类别,用户要获取的是销售数据。主节点可以通过语法分析、路径优化等方式,根据查询语句生成查询计划,该查询计划用于描述如何查询才能得到查询语句中限定的数据。
在步骤302中,主节点将所述查询计划中划分为多个片段部分。
本步骤中,主节点对查询计划进行了拆分,在MPP架构的数据仓库系统,可以由多个计算节点并行处理,共同配合来实现一次查询过程的执行,这种并行处理能够提高查询效率。
例如,如果将一次查询的整个查询计划想象成一个矩形块,那么,可以通过各个片段slice对该矩形块进行横向切分,并通过数据分区Segment对该矩形块进行纵向切分,从而将查询计划切分成很多的片段部分,一个片段部分在横向上对应于某个片段,同时在纵向上对应于某个数据分区。例如,属于同一个数据分区的多个片段部分,可以由主节点分配到一个计算节点上去执行,即一个计算节点上可以运行有多个片段部分,而一个片段中包括的多个片段部分也可以同时运行在多个计算节点,各个计算节点并行处理完成整个查询计划的执行。
在步骤304中,主节点将各个片段分配到各个计算节点并行执行。
例如,主节点可以将查询计划切分为多个片段slice,并将这些片段再分别分配到各个计算节点segment上去执行。计算节点是查询计划的具体执行节点,每个计算节点都有自己对应的存储数据,可以按照主节点分配的查询计划执行,以处理所述存储数据得到查询计划所要的执行结果。
在步骤306中,计算节点中的JIT引擎在执行查询计划时,对于其中的部分查询计划,如果满足JIT处理条件,则执行JIT处理;否则,JIT引擎将部分查询计划发送至非JIT引擎进行处理。
例如,非JIT引擎可以是Postgres数据库执行器。
请继续参见图1,在图1所示的数据仓库系统的各个计算节点中,数据并行和流水线并行可以同时发生。可以想象一下,在任何一个计算节点上,都在进行着如下的处理过程:各个片段slice同时运行着,运行于某个计算节点上的片段,本例子可以暂且称为片段部分,对于其中的一个片段部分,又可以包括逻辑上的不同逻辑操作节点。不同的slice之间也发生着数据的流水线处理,slice1的处理结果向下传输至slice2继续处理,而slice1继续处理尚未处理完成的数据,待处理后仍然继续传输至slice2。
JIT引擎在执行一个部分查询计划(片段部分或者逻辑操作节点)之前,可以预先判断该部分查询计划是否值得被JIT,这即是上面提到的JIT处理条件的判断。比如,图1中所示的最左边的计算节点12中,分别属于slice1和slice2的两个片段部分可以同时运行,JIT引擎可以分别对这两个片段部分进行JIT处理条件的判断。
再者,即使JIT引擎在确定部分查询计划满足JIT处理条件,并开始执行JIT处理,也有可能在执行过程中出现一些状况,这时候有可能会放弃JIT处理切换回非JIT引擎。也就是说,本例子可以在JIT处理过程中,还可以判断是否符合JIT切换条件,若JIT切换条件满足,则放弃JIT,重新切换回非JIT。
再次说明一下,JIT处理条件可以是在对查询计划执行之前,进行是否要JIT与否的判断;当JIT处理条件满足后,开始JIT处理,包括将查询计划编译为机器代码,并执行该机器代码。而在JIT处理过程中,还可以进行JIT切换条件的判断,如果不满足切换条件,还可以重新切换回非JIT。如下列举:
例如,JIT引擎将部分查询计划生成LLVM汇编语言程序时失败,则停止执行所述JIT处理,将所述部分查询计划发送至非JIT引擎处理。
又例如,JIT引擎将部分查询计划生成LLVM汇编语言程序成功,但是在将所述汇编语言程序编译为机器代码时失败,则可以停止执行JIT处理,将部分查询计划发送至所述非JIT引擎。
再例如,JIT引擎已经开始执行机器代码,并得到了部分查询结果,可以称为得到了中间计算结果。如果根据这些中间计算结果,确定采用非JIT执行会更好,比如,假设计算两个集合的交集,中间计算结果得到的第一个集合是空集,那么可以不需要计算第二个集合;或者,基于中间计算结果发现数据分布的特点适合用非JIT处理,那么此时可以放弃JIT,可以认为剩余的查询计划不适合继续执行JIT,不满足JIT切换条件。
上述的这种JIT处理过程中的失败,能够切换回非JIT引擎,从而保证了查询的顺利执行。
通过对各个部分查询计划的JIT判断,以及JIT切换条件的判断,使得在一次查询的过程中,有可能出现的情况是,对于同一个计算节点的各个片段,有的片段采用了JIT,有的片段未采用JIT;或者,在运行在多个计算节点的片段部分中,有的片段部分采用了JIT,有的片段部分未采用JIT。同理,在一个片段部分中,部分逻辑操作节点采用JIT,部分逻辑操作节点未采用JIT。
此外,由上述可以看到,在一次查询中,可能部分查询使用了JIT,部分查询未使用JIT。但是,无论是否采用JIT,本例子的查询方法都要保证查询逻辑的正确执行。举例来说,假设有两个片段,这两个片段之间是流水线处理的关系,一个片段的处理数据要流入到另一个片段继续处理,那么,即使其中一个片段采用了JIT,另一个片段未采用JIT,该方法仍然保证这两个片段之间数据的流动。例如,JIT引擎将查询计划的一个片段执行JIT处理,得到第一执行结果;所述JIT引擎将所述第一执行结果发送至查询计划中的另一个片段,以继续处理所述第一执行结果,所述另一个片段通过非JIT引擎处理。
在步骤308中,计算节点将查询结果返回给主节点。
在步骤310中,主节点向客户端反馈查询结果。
本例子的查询方法,即使开始执行JIT,发生了执行错误,或者不再适合继续JIT,也能够方便的切换回非JIT,保证了查询的顺利执行。
为了实现上述的查询编译方法,本说明书一个或多个实施例还提供了一种查询编译装置。所述装置应用于JIT即时引擎,所述JIT引擎设置于数据仓库中的计算节点,所述数据仓库包括主节点和并行的多个计算节点,每个所述计算节点还包括非JIT引擎。如图4所示,该装置可以包括:条件判断模块41和执行处理模块42。
条件判断模块41,用于在执行部分查询计划之前,判断部分查询计划是否满足JIT处理条件,所述部分查询计划由主节点分配至所述JIT引擎所在的计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
执行处理模块42,用于在所述部分查询计划满足所述JIT处理条件时,对所述部分查询计划执行JIT处理,以得到执行结果;否则,将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划。
在一个例子中,所述部分查询计划,包括如下至少一种:
所述查询计划中包括的一个片段运行于某个数据分区上的片段部分;
或者,所述片段部分中包括的一个逻辑操作节点。
在一个例子中,条件判断模块41,用于在所述部分查询计划的JIT处理时间在预设的时间阈值范围内时,确定所述部分查询计划满足所述JIT处理条件。
在一个例子中,执行处理模块42,还用于若在所述JIT引擎对部分查询计划执行JIT处理的过程中,符合JIT切换条件,则停止执行所述JIT处理,将所述部分查询计划发送至所述非JIT引擎。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述方法实施例所示流程中的各个步骤,其执行顺序不限制于流程图中的顺序。此外,各个步骤的描述,可以实现为软件、硬件或者其结合的形式,例如,本领域技术人员可以将其实现为软件代码的形式,可以为能够实现所述步骤对应的逻辑功能的计算机可执行指令。当其以软件的方式实现时,所述的可执行指令可以存储在存储器中,并被设备中的处理器执行。
例如,对应于上述方法,本说明书一个或多个实施例同时提供一种计算设备,所述计算设备作为数据仓库中的一个计算节点,所述数据仓库包括主节点和并行的多个计算节点。该设备可以包括处理器、存储器、以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器通过执行所述指令,用于实现如下步骤:
在执行部分查询计划之前,判断所述部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述计算设备,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
若所述部分查询计划满足所述JIT处理条件,则对所述部分查询计划执行JIT处理,以得到执行结果;否则,对所述部分查询计划执行非JIT的执行处理。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及CD ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
Claims (17)
1.一种查询编译方法,其特征在于,所述方法应用于JIT即时引擎,所述JIT引擎设置于数据仓库中的计算节点,所述数据仓库包括主节点和并行的多个计算节点,每个所述计算节点还包括非JIT引擎;所述方法包括:
在执行部分查询计划之前,所述JIT引擎判断所述部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述JIT引擎所在的计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
若所述部分查询计划满足所述JIT处理条件,则所述JIT引擎对所述部分查询计划执行JIT处理,以得到执行结果;否则,所述JIT引擎将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划;
JIT处理更快的就采用JIT处理,非JIT处理更快的就放弃JIT;
所述部分查询计划满足所述JIT处理条件,包括:
若所述部分查询计划的JIT处理时间在预设的时间阈值范围内,则确定所述部分查询计划满足所述JIT处理条件;
根据查询计划的大小估算对该查询计划的JIT处理时间,如果查询计划涉及的数据越多,操作越复杂,JIT处理时间越长。
2.根据权利要求1所述的方法,其特征在于,所述部分查询计划,包括如下至少一种:
所述
查询计划中包括的一个片段部分,所述片段部分是运行于一个数据分区上的片段;
或者,所述片段部分中包括的一个逻辑操作节点。
3.根据权利要求2所述的方法,其特征在于,所述JIT引擎对所述部分查询计划执行JIT处理,以得到执行结果,包括:
所述JIT引擎将所述查询计划的一个片段执行所述JIT处理,得到第一执行结果;
所述JIT引擎将所述第一执行结果发送至所述查询计划中的另一个片段,以继续处理所述第一执行结果,所述另一个片段通过所述非JIT引擎处理。
4.根据权利要求1所述的方法,其特征在于,所述JIT引擎对所述部分查询计划执行JIT处理,包括:
所述JIT引擎将所述部分查询计划编译为机器代码,并执行。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述JIT引擎对部分查询计划执行JIT处理的过程中,检测到满足JIT切换条件,则停止执行所述JIT处理,将所述部分查询计划发送至所述非JIT引擎。
6.根据权利要求5所述的方法,其特征在于,
所述满足JIT切换条件,包括:
将所述部分查询计划生成汇编语言程序时失败;
或者,将所述部分查询计划生成汇编语言程序成功,但将所述汇编语言程序编译为机器代码时失败;
或者,根据中间计算结果确定不适合继续执行。
7.根据权利要求1所述的方法,其特征在于,所述非JIT引擎,是Postgres数据库执行器。
8.一种查询编译装置,其特征在于,所述装置应用于JIT即时引擎,所述JIT引擎设置于数据仓库中的计算节点,所述数据仓库包括主节点和并行的多个计算节点,每个所述计算节点还包括非JIT引擎;所述装置包括:
条件判断模块,用于在执行部分查询计划之前,判断部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述JIT引擎所在的计算节点,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
执行处理模块,用于在所述部分查询计划满足所述JIT处理条件时,对所述部分查询计划执行JIT处理,以得到执行结果;否则,将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划;
JIT处理更快的就采用JIT处理,非JIT处理更快的就放弃JIT;
所述条件判断模块,用于在所述部分查询计划的JIT处理时间在预设的时间阈值范围内时,确定所述部分查询计划满足所述JIT处理条件;
根据查询计划的大小估算对该查询计划的JIT处理时间,如果查询计划涉及的数据越多,操作越复杂,JIT处理时间越长。
9.根据权利要求8所述的装置,其特征在于,
所述部分查询计划,包括如下至少一种:
所述查询计划中包括的一个片段部分,所述片段部分是运行于一个数据分区上的片段;
或者,所述片段部分中包括的一个逻辑操作节点。
10.根据权利要求8所述的装置,其特征在于,
所述执行处理模块,还用于若在所述JIT引擎对部分查询计划执行JIT处理的过程中,检测到满足JIT切换条件,则停止执行所述JIT处理,将所述部分查询计划发送至所述非JIT引擎。
11.根据权利要求10所述的装置,其特征在于,
所述满足JIT切换条件,包括:
将所述部分查询计划生成汇编语言程序时失败;
或者,将所述部分查询计划生成汇编语言程序成功,但将所述汇编语言程序编译为机器代码时失败。
12.一种数据仓库系统,其特征在于,所述系统包括:主节点和多个并行的计算节点;每一个所述计算节点包括:JIT引擎和非JIT引擎;
所述主节点,用于接收查询请求,并根据查询请求生成查询计划,将所述查询计划中包括的部分查询计划分配到各个计算节点;
所述计算节点中的JIT引擎,用于在执行所述部分查询计划之前,判断所述部分查询计划是否满足JIT处理条件;若所述部分查询计划满足所述JIT处理条件,则所述JIT引擎对所述部分查询计划执行JIT处理,以得到执行结果;否则,所述JIT引擎将所述部分查询计划发送至非JIT引擎,以使得所述非JIT引擎执行所述部分查询计划;JIT处理更快的就采用JIT处理,非JIT处理更快的就放弃JIT;
所述JIT引擎,在用于判断部分查询计划是否满足所述JIT处理条件时,包括:若所述部分查询计划的JIT处理时间在预设的时间阈值范围内,则确定所述部分查询计划满足所述JIT处理条件;根据查询计划的大小估算对该查询计划的JIT处理时间,如果查询计划涉及的数据越多,操作越复杂,JIT处理时间越长。
13.根据权利要求12所述的系统,其特征在于,
所述部分查询计划,包括如下至少一种:
所述查询计划中包括的片段部分,所述片段部分是运行于一个数据分区上的片段;
或者,所述片段部分中包括的一个逻辑操作节点。
14.根据权利要求12所述的系统,其特征在于,
所述JIT引擎,还用于若在所述JIT引擎对部分查询计划执行JIT处理的过程中,检测到满足JIT切换条件,则停止执行所述JIT处理,将所述部分查询计划发送至所述非JIT引擎。
15.根据权利要求12所述的系统,其特征在于,所述非JIT引擎,是Postgres数据库执行器;所述JIT引擎,是底层虚拟机LLVM JIT编译器。
16.一种计算设备,其特征在于,所述计算设备作为数据仓库中的一个计算节点,所述数据仓库包括主节点和并行的多个计算节点;所述计算设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
在执行部分查询计划之前,判断所述部分查询计划是否满足JIT处理条件,所述部分查询计划由所述主节点分配至所述计算设备,且所述部分查询计划是主节点根据查询请求生成的查询计划的一部分;
若所述部分查询计划满足所述JIT处理条件,则对所述部分查询计划执行JIT处理,以得到执行结果;否则,对所述部分查询计划执行非JIT的执行处理;JIT处理更快的就采用JIT处理,非JIT处理更快的就放弃JIT;
所述部分查询计划满足所述JIT处理条件,包括:
若所述部分查询计划的JIT处理时间在预设的时间阈值范围内,则确定所述部分查询计划满足所述JIT处理条件;
根据查询计划的大小估算对该查询计划的JIT处理时间,如果查询计划涉及的数据越多,操作越复杂,JIT处理时间越长。
17.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现权利要求1所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810298547.2A CN108470072B (zh) | 2018-03-30 | 2018-03-30 | 一种查询编译方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810298547.2A CN108470072B (zh) | 2018-03-30 | 2018-03-30 | 一种查询编译方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108470072A CN108470072A (zh) | 2018-08-31 |
CN108470072B true CN108470072B (zh) | 2019-07-09 |
Family
ID=63262476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810298547.2A Expired - Fee Related CN108470072B (zh) | 2018-03-30 | 2018-03-30 | 一种查询编译方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108470072B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111313905B (zh) * | 2020-02-24 | 2023-10-13 | 南京大学 | 一种浮点数转换方法及装置 |
CN111858657B (zh) * | 2020-07-21 | 2022-02-22 | 威讯柏睿数据科技(北京)有限公司 | 一种基于高频数据处理进行数据并行查询加速的方法和设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104081361A (zh) * | 2012-02-03 | 2014-10-01 | 苹果公司 | 动态编程语言的基于跟踪器的运行时优化 |
CN105511942A (zh) * | 2015-12-02 | 2016-04-20 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN106164862A (zh) * | 2014-04-04 | 2016-11-23 | 高通股份有限公司 | 用于编译器优化的存储器参考元数据 |
-
2018
- 2018-03-30 CN CN201810298547.2A patent/CN108470072B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104081361A (zh) * | 2012-02-03 | 2014-10-01 | 苹果公司 | 动态编程语言的基于跟踪器的运行时优化 |
CN106164862A (zh) * | 2014-04-04 | 2016-11-23 | 高通股份有限公司 | 用于编译器优化的存储器参考元数据 |
CN105511942A (zh) * | 2015-12-02 | 2016-04-20 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
Non-Patent Citations (2)
Title |
---|
基于混合并发模式的Dalvik虚拟机性能优化;李茜 等;《计算机应用》;20120601;第32卷(第6期);第1727-1729,1733页,第1-4节 |
基于虚拟机JIT机制的热点追踪技术的研究与应用;胡作政;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160315(第03(2016)期);第I137-31页 |
Also Published As
Publication number | Publication date |
---|---|
CN108470072A (zh) | 2018-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10540350B2 (en) | Source code search engine | |
Bonawitz et al. | Towards federated learning at scale: System design | |
Narayanan et al. | PipeDream: generalized pipeline parallelism for DNN training | |
CN107491485B (zh) | 生成执行计划的方法、计划单元装置和分布式NewSQL数据库系统 | |
US10171283B2 (en) | Global production rules for distributed data | |
KR20170081239A (ko) | 영향 분석 | |
EP3218820A1 (en) | Lemma mapping to universal ontologies in computer natural language processing | |
US11243958B2 (en) | Implementing contract-based polymorphic and parallelizable SQL user-defined scalar and aggregate functions | |
CN108470072B (zh) | 一种查询编译方法和装置 | |
US9595014B1 (en) | System and method for executing workflow instance and modifying same during execution | |
CN106897123B (zh) | 数据库操作方法及装置 | |
Danelutto et al. | Data stream processing via code annotations | |
CN111767320A (zh) | 数据血缘关系确定方法及装置 | |
Kononov et al. | Quantity-based buffer-constrained two-machine flowshop problem: active and passive prefetch models for multimedia applications | |
US9330372B2 (en) | Generating an improved development infrastructure | |
CN114546583A (zh) | 容器化的计算环境 | |
Liu et al. | Hanayo: Harnessing Wave-like Pipeline Parallelism for Enhanced Large Model Training Efficiency | |
CN111221852A (zh) | 基于大数据的混合查询处理方法及装置 | |
Lukken et al. | Past, present and future of computational storage: A survey | |
CN113495723B (zh) | 一种调用功能组件的方法、装置及存储介质 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
Pérez et al. | A new mathematical model for the workover rig scheduling problem | |
Lai et al. | {GLogS}: Interactive Graph Pattern Matching Query At Large Scale | |
Son et al. | Parallel Job Processing Technique for Real-time Big-Data Processing Framework | |
Hao et al. | Torchbench: Benchmarking pytorch with high api surface coverage |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190709 Termination date: 20210330 |
|
CF01 | Termination of patent right due to non-payment of annual fee |