CN111061760A - 关系型数据库管理系统中的窗口聚合方法、查询方法及装置 - Google Patents
关系型数据库管理系统中的窗口聚合方法、查询方法及装置 Download PDFInfo
- Publication number
- CN111061760A CN111061760A CN201911043816.1A CN201911043816A CN111061760A CN 111061760 A CN111061760 A CN 111061760A CN 201911043816 A CN201911043816 A CN 201911043816A CN 111061760 A CN111061760 A CN 111061760A
- Authority
- CN
- China
- Prior art keywords
- window
- tuple
- relational database
- array
- type
- 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.)
- Granted
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
-
- 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/284—Relational databases
Abstract
本发明提供了一种关系型数据库管理系统中的窗口聚合方法、查询方法及装置,其中,该聚合方法包括:将从原始关系型数据库中的窗口聚合节点的子节点获取的至少一个窗口长度的窗口数据存储至在内存中申请的元组类型的数组中;将元组类型的数组中的所有窗口数据转化为基础数据类型,并将所有基础数据类型的窗口数据存储至在内存中申请的基础数据类型的数组中;通过设定核函数输出窗口函数类型和基础数据类型的数组中的所有窗口数据,以利用外部硬件加速器根据窗口函数类型对窗口数据进行聚合;通过设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中。通过上述方案能够提高窗口聚合操作的执行效率。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种关系型数据库管理系统中的窗口聚合方法、查询方法及装置。
背景技术
随着互联网和电子商务的快速发展,关系型数据库越来越多应用在网络上,并且承担企业业务和信息系统核心的重任,所以愈加面临超大规模数据量和高强度瞬间并发的考验。针对这些问题,对于数据库企业级应用来说,需要执行效率更高的数据库技术,以确保企业利益。
关系型数据库窗口查询可以用于对一定范围内的元组计算聚集函数,比如,计算一个固定时间区间的聚集值,其中,这个时间区间被称为一个窗口。窗口可以重叠,这种情况下一个元组可能对多个窗口都有贡献。例如,使用窗口查询对股票市场的趋势分析进行分析时,需要计算股票在各个时刻的“移动平均线”。窗口查询可能会输入类似“SELECT…,avg(x)OVER(PARTITION BY y)FROM x”的SQL语句,该语句经过查询编译、查询优化、查询执行完成查询功能,该SQL语句的意思是根据y将x分组,然后获取每个x对应分组(也就是窗口)的聚合结果,此处的聚合操作是取平均值。类似的SQL语句关键词还有“preceding”(向前若干行),“following”(向后若干行),“between…and…”(位于一定范围内的若干行)等。在执行这些SQL语句的过程中,最影响执行性能的是执行窗口聚合操作。现有的关系型数据库(如PostgreSQL)是使用一个固定大小的缓存来存储窗口内的数据,对缓存数据执行窗口聚合后得到一个元组的窗口聚合结果,然后继续缓存下一个元组对应的窗口数据,重复上述操作直到所有元组的窗口聚合执行结束。
但是,现有关系型数据库的窗口聚合操作的执行效率仍需进一步提高,从而进一步提高关系型数据库的窗口查询执行性能。
发明内容
本发明提供了一种关系型数据库管理系统中的窗口聚合方法、查询方法及装置,以提高窗口聚合操作的执行效率,进而提高关系型数据库的窗口查询执行性能。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种关系型数据库管理系统中的窗口聚合方法,包括:
将从原始关系型数据库中的一窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中;所述窗口长度为从原始关系型数据库中的窗口长度;
将所述原始关系型数据库元组类型的数组中的所有所述元组窗口数据转化为基础数据类型的元组窗口数据,并将所有所述基础数据类型的元组窗口数据存储至在内存中申请的所述基础数据类型的数组中;
通过设定核函数输出从原始关系型数据库获取的窗口函数类型和所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合;
通过所述设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中元组类型的且用于存储聚合结果的数组中。
根据本发明实施例的另一个方面,还提供了一种关系型数据库管理系统的查询方法,包括:
接收SQL查询语句,并根据所述SQL查询语句进行查询编译,生成查询树;
在所述查询树包含WindowAgg节点的情况下,利用上述实施例所述的窗口聚合方法对所述查询树中的WindowAgg节点中需要窗口聚合的元组窗口数据进行窗口聚合;
基于所述查询树中各WindowAgg节点中需要窗口聚合的元组窗口数据聚合结果完成所述查询树中其余节点的操作,以返回所述SQL查询语句的查询结果。
根据本发明实施例的又一个方面,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。
根据本发明实施例的再一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。
本发明实施例的关系型数据库管理系统中的窗口聚合方法、关系型数据库管理系统的查询方法、电子设备及计算机可读存储介质,能够实现与外部硬件加速器对接,从而能够利用外部硬件加速器加速窗口聚合操作,因此,能够提高窗口聚合操作的执行效率,进而提高关系型数据库的窗口查询执行性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的关系型数据库管理系统中的窗口聚合方法的流程示意图;
图2是本发明一实施例的关系型数据库管理系统的查询方法的流程示意图;
图3是本发明一实施例的SQL语句加速流程示意图;
图4是本发明一实施例的spool_tuples方法的加速流程示意图;
图5是本发明一实施例的eval_windowaggregates方法的加速流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
现有的窗口聚合操作为串行执行方式。通过多线程方式提高数据库的并行度,或者利用相邻元组的缓存窗口数据有重合的特点复用部分窗口数据等方法可以提高窗口聚合的执行效率,但是,受限于线程的数量和缓存的大小,带来的性能提升空间有限。另外,窗口聚合函数相对固定的滑动窗计算模式可以利用专用硬件加速,但是现有数据库不能与GPU(Graphics Processing Unit,图形处理器)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)等硬件加速设备对接,因此无法利用异构系统的优势加速数据库。
对此,本发明实施例提供了一种关系型数据库管理系统中的窗口聚合方法。该窗口聚合方法能够实现关系型数据库与外部硬件加速器对接,从而加速关系型数据库的窗口聚合操作。
图1是本发明一实施例的关系型数据库管理系统中的窗口聚合方法的流程示意图。如图1所示,在一些实施例中,该方法可包括以下步骤S110~步骤S140。
下面将对步骤S110~步骤S140的具体实施方式进行详细说明。
步骤S110:将从原始关系型数据库中的一窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中;所述窗口长度为从原始关系型数据库中的窗口长度。
原始关系型数据库是指,在执行涉及窗口聚合的查询语句时,能够调用由本发明各实施例的窗口聚合方法形成的函数来实现对窗口数据进行聚合,从而返回查询结果的各种关系型数据库。该原始关系型数据库可以是现有的关系型数据库,例如,PostgreSQL数据库、MySQL数据库等。
窗口聚合节点是指关系型数据库在执行查询语句时生成的查询树中的执行计划中的节点,例如,PostgreSQL数据库在执行查询语句,其中的WindowAgg节点(窗口聚合节点)。关系型数据库进行窗口聚合操作的数据是从下层节点获得,相应的,上述子节点是指窗口聚合节点的下层节点,例如,该子节点为窗口聚合节点的左孩子节点。窗口聚合节点的下层节点可以只有一个子节点存储有元组数据,例如,只有左孩子节点存储有元组数据,而右孩子节点为空。从窗口聚合节点的存储有元组数据的子节点可以获取多个元组数据。
查询语句中可以包含一些窗口聚合所需的信息,例如,窗口长度,还可以包含其他窗口聚合所需信息,例如,窗口的滑动步长、窗口函数类型等。关系型数据库在执行查询语句时,执行计划中可以包含该些窗口聚合所需的信息。例如,对于股票价格数据而言,窗口长度可以是一个时间间隔,窗口的滑动步长可以是该实时间隔滑动的时间长度,窗口函数类型可以是求平均。
该步骤S110,即,将从原始关系型数据库中的一窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中,具体地,可包括步骤:S111,获取原始关系型数据库中的一窗口聚合节点的包括窗口数据类型在内的属性信息;S112,根据所述属性信息申请原始关系型数据库元组类型的数组的内存空间并初始化原始关系型数据库元组类型的数组的长度和容量;S113,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中。
该实施例中,申请的数组的类型与原始关系型数据库中的元组的类型一致,可以便于从原始关系型数据库中拷贝元组对应的窗口数据,存储至新申请的内存空间(缓存)中,从而实现原始关系型数据库与本发明实施例的窗口聚合方法的对接。
该步骤S111中,为了申请元组类型的数组,以用于存储元组类型的窗口数据,所需的属性信息至少包括原始关系型数据库中的元组对应的窗口数据的类型,当然,还可以包含其他属性信息,例如,窗口长度。该步骤S112中,不同数据类型的数组所占的空间不同。根据所述属性信息申请原始关系型数据库元组类型的数组的内存空间并初始化原始关系型数据库元组类型的数组的长度和容量,具体地,可以指根据所述属性信息申请原始关系型数据库元组类型的数组的内存空间,并根据所述属性信息初始化数组的长度和/或根据所述属性信息初始化数组的容量,具体地可以根据属性信息的具体信息所影响的数组信息而定。
在一些具体实施例中,上述步骤S111,即,获取原始关系型数据库中的一窗口聚合节点的包括窗口数据类型在内的属性信息,具体地,可包括步骤:S1111,获取原始关系型数据库中的一窗口聚合节点的包括窗口数据类型和窗口长度在内的属性信息。上述步骤S112,即,根据所述属性信息申请原始关系型数据库元组类型的数组的内存空间并初始化原始关系型数据库元组类型的数组的长度和容量,具体地,可包括步骤:S1121,根据所述窗口数据类型和所述窗口长度申请原始关系型数据库元组类型的数组的内存空间,并分别根据所述窗口长度与所述窗口数据类型和所述窗口长度初始化原始关系型数据库元组类型的数组的容量与长度;其中,初始化后的数组的长度大于或等于所述窗口长度。
该实施例中,每个元组对应的窗口数据的类型不同,则所占用的数组的单个存储空间可能不同,欲存储的窗口数据对应的元组数量不同,则数组的长度可能不同,所以,可以根据窗口数据类型和窗口长度为数组申请内存空间,根据窗口长度初始化数组的长度,根据窗口数据类型和窗口长度确定数组的总容量,从而可以使得初始化好的数组至少能够存储一个窗口长度的元组对应的窗口数据。利用新申请的数组至少存储一个窗口长度的元组,使得能够加速对至少一个窗口长度的数据的窗口聚合操作。
上述步骤S113中,每次可以从原始关系型数据库获取一个元组对应的窗口数据,然后存储在申请的元组类型的数组中,以此循环从原始关系型数据库获取元组对应的窗口数据,可以将多个元组对应的窗口数据存储在申请的元组类型的数组中。
在一些实施例中,该步骤S113,即,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中,更具体地,可包括步骤:S1131,从原始关系型数据库中的所述窗口聚合节点的子节点的一个元组获取元组窗口数据;S1132,在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间不小于本次获取的元组窗口数据所需存储空间的情况下,将本次获取的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中。
该实施例中,描述了其中一次获取一个元组对应的窗口数据并存储至申请的元组类型的数组中的过程,所以,并不应理解为是对首次获取元组对应的窗口数据的限定。在其他实施例中,该步骤S113中,可以一次获得多个元组对应的窗口数组。上述步骤S1132中,申请的元组类型的数组尚未满时,获取的元组对应的窗口数据(元组窗口数据)可以存储到数组中。具体实施例中,可以先判断初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间是否不小于本次获取的元组窗口数据所需存储空间,若是,再执行该步骤S1132。
在另一些实施例中,该步骤S113,即,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中的具体实施方式,除了包括上述步骤S1131,还可包括步骤:S1133,在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容;S1134,将本次获取的元组窗口数据存储至扩容后的原始关系型数据库元组类型的数组中。
其中,初始化后的原始关系型数据库元组类型的数组是指已准备好且可以用来存储窗口数据的数组,可以是经过初始化得到的元组类型的数组,或者可以是经过初始化得到的元组类型的数组经过扩容后的数组。换言之,初始化后的原始关系型数据库元组类型的数组并不限定地将数组的内存空间理解为初始的大小。在进行扩容前可以确认一下数组的当前容量没有达到允许的容量上限,以包括数组的内存空间的扩容是允许的;或者在数据量不是很大或者预计一定不会超过容量上限的情况下,可不进行是否达到容量上限的确认或判断。
该实施例中,若申请的元组类型的数组已满,则无法再存储元组对应的窗口数据至当前的数组中,在此情况下,通过对数组的内存空间进行扩容可以继续获取并存储窗口数据。具体实施时,可以是先判断数组当前剩余的内存空间是否已满,若已满,再对数组的内存空间进行扩容后,然后再从原始关系型数据库获取元组对应的窗口数据,并存储到扩容后的数组中。
进一步地,上述步骤S1133,即,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容,具体地,可包括步骤:S113311,将初始化后的原始关系型数据库元组类型的数组的申请内存大小赋值为设定倍数的内存大小;S113312,在保持初始化后的原始关系型数据库元组类型的数组中的原来数据不变的情况下,将初始化后的原始关系型数据库元组类型的数组的原内存空间扩展至设定倍数的内存大小的内存空间。
该实施例中,该设定倍数可以是整数倍,例如,两倍、三倍等,或者可以是大于一的倍数,例如1.5倍、2倍、2.5倍等。通过保持数组中的原来数据不变,对重新赋值后的数组所申请的内存大小,可以将新获取的元组对应的窗口数据存储至新扩展的内存空间中,以此可以减少存储数据占用的计算资源。各次扩容过程均可以采用类似于上述步骤S113311至步骤S113312的方式进行扩容。
在一些实施例中,上述步骤S1134之后,即,将本次获取的元组窗口数据存储至扩容后的原始关系型数据库元组类型的数组中之后,各实施例所述的窗口聚合方法,还可包括步骤:S1135,从原始关系型数据库中的所述窗口聚合节点的子节点的其余元组中的一个元组获取元组窗口数据;S1136,在扩容后的原始关系型数据库元组类型的数组当前剩余的内存空间不小于从其余元组中的一个元组获取的元组窗口数据所需存储空间的情况下,将从其余元组中的一个元组获取的元组窗口数据存储至扩容后的原始关系型数据库元组类型的数组中;S1137,在扩容后的原始关系型数据库元组类型的数组当前剩余的内存空间小于从其余元组中的一个元组获取的元组窗口数据所需存储空间的情况下,若原始关系型数据库元组类型的数组的最新内存空间的大小不超过设定容量上限,对扩容后的原始关系型数据库元组类型的数组的内存空间再次进行扩容,并将从其余元组中的一个元组获取的元组窗口数据存储至再次扩容后的原始关系型数据库元组类型的数组中。
该步骤S1136和该步骤S1137为一次扩容后的数组未满和已满的两种情况。在该步骤S1136和步骤S1137之前,或者也在步骤S1135之前,可以判断经过一次扩容后的数组的剩余内存空间是否已满,若未满,则可执行步骤S1136,将获取的元组对应的窗口数据直接存储在当前数组中,若已满,则可对数组再次进行扩容,并将获取的元组对应的窗口数据存储在再次扩容后的数组中。
步骤S1136~步骤S1137说明可以根据数组的存储情况不断对数组进行扩容,以此,可以逐步扩大数组的内存空间,不仅可以存储更多元组对应的窗口数据,而且可以充分利用开辟的内存空间,减少占用的内存空间空闲的时间。各次扩容过程,扩容空间的大小可以是规则的或不规则的,例如,可以以等差或等比数列的形式扩展内存空间的大小。
该实施例中,可以首先判断扩容后的原始关系型数据库元组类型的数组当前剩余的内存空间是否不小于从其余元组中的一个元组获取的元组窗口数据所需存储空间,若是,则可执行步骤S1135后,再执行步骤S1136,若否,则可执行步骤S1137,进行扩容,然后再执行步骤S1135获取元组对应的窗口数据,存储至再次扩容后的数组中。或者,可以先获取元组对应的窗口数据,再判断数组的内存空间已满,在此情况下,可以将先获取的窗口数据暂存在其他缓存中。
在一些实施例中,上述步骤S1133,即,在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容,具体地,可包括步骤:S113321,在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,若原始关系型数据库元组类型的数组的当前容量未超过设定容量上限,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容。
该实施例中,该设定容量上限可以根据内存的使用情况进行确定。该步骤S113321是在于说明,在每次需要扩容的时候,可以先判断数组的容量是否未超过允许开辟的内存空间上限,若未超过,才可以继续扩容。以此,可以保证数组所占用的内存空间不太影响总体的执行性能。类似地,各次扩容过程中均可以判断数组的容量不能超过设定容量上限,以保证每次扩容都不会超过允许的扩展的内存上限。
在另一些实施例中,上述步骤S1133,可包括步骤:S113322,在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,若原始关系型数据库元组类型的数组的当前容量超过设定容量上限,则暂停获取并存储原始关系型数据库中的所述窗口聚合节点的子节点的其余元组的元组窗口数据。
在数据量非常大的情况下,需要获取的元组对应的窗口数据可能已经超过数组能够扩展的容量上限,在此情况下不再扩容,并且不再获取新的元组对应的窗口数据。
步骤S120:将所述原始关系型数据库元组类型的数组中的所有所述元组窗口数据转化为基础数据类型的元组窗口数据,并将所有所述基础数据类型的元组窗口数据存储至在内存中申请的所述基础数据类型的数组中。
该基础数据类型是指能够被外部硬件加速器识别的数据类型,例如,int型。该外部硬件加速器可以是指执行本发明各实施例的窗口聚合方法的硬件设备(例如,CPU(Central Processing Unit,中央处理器))之外的设备,例如,可以GPU(GraphicsProcessing Unit,图形处理器)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)等加速设备。在内存中申请的基础数据类型的数组可以用来暂存已转化为基础数据类型的窗口数据。
一些情况下,可以通过数据的拷贝将元组类型的数组中的数据提取出来;另一些情况下,若无法通过将元组类型的数组中的数据拷贝出来得到基础数据类型的数据,例如,元组类型的数组中的数据为空,则可以通过定义将非基础数据类型的数据提取至基础数据类型的数组中。
所述基础数据类型的数组可以是在即将需要用到之前申请,或者更早申请。基础数据类型的数组的长度可以根据元组类型的数组的长度确定,例如,两个数组的长度可以相等。基础数据类型的数组容量可以结合数组长度和基础数据类型确定。
通过将元组类型的窗口数据转换为基础数据类型的数据,能够便于外部硬件加速器识别窗口数据,从而便于利用外部硬件加速器来加速窗口聚合操作。
步骤S130:通过设定核函数输出从原始关系型数据库获取的窗口函数类型和所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合。
该设定核函数为所述外部硬件加速器的核函数,包含线程函数,可以根据外部硬件加速器进行编写,以实现利用该加速器进行排序计算。该设定核函数主要是起到外部硬件加速器接口的作用,本发明并不对其具体内容进行限定。
该外部硬件加速器是基于硬件(例如,GPU、FPGA)实现的加速设备,主要是指位于现有关系型数据库之外,可以位于本发明实施例的窗口聚合方法的执行主体(例如,CPU)的外部,属于该执行主体的异构系统的加速器。
查询语句中包含窗口函数类型的信息,进而数据库执行查询语句所生成的查询树中也包含窗口函数类型的信息,所以,可以从原始关系型数据库获取的窗口函数类型。
通过设定核函数输出的窗口函数类型和元组窗口数据(元组对应的窗口数据)可以用于传输给异构系统的加速器进行聚合加速,但本发明实施例的窗口聚合方法主要是针对其执行主体端而言,并不限定本发明实施例的窗口聚合方法的执行主体包括外部硬件加速器。外部硬件加速器所采用的窗口聚合方法可以是各种能够加速窗口聚合的方法,例如,并行窗口聚合方法。
在一些情况下,仅需要对一个窗口的数据进行聚合,则外部硬件加速器可以只根据窗口函数类型对基础数据类型的数组中的元组窗口数据进行窗口聚合。在另一些情况下,需要按一定步长滑动窗口,并对各窗口的元组窗口数据进行窗口聚合。
在一些实施例中,该步骤S130,具体地,可包括步骤:S131,通过设定核函数输出从原始关系型数据库获取的所述窗口长度、从原始关系型数据库获取的滑动步长、从原始关系型数据库获取的窗口函数类型、及所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口长度、所述滑动步长及所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合。
其中,窗口长度、滑动步长及窗口函数类型的信息可以根据查询语句得到,所以可以从原始关系型数据库中的查询树中的执行计划中得到。
该实施例中,可以利用外部硬件加速器进行滑动聚合操作,从而实现对滑动窗口内数据的聚合进行加速。
步骤S140:通过所述设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中元组类型的且用于存储聚合结果的数组中。
该设定核函数不仅可以用于输出外部硬件加速器进行窗口聚合所需的数据,还可以用于返回外部硬件加速器的窗口聚合结果。返回的窗口聚合结果为基础数据类型聚合结果。对于原始关系型数据库其原窗口聚合函数可以对应有用于存储聚合结果的数组,所以,可以将该步骤S140中的窗口聚合结果赋值到原窗口聚合函数对应的用于存储聚合结果的数组中,从而便于返回查询结果。
在一些实施例中,上述步骤S140之前或之后,即,通过所述设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中元组类型的且用于存储聚合结果的数组中之前或之后,各实施例所述的窗口聚合方法,还可包括步骤:S150,在原始关系型数据库中的所述窗口聚合节点的子节点中尚有剩余元组的元组窗口数据未被获取出的情况下,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的剩余元组的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中;S160,将所述原始关系型数据库元组类型的数组中的所有所述剩余元组的元组窗口数据转化为基础数据类型的元组窗口数据,并将所有所述基础数据类型的元组窗口数据存储至在内存中申请的所述基础数据类型的数组中;S170,通过所述设定核函数输出所述基础数据类型的数组中的所有元组窗口数据,以利用所述外部硬件加速器根据所述窗口函数类型对基础数据类型的数组中的所有元组窗口数据进行窗口聚合。
由于申请的元组类型的数组的内存空间有限,在包含扩容过程的实施例中,数组能够扩展的内存空间不能超过设定容量上限,所以,如果需要进行窗口聚合的数据量过大,可能无法将子节点中所有元组对应的窗口数据存储至申请的元组类型的数组中。在此情况下,可以将数组所能存储的所有窗口数据转化为基础数据类型后传输给外部硬件加速器进行加速。其余的元组对应的窗口数据可以通过上述步骤S150至步骤S170再次进行获取,转换为基础数据类型,并传输给外部硬件加速器进行加速窗口聚合,之前已传输至加速器的参数(例如,窗口函数类型、窗口长度、滑动步长等)若本次聚合仍需用到,可以不必重新传输。
该步骤S150的具体实施方式可以参照上述关于获取元组的窗口数据的步骤实施,例如,步骤S1133和S1134,或者可以是其具体实施方式的步骤。
该实施例中,通过对剩余窗口数据采用类似的方式再次进行加速聚合,即使缓存空间不够大,也能够尽可能实现窗口聚合加速。
进一步地,上述步骤S150之前,和/或,上述步骤S170之后,即,在原始关系型数据库中的所述窗口聚合节点的子节点中尚有剩余元组的元组窗口数据未被获取出的情况下,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的剩余元组的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中之前,和/或,通过所述设定核函数输出所述基础数据类型的数组中的所有元组窗口数据,以利用所述外部硬件加速器根据所述窗口函数类型对基础数据类型的数组中的所有元组窗口数据进行窗口聚合之后,各实施例所述的窗口聚合方法,还可包括步骤:S180,释放在内存中申请的所述原始关系型数据库元组类型的数组的内存空间和在内存中申请的所述基础数据类型的数组的内存空间,并将相应的数组指针置空。
各实施例中,申请的数组(元组类型或基础数据类型),在使用完之后,释放其内存空间并将指针置空,能够防止内存泄漏和野指针。
第一次加速聚合过程(如上述步骤S110~S140或步骤S110~S130)中申请的元组类型的数组和基础数据类型的数据,在使用完之后可以直接释放并将指针置空;或者,清除之前数组中的数据,或者通过覆盖的方式,用作对剩余窗口数据的加速聚合过程(如上述步骤S150~S170)中的数组。
在一些实施例中,为了解决原始关系型数据库处理窗口聚合操作不高效,尤其是无法利用异构系统提高性能的问题。可以通过对原始关系型数据库进行改进,实现对窗口聚合操作的加速。可以通过两种方式解决该问题,缓存扩容和窗口聚合操作的专用硬件加速。示例性地,窗口聚合方法可包括以下步骤S1~S4。
S1,判断SQL语句是否用到窗口函数,即查询计划中是否包含窗口聚合节点(WindowAgg节点)。
S2,使用缓存扩容方法代替原有数据库中获取下层节点数据的方法。(窗口聚合操作的数据从下层节点获得,原始数据库每次只获取当前元组对应的窗口数据,执行窗口聚合后再从下一节点获取新的数据,该方法既不利于后续的异构系统加速,也没有充分利用内存空间。)
上述步骤S2具体可以包括以下子步骤S21~S24:
S21,获取当前窗口聚合节点窗口长度,数据类型等属性信息,同时根据这些信息动态申请元组类型数组的内存空间,即缓存空间,并初始化长度以及容量;
S22,窗口聚合节点循环地从左孩子获取每个元组对应的窗口数据,通过内存拷贝函数拷贝到申请的内存空间中,每一次拷贝前判断是否超出初始申请的内存容量;
S23,如果超过内存容量,则对之前申请的内存进行扩容,将超出的数据拷贝到扩容后的缓存;扩容的方法为:保持已有数据不变,将申请内存大小赋值为当前缓存容量的两倍,使用重分配函数将原缓存扩展,缓存内元组数量扩容到设定好的容量上限时停止扩容;
S24,当缓存容量达到上限或者所有元组对应的窗口数据都已拷贝到缓存中时,执行后续步骤S3;
S3,提供异构加速接口,利用专用硬件加速窗口聚合函数。
上述步骤S3具体可以包括以下子步骤S31~S34:
S31,申请数组内存空间,用以保存加速计算用的字段和一些属性,比如是否为空或者长度等,将S2中的缓存数据全部转化为基础数据类型,并拷贝到新申请的数据内存空间中,形成基础数据类型的窗口数据;
S32,释放S2申请的缓存空间并置空指针,防止内存泄漏和野指针;
S33,编写支持异构加速器的窗口聚集核函数,将S31中内存获取的基础类型数据作为参数传给核函数,核函数将只包含基础数据类型的窗口数据和窗口函数类型通过PCIE(Peripheral Component Interconnect Express,高速串行计算机扩展总线)等接口传输给异构加速器加速;
S34,异构加速器将直接返回窗口聚合函数的基础数据类型结果,将该加速器结果赋值到数据库原函数存储结果的元组类型的数组中,完成当前轮次的数据对接。
S4,判断是否仍有待处理的窗口数据(即当所有需要处理的窗口数据大于申请的缓存空间设定上限时),如果有,则重复S2和S3,直到处理完所有元组的窗口聚合操作,否则回收内存并将指针置空,窗口聚合加速完成。
基于图1所示的关系型数据库管理系统中的窗口聚合方法,本发明实施例还提供了一种关系型数据库管理系统的查询方法。
图2是本发明一实施例的关系型数据库管理系统的查询方法的流程示意图。如图2所示,一些实施例的关系型数据库管理系统的查询方法,可包括:
步骤S210:接收SQL查询语句,并根据所述SQL查询语句进行查询编译,生成查询树;
步骤S220:在所述查询树包含WindowAgg节点的情况下,利用上述实施例所述的窗口聚合方法对所述查询树中的WindowAgg节点中需要窗口聚合的元组窗口数据进行窗口聚合;
步骤S230:基于所述查询树中各WindowAgg节点中需要窗口聚合的元组窗口数据聚合结果完成所述查询树中其余节点的操作,以返回所述SQL查询语句的查询结果。
该步骤S210中,该SQL查询语句若为需要窗口聚合的操作,则编译生成的查询树可包含WindowAgg节点,此时,可以采用上述各实施例所述的窗口聚合方法加速窗口聚合操作,具体实施方式可以参照上述各实施例的进行,故重复之处不再赘述。该步骤S220之前可以判断查询树是否包含WindowAgg节点。
在一些实施例中,图2所示的关系型数据库管理系统的查询方法,还可包括步骤:S240,在所述查询树不包含WindowAgg节点的情况下,利用原始关系型数据库中的原始查询方法完成所述查询树中的各节点的操作,以返回所述SQL查询语句的查询结果。在不包含WindowAgg节点的情况下,查询操作不涉及窗口聚合操作,则可按原方法执行查询操作。
另外,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述各实施例所述的窗口聚合方法或者上述各实施例所述的查询方法的步骤。该电子设备可以为计算机、服务器等。
在一些实施例中,所述的电子设备,还可包括:外部硬件加速器。其中,该外部硬件加速器可以包括GPU或FPGA。该实施例中,加速窗口聚合所用的外部硬件加速器术语电子设备的一部分。在实施时,可以将外部硬件加速器集成至前述实施例所述的电子设备(如服务器)中。
此外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述各实施例所述的窗口聚合方法或者上述各实施例所述的查询方法的步骤。对于该窗口聚合方法而言,该计算机可读存储介质可以对接现有的关系型数据库,从而能够在不太影响现有关系型数据库的情况下对其窗口聚合操作进行加速。对于该查询方法,计算机可读存储介质可以包含现有的关系型数据库管理系统和上述窗口聚合方法对应的计算机可读存储介质。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
图3是本发明一实施例的SQL语句加速流程示意图。图4是本发明一实施例的spool_tuples方法的加速流程示意图。图5是本发明一实施例的eval_windowaggregates方法的加速流程示意图。
参见图3至图5,以PostgreSQL关系型数据库为例,一具体实施例中,加速SQL语句执行过程的方法可包括以下步骤:
步骤一,首先确定SQL语句是否用到窗口函数,其执行计划是否用到WindowAgg节点,没有用到正常按照源码执行,用到WindowAgg节点并且涉及数据量很大的情况按照加速方法执行,跳到步骤二;
步骤二,对PostgreSQL源码中的spool_tuples函数基于源码进行修改,从下层节点一次性获取多个元组所需的窗口数据,为加速器加速多个元组的窗口聚合操作做数据准备;
该步骤二可包括以下子步骤一~子步骤四:
子步骤一,获取当前窗口聚合节点窗口长度,数据类型等属性信息,同时根据这些信息动态申请元组类型数组的内存空间,即缓存空间,并初始化长度以及容量;
子步骤二,窗口聚合节点循环地从左孩子节点获取每个元组对应的窗口数据,通过memcpy函数拷贝到申请的内存空间中,每一次拷贝前判断是否超出初始申请的内存容量;
子步骤三,如果超过内存容量,则对之前申请的内存进行扩容。扩容的方法为:保持已有数据不变,将申请内存大小赋值为当前缓存容量的两倍,使用realloc函数将原缓存扩展,缓存内元组数量扩容到INT_MAX时停止扩容;
子步骤四,当缓存容量达到上限或者所有元组对应的窗口数据都已拷贝到缓存中时,执行步骤三;
步骤三,对PostgreSQL源码中的eval_windowaggregates函数进行加速,基于源码修改,提供加速器接口,修改后的函数输入为步骤二的缓存数组,输出为聚合结果数据;
该步骤三可包括以下子步骤一~四:
子步骤一,申请数组内存空间,用以保存加速计算用的字段和一些属性,比如是否为空或者长度等,借助datumcopy函数将步骤二中的缓存数据全部转化为基础数据类型,并拷贝到新申请的数据内存空间中,形成基础数据类型的窗口数据;
子步骤二,释放步骤二申请的缓存空间并置空指针,防止内存泄漏和野指针;
子步骤三,编写支持异构加速器的窗口聚集核函数,将子步骤一中内存获取的基础类型数据作为参数传给核函数,核函数将只包含基础数据类型的窗口数据和窗口函数类型通过PCIE等接口传输给异构加速器加速;
子步骤四,异构加速器将直接返回窗口聚合函数的基础数据类型结果,将该加速器结果赋值到数据库原函数存储结果的resultvalue数组中,完成当前轮次的数据对接;
步骤四,判断是否仍有待处理的窗口数据(即当所有需要处理的窗口数据大于申请的缓存空间上限INT_MAX时),如果有,则重复步骤二和步骤三,直到处理完所有元组的窗口聚合操作,否则回收内存并将指针置空,窗口聚合加速完成。
本实施例,能够解决PostgreSQL数据库中的WindowAgg节点无法支持外部加速器进行并行的下层元组获取和无法在实现窗口函数中数据计算中并行加速的问题。本实施例的实际效果包括:当SQL语句包含窗口聚合函数并且数据库中涉及的数据很多,需要用到外部文件存储时,计算中的数据量可以忽略线程开销,利用可以并行计算的模拟kernel加速器,可以获得原数据库两倍以上的执行性能。如果提供外部加速器,例如GPU,FPGA等专用硬件加速器,将进一步显著提高原数据库执行窗口聚合操作的速度。
综上所述,本发明实施例的关系型数据库管理系统中的窗口聚合方法、关系型数据库管理系统的查询方法、电子设备及计算机可读存储介质,通过将从原始关系型数据库中的一窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中,将所述原始关系型数据库元组类型的数组中的所有所述元组窗口数据转化为基础数据类型的元组窗口数据,并将所有所述基础数据类型的元组窗口数据存储至在内存中申请的所述基础数据类型的数组中,通过设定核函数输出从原始关系型数据库获取的窗口函数类型和所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合,通过所述设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中元组类型的且用于存储聚合结果的数组中,能够实现与外部硬件加速器对接,从而能够利用外部硬件加速器加速窗口聚合操作,因此,能够提高窗口聚合操作的执行效率,进而提高关系型数据库的窗口查询执行性能。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种关系型数据库管理系统中的窗口聚合方法,其特征在于,包括:
将从原始关系型数据库中的一窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中;所述窗口长度为从原始关系型数据库中的窗口长度;
将所述原始关系型数据库元组类型的数组中的所有所述元组窗口数据转化为基础数据类型的元组窗口数据,并将所有所述基础数据类型的元组窗口数据存储至在内存中申请的所述基础数据类型的数组中;
通过设定核函数输出从原始关系型数据库获取的窗口函数类型和所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合;
通过所述设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中元组类型的且用于存储聚合结果的数组中。
2.如权利要求1所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,将从原始关系型数据库中的一窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中,包括:
获取原始关系型数据库中的一窗口聚合节点的包括窗口数据类型在内的属性信息;
根据所述属性信息申请原始关系型数据库元组类型的数组的内存空间并初始化原始关系型数据库元组类型的数组的长度和容量;
将从原始关系型数据库中的所述窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中。
3.如权利要求2所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中,包括:
从原始关系型数据库中的所述窗口聚合节点的子节点的一个元组获取元组窗口数据;
在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间不小于本次获取的元组窗口数据所需存储空间的情况下,将本次获取的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中。
4.如权利要求3所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的至少一个窗口长度的元组窗口数据存储至初始化后的原始关系型数据库元组类型的数组中,还包括:
在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容;
将本次获取的元组窗口数据存储至扩容后的原始关系型数据库元组类型的数组中。
5.如权利要求4所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容,包括:
将初始化后的原始关系型数据库元组类型的数组的申请内存大小赋值为设定倍数的内存大小;
在保持初始化后的原始关系型数据库元组类型的数组中的原来数据不变的情况下,将初始化后的原始关系型数据库元组类型的数组的原内存空间扩展至设定倍数的内存大小的内存空间。
6.如权利要求4所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,将本次获取的元组窗口数据存储至扩容后的原始关系型数据库元组类型的数组中之后,还包括:
从原始关系型数据库中的所述窗口聚合节点的子节点的其余元组中的一个元组获取元组窗口数据;
在扩容后的原始关系型数据库元组类型的数组当前剩余的内存空间不小于从其余元组中的一个元组获取的元组窗口数据所需存储空间的情况下,将从其余元组中的一个元组获取的元组窗口数据存储至扩容后的原始关系型数据库元组类型的数组中;
在扩容后的原始关系型数据库元组类型的数组当前剩余的内存空间小于从其余元组中的一个元组获取的元组窗口数据所需存储空间的情况下,若原始关系型数据库元组类型的数组的最新内存空间的大小不超过设定容量上限,对扩容后的原始关系型数据库元组类型的数组的内存空间再次进行扩容,并将从其余元组中的一个元组获取的元组窗口数据存储至再次扩容后的原始关系型数据库元组类型的数组中。
7.如权利要求4所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容,包括:
在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,若原始关系型数据库元组类型的数组的当前容量未超过设定容量上限,对初始化后的原始关系型数据库元组类型的数组的内存空间进行扩容。
8.如权利要求7所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,还包括:
在初始化后的原始关系型数据库元组类型的数组当前剩余的内存空间小于本次获取的元组窗口数据所需存储空间的情况下,若原始关系型数据库元组类型的数组的当前容量超过设定容量上限,则暂停获取并存储原始关系型数据库中的所述窗口聚合节点的子节点的其余元组的元组窗口数据。
9.如权利要求1至8任一项所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,通过所述设定核函数接收返回的基础数据类型的窗口聚合结果,并将窗口聚合结果赋值到原始关系型数据库中元组类型的且用于存储聚合结果的数组中之前或之后,还包括:
在原始关系型数据库中的所述窗口聚合节点的子节点中尚有剩余元组的元组窗口数据未被获取出的情况下,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的剩余元组的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中;
将所述原始关系型数据库元组类型的数组中的所有所述剩余元组的元组窗口数据转化为基础数据类型的元组窗口数据,并将所有所述基础数据类型的元组窗口数据存储至在内存中申请的所述基础数据类型的数组中;
通过所述设定核函数输出所述基础数据类型的数组中的所有元组窗口数据,以利用所述外部硬件加速器根据所述窗口函数类型对基础数据类型的数组中的所有元组窗口数据进行窗口聚合。
10.如权利要求9所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,在原始关系型数据库中的所述窗口聚合节点的子节点中尚有剩余元组的元组窗口数据未被获取出的情况下,将从原始关系型数据库中的所述窗口聚合节点的子节点获取的剩余元组的元组窗口数据存储至在内存中申请的原始关系型数据库元组类型的数组中之前,和/或,通过所述设定核函数输出所述基础数据类型的数组中的所有元组窗口数据,以利用所述外部硬件加速器根据所述窗口函数类型对基础数据类型的数组中的所有元组窗口数据进行窗口聚合之后,还包括:
释放在内存中申请的所述原始关系型数据库元组类型的数组的内存空间和在内存中申请的所述基础数据类型的数组的内存空间,并将相应的数组指针置空。
11.如权利要求2所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,
获取原始关系型数据库中的一窗口聚合节点的包括窗口数据类型在内的属性信息,包括:
获取原始关系型数据库中的一窗口聚合节点的包括窗口数据类型和窗口长度在内的属性信息;
根据所述属性信息申请原始关系型数据库元组类型的数组的内存空间并初始化原始关系型数据库元组类型的数组的长度和容量,包括:
根据所述窗口数据类型和所述窗口长度申请原始关系型数据库元组类型的数组的内存空间,并分别根据所述窗口长度与所述窗口数据类型和所述窗口长度初始化原始关系型数据库元组类型的数组的容量与长度;其中,初始化后的数组的长度大于或等于所述窗口长度。
12.如权利要求1所述的关系型数据库管理系统中的窗口聚合方法,其特征在于,通过设定核函数输出从原始关系型数据库获取的窗口函数类型和所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合,包括:
通过设定核函数输出从原始关系型数据库获取的所述窗口长度、从原始关系型数据库获取的滑动步长、从原始关系型数据库获取的窗口函数类型、及所述基础数据类型的数组中的所有所述元组窗口数据,以利用能够识别所述基础数据类型的外部硬件加速器根据所述窗口长度、所述滑动步长及所述窗口函数类型对所述基础数据类型的数组中的所有所述元组窗口数据进行窗口聚合。
13.一种关系型数据库管理系统的查询方法,其特征在于,包括:
接收SQL查询语句,并根据所述SQL查询语句进行查询编译,生成查询树;
在所述查询树包含WindowAgg节点的情况下,利用如权利要求1至12任一项所述的窗口聚合方法对所述查询树中的WindowAgg节点中需要窗口聚合的元组窗口数据进行窗口聚合;
基于所述查询树中各WindowAgg节点中需要窗口聚合的元组窗口数据聚合结果完成所述查询树中其余节点的操作,以返回所述SQL查询语句的查询结果。
14.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至13任一项所述方法的步骤。
15.如权利要求14所述的电子设备,其特征在于,还包括:外部硬件加速器。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至13任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911043816.1A CN111061760B (zh) | 2019-10-30 | 2019-10-30 | 关系型数据库管理系统中的窗口聚合方法、查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911043816.1A CN111061760B (zh) | 2019-10-30 | 2019-10-30 | 关系型数据库管理系统中的窗口聚合方法、查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061760A true CN111061760A (zh) | 2020-04-24 |
CN111061760B CN111061760B (zh) | 2020-12-15 |
Family
ID=70297633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911043816.1A Active CN111061760B (zh) | 2019-10-30 | 2019-10-30 | 关系型数据库管理系统中的窗口聚合方法、查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061760B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05128164A (ja) * | 1990-03-27 | 1993-05-25 | Internatl Business Mach Corp <Ibm> | データベース処理装置 |
CN108664596A (zh) * | 2012-10-02 | 2018-10-16 | 甲骨文国际公司 | 用于表扫描加速的硬件 |
CN110109925A (zh) * | 2019-04-23 | 2019-08-09 | 安徽云融信息技术有限公司 | 一种基于HBase的海量能耗数据存储系统 |
CN110287212A (zh) * | 2019-06-27 | 2019-09-27 | 浪潮商用机器有限公司 | 一种数据业务处理方法、系统及相关组件 |
-
2019
- 2019-10-30 CN CN201911043816.1A patent/CN111061760B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05128164A (ja) * | 1990-03-27 | 1993-05-25 | Internatl Business Mach Corp <Ibm> | データベース処理装置 |
CN108664596A (zh) * | 2012-10-02 | 2018-10-16 | 甲骨文国际公司 | 用于表扫描加速的硬件 |
CN110109925A (zh) * | 2019-04-23 | 2019-08-09 | 安徽云融信息技术有限公司 | 一种基于HBase的海量能耗数据存储系统 |
CN110287212A (zh) * | 2019-06-27 | 2019-09-27 | 浪潮商用机器有限公司 | 一种数据业务处理方法、系统及相关组件 |
Non-Patent Citations (2)
Title |
---|
BAGHERI HARIRI B, CALVANESE D, DE GIACOMO G, ET AL.: "Verification of relational data-centric dynamic systems with external services", 《PROCEEDINGS OF THE 32ND ACM SIGMOD-SIGACT-SIGAI SYMPOSIUM ON PRINCIPLES OF DATABASE SYSTEMS》 * |
任晓鸽: "基于NetCDF的RTM数据分类聚合研究", 《中国优秀硕士学位论文全文数据库基础科学辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN111061760B (zh) | 2020-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11182204B2 (en) | System and method for batch evaluation programs | |
Venkataraman et al. | Sparkr: Scaling r programs with spark | |
US9471370B2 (en) | System and method for stack-based batch evaluation of program instructions | |
US8286198B2 (en) | Application programming interfaces for data parallel computing on multiple processors | |
US9996394B2 (en) | Scheduling accelerator tasks on accelerators using graphs | |
CN108205469B (zh) | 一种基于MapReduce的资源分配方法及服务器 | |
EP3126971A1 (en) | Program execution on heterogeneous platform | |
US10691597B1 (en) | Method and system for processing big data | |
US20220179859A1 (en) | Duplication elimination in depth based searches for distributed systems | |
US11720561B2 (en) | Dynamic rebuilding of query execution trees and reselection of query execution operators | |
CN114443680A (zh) | 数据库管理系统、相关装置、方法和介质 | |
US9298769B1 (en) | Method and apparatus to facilitate discrete-device accelertaion of queries on structured data | |
CN111061760B (zh) | 关系型数据库管理系统中的窗口聚合方法、查询方法及装置 | |
US20230097765A1 (en) | Pseudorandom Thread Generation | |
CN110196879B (zh) | 数据处理方法、装置、计算设备及存储介质 | |
CN111026776B (zh) | 关系型数据库中的查询方法及装置 | |
US10732946B2 (en) | Simulation-based code duplication | |
US9519671B1 (en) | Folding pair of adjacent indices based on optimum quantity of induces for parallel processing | |
CN105518664B (zh) | 管理数据库节点 | |
CN110928875B (zh) | 关系型数据库管理系统中的元组排序方法、查询方法及装置 | |
CN114078143B (zh) | 用于射线跟踪的相干性聚集 | |
US20240095083A1 (en) | Parallel workload scheduling based on workload data coherence | |
Shu-jun et al. | The Application of Fast Pruning Algorithm Under Map/ReduceTask Scheduling | |
Jadhav | Comparing Performance of Spark and Flink on Batch and Streaming Data | |
Howe et al. | Beyond MapReduce: New Requirements for Scalable Data Processing |
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 |