CN110928875B - 关系型数据库管理系统中的元组排序方法、查询方法及装置 - Google Patents
关系型数据库管理系统中的元组排序方法、查询方法及装置 Download PDFInfo
- Publication number
- CN110928875B CN110928875B CN201910981210.6A CN201910981210A CN110928875B CN 110928875 B CN110928875 B CN 110928875B CN 201910981210 A CN201910981210 A CN 201910981210A CN 110928875 B CN110928875 B CN 110928875B
- Authority
- CN
- China
- Prior art keywords
- tuple
- array
- relational database
- sorting
- original
- 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.)
- Active
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- 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/242—Query formulation
- G06F16/2433—Query languages
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种关系型数据库管理系统中的元组排序方法、查询方法及装置,其中,该排序方法包括:将从原结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,以及将从原结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中;通过设定核函数输出存储的元组排序所用数据,以利用外部硬件加速器对元组排序所用数据进行排序计算;接收通过设定核函数返回的排序计算结果,并依据排序计算结果,并利用申请的元组数组中的元组向原元组数组进行赋值,以排序原结构体中的元组。通过上述方案,本发明能够提高关系型数据库管理系统的执行效率。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种关系型数据库管理系统中的元组排序方法、查询方法及装置。
背景技术
随着互联网和电子商务的快速发展,关系型数据库越来越多应用在网络上,并且承担企业业务和信息系统核心的重任,所以愈加面临超大规模数据量和高强度瞬间并发的考验。针对这些问题,对于数据库企业级应用来说,需要执行效率更高的数据库技术,以确保企业利益。
关系型数据库在执行如包含order by,group by等SQL语句时,会经过查询编译、查询优化、查询执行完成要查询的SQL语句,在这一过程中,最影响执行性能的是排序过程。现有关系型数据库(如postgreSQL,MySQL等)主要通过两种模式执行排序过程:迭代模式(iterator)和物化模式(materialization)。迭代模式的方法每次返回一个元组,需要不同操作符之间进行多次协调,执行效率不高;而物化模式是一次性处理所有数据,当数据量大于元组内存时,会造成内存不足(out of memory)的问题。
发明内容
本发明提供一种关系型数据库管理系统中的元组排序方法、查询方法及装置,以提高关系型数据库管理系统的执行效率。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种关系型数据库管理系统中的元组排序方法,包括:
将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,以及将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中;
通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算;
接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组。
根据本发明实施例的另一个方面,还提供了一种关系型数据库管理系统的查询方法,包括:
接收SQL查询语句,并根据所述SQL查询语句进行查询编译,生成查询树;
在所述查询树包含Sort节点的情况下,利用上述实施例所述的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序;
基于所述查询树中各Sort节点中需要排序的元组的排序结果完成所述查询树中其余节点的操作,以返回所述SQL查询语句的查询结果。
根据本发明实施例的又一个方面,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。
根据本发明实施例的再一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。
本发明实施例的关系型数据库管理系统中的元组排序方法、关系型数据库管理系统的查询方法、电子设备及计算机可读存储介质,能够实现利用异构系统的加速设备实现结构体中元组的加速排序。能够解决现有数据库的节点无法支持外部加速器进行排序的问题,在对原数据库修改较小的情况下,提高了数据库的排序速度,进而提高了查询语句的执行效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的关系型数据库管理系统中的元组排序方法的流程示意图;
图2是本发明一实施例的关系型数据库管理系统的查询方法的流程示意图;
图3是本发明一实施例的SQL语句查询的加速流程示意图;
图4是本发明一实施例的Sort节点加速流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
现有关系型数据库管理系统中的元组排序方法一般都是单线程排序方法。通过加速器排序能够提高元组排序的速度。但是,关系型数据库的两种执行模式都存在无法与外部硬件加速器设备对接的问题,因此,无法利用异构系统的优势加速关系型数据库的查询过程。
例如,PostgreSQL数据库在进行查询编译时,会生成一棵查询树,查询树中每一个节点都会从下层节点获取数据。其中,物化节点中的Sort节点可以起到缓存底层元组并且排序的功能,而物化节点是一种缓存元组的节点,共有九种,每一个物化节点都是通过一个存储结构体去存储数据,且存储结构有两种,一种是tuplestore,另一种是tuplesort。从下层节点获取数据之后会调用存储结构体文件中的函数来改变存储结构。存储结构内部有内存缓存数组和外部存储所需要的文件指针,源码文件还包含对存储结构操作的函数,例如,Sort节点的存储结构体文件包含了内存排序和外存排序的方法。通过Sort节点,PostgreSQL数据库在查询执行过程中缓存排好序的元组。
Sort节点的排序方法一般有两种,一种是将节点放入内存数组中在没有超过最大容量的前提下进行内部排序,另一种是超过内存数组缓存上限通过外部文件进行外排序。但是这两种排序方法都是单线程排序,在需要排序的元组很多时,忽略线程创建开销,通过并行排序可以明显提高SQL语句的执行速度。但是PostgreSQL提供的都是单线程排序方法,即使外界可以提供并行条件,数据库还是无法支持排序方法,存在很大的性能提高空间。通过对PostgreSQL添加可以对接外部加速器的接口函数,能够利用外部加速器提供的并行计算对数据库进行加速,但是,迭代和物化执行模式都不能与GPU、FPGA等硬件加速设备对接,因此无法利用异构系统的优势加速数据库。
对此,本发明提供了一种关系型数据库管理系统中的元组排序方法,能够实现关系型数据库与外部加速器设备对接,从而实现加速关系型数据库管理系统中的元组排序过程。
图1是本发明一实施例的关系型数据库管理系统中的元组排序方法的流程示意图,如图1所示,在一些实施例中,该方法可包括以下步骤S110~步骤S130。
下面将对步骤S110~步骤S130的具体实施方式进行详细说明。
步骤S110:将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,以及将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中。
原始关系型数据库是指,在执行涉及排序的查询语句时,能够调用由本发明各实施例的排序方法形成的函数来实现对其元组进行排序,从而返回查询结果的各种关系型数据库。该原始关系型数据库可以是现有的关系型数据库,例如,PostgreSQL数据库、MySQL数据库等。关系型数据库中的存储结构体可以用于存储元组数据,每个物化节点可以用一个存储结构体存储元组数据,例如,PostgreSQL数据库中的存储结构体可以包含tuplestore和tuplesort两种。
结构体中可以存储有多个元组,每个元组可以包含一种或多种键值。元组排序所用数据可以包括一种或多种键值,在包含多种键值的情况下,元组排序所用数据还可包含其他信息,例如,键值的属性信息。
该基础数据类型是指能够被外部硬件加速器识别的数据类型,例如,int型。该外部硬件加速器可以是指执行本发明各实施例的元组排序方法的硬件设备(例如,CPU(Central Processing Unit,中央处理器))之外的设备,例如,可以GPU(GraphicsProcessing Unit,图形处理器)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)等加速设备。在内存中申请的基础数据类型的数组可以用来暂存元组排序所用数据,其中,数组的数量可以根据元组排序所用数据的内容和所需的存储方式来确定。
通过在内存中新申请基础数据类型的数组来存储从结构体中提取出的元组排序所用数据,可以将结构体类型的数据转换为硬件加速器能够识别的基础数据类型的数据,从而能够实现原始关系型数据库向外部硬件加速器传输数据时的对接。
在内存中新申请的元组数组的类型与原始关系型数据库结构体类型相同,即与原始关系型数据库结构体中的原元组数组的类型相同,以此,可以便于经由步骤S130中实现外部硬件加速器返回的排序结果后与原始关系型数据库对接。
另外,将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中的步骤,与将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中的步骤,两者执行的先后顺序不做限定,而且,这两个步骤并不一定都在步骤S120、步骤S130等之前,只要将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中的步骤在步骤S120之前执行,且将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中的步骤在执行步骤S130中的利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值的步骤之前即可。
步骤S120:通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算。
该步骤S120中,该设定核函数为所述外部硬件加速器的核函数,包含线程函数,可以根据外部硬件加速器进行编写,以实现利用该加速器进行排序计算。该设定核函数主要是起到外部硬件加速器接口的作用,本发明并不对其具体内容进行限定。
该外部硬件加速器是基于硬件(例如,GPU、FPGA)实现的加速设备,主要是指位于现有关系型数据库之外,可以位于本发明实施例的元组排序方法的执行主体(例如,CPU)的外部,属于该执行主体的异构系统的加速器。
通过设定核函数输出的元组排序所用数据可以用于传输给异构系统的加速器进行排序加速,但本发明实施例的元组排序方法主要是针对其执行主体端而言,并不限定本发明实施例的元组排序方法的执行主体包括外部硬件加速器。外部硬件加速器所采用的排序方法可以是各种能够加速排序计算的方法,例如,并行排序计算方法。
步骤S130:接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组。
该步骤S130中,该设定核函数不仅可以用于输出元组排序所用数据给,还可以用于返回外部硬件加速器的排序计算结果。其中,该排序计算结果可以是键值所对应索引(或称为下标)的排序结果,在其他实施例中,可以是其他能够反映元组顺序的序号。
例如,若排序计算结果为排序后的键值对应的元组索引,则可以依次根据元组索引从新申请的元组数组中拷贝元组数据来替换原始关系型数据库结构体中的原始元组数组中的元组数据,能够将原始元组数组中的元组按排序所用键值进行排序。
根据本发明实施例所述的元组排序方法可以编写子函数,现有的关系型数据库在执行查询操作时,查询树中涉及排的节点序可以使得排序函数中的父函数调用该子函数,最终父函数根据执行上述步骤S130后得到的重新排序的元组。简言之,父函数调用子函数,在执行完该子函数后,父函数即可得到元组排序结果,不需该子函数返回元组排序结果。当然,该子函数可以将“排序成功”等消息返回给父函数。
例如,对于PostgreSQL数据库而言,源码中对tuplesort结构体进行排序的函数是tuplesort_performsort函数(排序函数),内存排序调用是tuplesort_sort_memtuples函数,tuplesort_sort_memtuples函数中调用的两个函数分别为qsort_ssup函数和qsort_tuple函数,前者是单一key值排序,后者是多key值排序。可以根据本发明实施例的方法编写子函数替换qsort_ssup函数,来加速单键值排序过程;可以根据本发明实施例的方法编写子函数替换qsort_tuple函数,来加速多键值排序过程。对于PostgreSQL数据库而言,可以通过根据本发明实施例的元组排序方法编写的新函数代替qsort_tuple函数的第三个参数中的函数指针,实现qsort_tuple函数加速。
如此一来,利用新的子函数代替现有的关系型数据库中排序函数中的父函数所调用的子函数,就可以利用异构系统的加速设备实现元组排序加速,该过程对原数据库影响很小。
图1所示的关系型数据库管理系统中的元组排序方法可以是单键值排序过程或多键值排序过程。单键值排序过程是按照一种键值进行排序的过程。多键值排序过程是按照两种或两种以上的键值进行排序的过程。
在一些实施例中,关系型数据库管理系统中的元组排序方法是涉及单键值排序过程。在此情况下,在上述步骤S110中,将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中的步骤,具体地,可包括步骤:S1111,在内存中申请基础数据类型的数组,并从原始关系型数据库结构体提取元组排序所用数据中的单键值和相应的元组索引,将提取的单键值和相应的元组索引存储至申请的基础数据类型的数组中。
该步骤S1111中,单键值可以是指一种属性的键值,每个键值的值对应一个元组,每个元组对应一个索引的值。先在内存中开辟数组的内存空间,然后,可以将数据库中键值和索引数据(而非结构体)提取出来,并暂存至开辟的数组中。
其中,提取键值和索引的过程可以是直接从数据库的结构体中拷贝出来数据,直接可以被外部硬件加速器所识别,所以可以存储在基础数据类型的数组中以备传输给加速器。
另外,提取出的单键值和元组索引可以放在一个多维数组中,或者,可以分别放在不同的数组中。
进一步地,上述步骤S1111,更具体地,可包括步骤:S11111,在内存中申请基础数据类型的数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的数组进行初始化,以从原始关系型数据库结构体提取的元组排序所用数据中的单键值和相应的元组索引存储至申请的基础数据类型的数组对应的内存空间中。
该步骤S11111中,元组排序所用数据中的键值是原数据表中的一个属性,通过原始关系型数据库中的函数对新申请的数组进行初始化来实现基础类型数据的提取,以此可以减少对原数据库的改动,减小本实施例的排序加速方法对原数据库的影响,减小改进过程的工作量。例如,对于PostgreSQL数据库而言,属性获取函数可以是heap_getattr函数。若数据库没有能够提取键值的函数,可以通过自行设计实现。
在上述步骤S110中,将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中的步骤,具体地,可包括步骤:S1112,在内存中申请原始关系型数据库结构体类型的元组数组,并将从原始关系型数据库结构体的原始元组数组中的全部元组拷贝至申请的原始关系型数据库结构体类型的元组数组。
该步骤S1112中,现在申请元组数组的内存空间,申请的元组数组的类型与数据库的结构体中结构体的原始元组数组的类型相同,再将原始元组数据中的数组中的元组全部拷贝至申请的元组数组中,能够解决每次读取一个元组而导致数据库无法与异构系统的加速设备对接的问题。
另外,该步骤S1112可以在步骤S120和步骤S130之间执行;或者,可以在步骤S120之前执行,具体地,可以在步骤S1111之前、之后或同时执行。
在上述步骤S120中,通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算的步骤,具体地,可包括步骤:S1211,通过设定核函数输出申请的基础数据类型的数组中存储的单键值和相应的元组索引,以利用能够识别所述基础数据类型的数据的外部硬件加速器对单键值进行排序计算,从而返回排序后的单键值对应的元组索引。
该实施例中,需要进行单键值排序时,元组排序所用数据主要包括一种键值和相应的索引,所以可以将这两种数据传入外部硬件加速器,以进行排序计算。外部硬件加速器可以为排序后的索引。
示例性地,加速器对键值进行排序,由于键值的值与索引的值相互对应所以,完成对键值的排序后即可以得到索引的排序;或者,例如,键值和索引存储在不同的新申请的基础数据类数组中,则可以先对键值进行排序计算,得到排序后的键值,然后再根据排序后的键值对索引进行排序,从而得到排序后的索引。
在上述步骤S130中,接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组,具体地,可包括步骤:S1311,接收通过所述设定核函数返回的排序后的单键值对应的元组索引;S1312,根据排序后的单键值对应的元组索引,利用申请的原始关系型数据库结构体类型的元组数组中存储的元组向原始关系型数据库结构体的原始元组数组赋值,以按排序后的单键值排序原始关系型数据库结构体中的元组。
该实施例中,排序后的单键值是加速器进行排序得到的。加速器的排序计算结果可以是元组索引。索引的排序结果可以根据索引与排序后键值的对应关系得到,或者是根据排序后键值再次排序计算得到。在其他实施例中,加速器的排序计算结果可以是其他能够反映排序后元组顺序的信息或序号。
在另一些实施例中,关系型数据库管理系统中的元组排序方法是涉及多键值排序过程。在此情况下,上述步骤S110中,将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中的步骤,具体地,可包括步骤:S1121,在内存中申请基础数据类型的第一数组和第二数组,并从原始关系型数据库结构体提取的元组排序所用数据中的多键值、相应的元组索引及相应的键值属性,将提取的多键值和相应的元组索引存储至申请的基础数据类型的第一数组中,将提取的键值属性存储至申请的基础数据类型的第二数组中。
该步骤S1121中,可以针对多键值和索引开辟一块数组内存空间,针对键值属性信息开辟另一块数组内存空间。其中,键值属性能够用于解析出不同种的键值,以便根据各种键值对元组进行排序。多键值可以包括两种或两种以上的键值,同一元组中的键值的值对应一个索引。用于存储多键值和索引的数组可以是一个多维数据,或者可以是多个数组。
另外,可以直接从原始数据库的原始结构体中直接拷贝出基础数据类型的多键值,也可以拷贝出一些基础数据类型的键值属性。对于一些无法直接以基础数据类型的形式拷贝出的元组排序所用数据,可以先拷贝出来,再经过处理得到外部硬件加速器能够识别的基础数据类型。
进一步地,上述步骤S1121,更具体地,可包括步骤:S11211,在内存中申请基础数据类型的第一数组对应的内存空间和第二数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的第一数组和第二数组进行初始化,以从原始关系型数据库结构体提取的元组排序所用数据中的多键值、相应的元组索引及相应的键值属性,并将提取的多键值和相应的元组索引与提取的键值属性分别存储至申请的基础数据类型的第一数组对应的内存空间和申请的基础数据类型的第二数组对应的内存空间。
该步骤S11211中,元组排序所用数据中的键值是原数据表中的一个属性,通过原始关系型数据库中的函数对新申请的两个数组进行初始化来实现基础类型数据的提取,以此可以减少对原数据库的改动,减小本实施例的排序加速方法对原数据库的影响,减小改进过程的工作量。例如,对于PostgreSQL数据库而言,属性获取函数可以是heap_getattr函数。若数据库没有能够提取键值的函数,可以通过自行设计实现。
更进一步地,上述步骤S11211,更具体地,可包括步骤:S112111,在内存中申请基础数据类型的第一数组对应的内存空间和第二数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的第一数组和第二数组进行初始化,以从原始关系型数据库结构体提取的元组排序所用数据中的多键值、相应的元组索引及相应的键值属性;S112112,将原始关系型数据库的排序比较函数中元组排序所用数据中的非基础数据类型的输入参数转化为基础数据类型,并将提取的多键值和相应的元组索引存储至申请的基础数据类型的第一数组对应的内存空间,将提取的键值属性存储至申请的基础数据类型的第二数组对应的内存空间,将转化为基础数据类型后的输入参数存储至其余内存空间。例如,对于PostgreSQL数据库而言,排序比较函数可以是ApplySortComparator函数。
用新的排序比较函数代替原始数据库的排序比较函数(如ApplySortComparator)。新的排序函数只接收基础数据类型,而ApplySortComparator函数有一个参数是结构体类型。因此,可以把这个结构体类型的数据提取为基本数据类型,并暂存起来。具体地,可以将原始关系型数据库中的排序比较函数中其他非基础数据类型的输入参数转化为基础数据类型(也就是提取结构体的成员),存储在额外的内存空间中,以便传输给加速器。该过程可以由原数据库中的函数完成,或者,可以直接从结构体提取成员。
该实施例中,对于多键值排序过程,元组排序所用数据除了包括多键值、索引、键值属性,还可能包含其他一些所需的辅助信息,例如,键值的值是否为空。而一些辅助信息可能不能直接被外部硬件加速器识别,那么通过将该些辅助信息转化基础数据类型,则能够便于使外部硬件加速器识别元组排序所需的所有数据。
对于多键值排序的过程,上述步骤S110中,将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中的步骤,类似于上述步骤S1112,具体地可包括步骤:S1122,在内存中申请原始关系型数据库结构体类型的元组数组;将从原始关系型数据库结构体的原始元组数组中的全部元组拷贝至申请的原始关系型数据库结构体类型的元组数组。
上述步骤S120,即,通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算,具体地,可包括步骤:S1221,通过设定核函数输出基础数据类型的第一数组中存储的多键值和相应的元组索引与基础数据类型的第二数组中存储的键值属性,以利用能够识别所述基础数据类型的数据的外部硬件加速器根据所述键值属性识别所述多键值中的各种键值,并对所述多键值进行排序计算,从而返回排序后的多键值对应的元组索引。
该步骤S1221中,在进行多键值排序的情况下,多键值的数据存储可以是暂存在一块数组内存空间中,键值的属性信息可以是暂存在另一块数组内存空间中。若该两个数组中的数据均为外部硬件加速器能够识别的基础数据类型,则可以直接传输给外部硬件加速器。外部硬件加速器可以根据键值属性解析出多键值中的各种键值,从而能够进行多键值排序。
类似于单键值排序的情况,外部硬件加速器进行排序计算后,可以返回排序后的元组索引。外部硬件减速器可以先对多键值进行排序,然后根据多键值与索引的对应关系得到排序后的索引;或者,可以在对多键值进行排序后,通过根据多键值对索引进行排序,得到排序后的索引。当然,相对于单键值排序而言,多键值排序更复杂些。
上述步骤S130,即,接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组,具体地,可包括步骤:S1321,接收通过所述设定核函数返回的排序后的多键值对应的元组索引;S1322,根据排序后的多键值对应的元组索引,利用申请的原始关系型数据库结构体类型的元组数组中存储的元组向原始关系型数据库结构体的原始元组数组赋值,以按排序后的多键值排序原始关系型数据库结构体中的元组。
该实施例中,排序后的多键值是加速器进行排序得到的。加速器的排序计算结果可以是元组索引。索引的排序结果可以根据索引与排序后键值的对应关系得到,或者是根据排序后键值再次排序计算得到。在其他实施例中,加速器的排序计算结果可以是其他能够反映排序后元组顺序的信息或序号。
在又一些实施例中,图1所示的关系型数据库管理系统中的元组排序方法,上述步骤S130之后,即,接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组之后,还可包括步骤:S140,回收申请的基础数据类型的数组对应的内存空间和原始关系型数据库结构体类型的元组数组对应的内存空间,并将基础数据类型的数组的指针和原始关系型数据库结构体类型的指针置空。
该步骤S140中,示例性地,若是进行单键值排序,需要回收/销毁的内存空间可以包括上述步骤S1111中申请的基础数据类型的数组对应的内存空间和上述步骤S1112中申请的原始关系型数据库结构体类型的元组数组对应的内存空间;若是进行多键值排序,需要回收/销毁的内存空间可以包括上述步骤S1121中申请的基础数据类型的第一数组和第二数组对应的内存空间于上述步骤S1122中申请的原始关系型数据库结构体类型的元组数组。
该实施例中,通过回收/销毁开辟的内存空间,并将申请数组的指针置空,能够防止内存泄漏和野指针。
基于上述各实施例的关系型数据库管理系统中的元组排序方法,本发明实施例还提供了一种关系型数据库管理系统的查询方法。参见图2和图3,一些实施例的关系型数据库管理系统的查询方法,可包括以下步骤S210~步骤S230。
步骤S210:接收SQL查询语句,并根据所述SQL查询语句进行查询编译,生成查询树。
查询树中包含一种或多种节点,其中,Sort节点需要执行排序操作。例如,SQL查询语句为order by或group by等语句时,查询操作涉及排序。
步骤S220:在所述查询树包含Sort节点的情况下,利用本发明各实施例所述的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序。
现有技术中,在执行Sort节点中的排序操作时,都是单线程进行的。而利用本发明实施例的元组排序方法,可以代替原有的内存排序方法,从而利用外部硬件加速器排序。元组排序方法中排序所需数据可以从SQL查询语句对应生成的该Sort节点得到。
步骤S230:基于所述查询树中各Sort节点中需要排序的元组的排序结果完成所述查询树中其余节点的操作,以返回所述SQL查询语句的查询结果。
除了利用本发明实施例的元组排序方法执行排序操作外,可以利用现有关系型数据库原有的函数完成查询树中其他节点的操作,从而完成整个查询过程,并返回查询结果。
在一些实施例中,图2和图3所示的关系型数据库管理系统的查询方法,还可包括步骤:S240,在所述查询树不包含Sort节点的情况下,利用原始关系型数据库中的原始查询方法完成所述查询树中的各节点的操作,以返回所述SQL查询语句的查询结果。该实施例中,生成查询树后,可以判断一下查询树中是否存在Sort节点,若存在Sort节点,则可以利用本发明实施例的元组排序方法替换原有的内存排序方法,加速该节点的排序。各个Sort均可以利用类似的方法加速排序,并可以返回相应的排序结果。
在一些实施例中,上述步骤S220,即,在所述查询树包含Sort节点的情况下,利用本发明实施例的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序,具体地,可包括步骤:S221,在所述查询树包含Sort节点的情况下,判断所述查询树中的Sort节点中需要排序元组的数量是否超过内存上限;S222,若所述查询树中的Sort节点中需要排序元组的数量未超过内存上限,则利用本发明实施例的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序。
该实施例中,在查询树中存在Sort节点的情况下,需要进一步判断Sort节点中需要排序元组的数量是否超过内存上限,只有在未超过的情况下才利用本发明实施例的元组排序方法替换原内存排序方法进行排序,以此可以防止由于查询数量太大导致超过Sort节点缓存元组的上限。
另一些实施例中,上述步骤S220,即,在所述查询树包含Sort节点的情况下,利用本发明实施例的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序,可包括步骤:S223,若所述查询树中的Sort节点中需要排序元组的数量超过内存上限,则利用原始关系型数据库中的原始外部排序方法对所述查询树中的Sort节点中需要排序的元组进行排序。
该实施例中,在超过缓存上限的情况下,不是利用本发明实施例的元组排序方法替换原内存排序方法进行排序,而是利用原数据库中的外部排序方法执行Sort节点中排序操作,以此,可以防止由于查询数量太大导致超过Sort节点缓存元组的上限,进而导致执行速度下降。
另外,本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述各实施例所述方法的步骤。在所述处理器执行所述程序时实现上述各实施例所述元组排序方法的步骤的情况下,该电子设备可以是现有关系型数据库的所基于的设备,例如,计算机、服务器等。在所述处理器执行所述程序时实现上述各实施例所述查询方法的步骤的情况下,该电子设备也可以是现有关系型数据库的所基于的设备,或者,还可以包括外部硬件加速器的设备。在一些实施例中,所述的电子设备还可包括外部硬件加速器,例如,GPU设备、FPGA芯片等。
此外,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述各实施例所述的元组排序方法或各实施例的所述的查询方法的步骤。
通过对现有关系型数据库进行优化,能够方便地实现本发明实施例的关系型数据库管理系统中的元组排序方法。在一些实施例中,便于使用异构系统加速的关系型数据库中的排序过程的性能优化方法,可包括以下步骤:
S1,确定本发明与原关系数据库的函数接口,包括确定源码中对Sort节点排序的函数,通过对排序函数的修改,在完成和外部加速器对接的同时,保证源码中的其他函数不受影响;
S2,查看原关系数据库中排序函数的具体实现方式,修改其中的内存排序方法,对于其他排序方法(如外部排方法等)仍使用原有的排序执行方案;
S3,对于内存排序方法,进一步判断排序操作是单一键值排序还是多个键值排序,以便本发明提供不同的子函数接口对接原有排序父函数;
S4,编写新的单键值排序核函数,并借助CPU的内存空间支持异构加速器提供的加速条件,并实现与父函数对接;
其中,步骤S4可包括以下步骤S41~S46:
S41,提取元组排序所用的键值,申请内存空间,将元组集合中排序用的键值提取出来,存入数组;
S42,提取元组集合的下标,申请新的内存,保存元组集合的下标;
S43,将下标集合和元组的键值集合这些加速支持的基础数据类型传入加速器的核函数进行并行排序,将键值按照大小进行排序,元组下标根据键值进行排序,最后元组下标按照对应的键值大小有序;
S44,申请一个暂存的排序元组数组,将原元组数组中的内容全部拷贝达到这个暂存数组中,以根据新的下标顺序对原元组集合进行赋值;
S45,根据子步骤三返回的元组下标顺序,从子步骤四的暂存数组中向原元组数组重新赋值,使元组数组有序;
S46,回收申请的内存并置空指针,以防止内存泄漏和野指针;
S5,编写支持异构加速器的多键值排序核函数,替代原多键值排序函数。并实现与父函数对接;
其中,多键值排序过程和单键值函数的区别在于:其父函数的调用接口多了多键值属性等输入参数,所以下述步骤S51的两个元组数组分别用来保存数据信息及多键值的属性信息,下述步骤S52是将原有结构体里的数据提取出来赋值给步骤S51的两个元组数组。下述步骤S53是将键值其他参数如是否为空等辅助信息转化成加速器可以识别的基本数据类型,同时编写对应原逻辑的加速器核函数;下述步骤S55的返回过程和单键值排序的方法相同。
S51,申请两个元组数组的内存空间,通过源码中对应的多键值排序函数对两个数组进行初始化,作为下面多键值排序核函数的参数输入;
S52,提取元组数组中结构体的基础数据类型提取出来,并使用例如PCIE(Peripheral Component Interconnect Express,高速串行计算机扩展总线)等接口传输给异构加速器;
S53,编写异构加速器核函数中的线程函数,驱动加速器执行核函数,对最终结果进行计算,根据原多键值修改,将参数中的结构体改为需要的基本数据类型;
S54,上述得到的参数(排序所用数据)传入加速器的核函数,进行并行加速,得到排好序的索引;
S55,根据索引,方法同步骤S4的子步骤S44和子步骤S45使返回结果给原数据库的父函数。
S6,将所有开辟的内存销毁并指针置空。
为使本领域技术人员更好地了解本发明的实施方式和功效,下面将以具体实施例说明本发明的实施方式。
以PostgreSQL数据库为例,为了解决目前的PostgreSQL等关系型数据库无法利用GPU、FPGA或者专用芯片等加速器配合CPU加速排序操作的问题,针对Sort节点支持异构系统加速的内存排序性能的优化方法,可包括以下步骤:
步骤一,确定源码中对Sort节点排序的函数,通过对排序函数的修改,在完成和外部加速器对接的同时,保证源码中的其他函数不受影响,源码中对tuplesort结构体进行排序的函数是tuplesort_performsort函数;
步骤二,查看tuplesort_performsort函数中的源码实现,修改内存排序的方法,内存排序调用的方法是tuplesort_sort_memtuples函数;
步骤三,查看tuplesort_sort_memtuples函数中的源码实现,进一步确定具体修改方法,对判断与剧中两个不同方法进行分别修改,tuplesort_sort_memtuples函数中调用的两个函数分别为qsort_ssup函数和qsort_tuple函数,其区分在于前者根据单一key值排序,后者不是;
步骤四,编写新的排序函数,使用新写的排序函数替换掉qsort_ssup函数,以支持外部加速器提供的并行条件;
其中,步骤四包括以下子步骤一至子步骤六:
子步骤一,提取元组排序所用的key值,申请内存空间,将元组集合中排序用的key值提取出来,存入数组;
子步骤二,提取元组集合的下标,申请新的内存,保存元组集合的下标;
子步骤三,将下标集合和元组的key值集合这些加速支持的基础数据类型传入加速器的kernel函数进行并行排序,将key值按照大小进行排序,元组下标根据key值进行排序,最后元组下标按照对应的key值大小有序;
子步骤四,申请一个暂存的SortTuple类型数组,将原元组数组中的内容全部拷贝达到这个暂存数组中,以根据新的下标顺序对原元组集合进行赋值;
子步骤五,根据子步骤三返回的元组下标顺序,从子步骤四的暂存数组中向原元组数组重新赋值,使元组数组有序;
子步骤六,回收申请的内存并置空指针,防止内存泄漏和野指针;
步骤五,按照源码中comparetup_heap函数编写外部加速器支持的函数,通过新函数代替qsort_tuple函数的第三个参数中的函数指针,实现qsort_tuple函数加速;
其中,步骤五包括以下子步骤一至子步骤五:
子步骤一,申请两块Datum类型数组的内存空间,通过源码中heap_getattr函数对两个数组进行初始化,作为下面加速器kernel函数的参数输入;
子步骤二,ApplySortComparator函数将参数中结构体中的基础数据类型提取出来,以便传给加速器;
子步骤三,编写加速器kernel函数中的线程函数,对最终结果进行计算,根据ApplySortComparator函数修改,将参数中的结构体改为需要的基本数据类型;
子步骤四,上述得到的参数传入加速器的kernel函数,进行并行加速,得到索引;
子步骤五,根据索引,方法同步骤四的子步骤四和子步骤五使返回结果给原数据库的父函数;
步骤六,将所有开辟的内存销毁并指针置空。
本实施例的方法能够解决PostgreSQL数据库中的Sort节点无法支持外部加速器进行排序的问题。当SQL语句经过查询编译生成的查询树用到了Sort节点,并且Sort节点需要排序的数据很多,线程开销忽略不计,例如并行排序就比单线程排序的速度快很多。如果提供外部加速器,例如各种可以支持并行计算的加速器,完成PostgreSQL数据库和加速器的对接,可以显著提高SQL执行速度。比如,在SQL语句涉及order by,group by等语句时,且查询数据量很大,但是并没有超过Sort节点缓存元组的上限,利用本实施例的方法进行改进,查询执行的时间会明显变短。本实施例能够取得的实际效果是:在一个存在1000数据的表中,利用模拟的kernel加速器,执行带有order by语句的SQL查询语句,利用加速器执行的速度是源码查询速度的六倍以上。
从查询语句的整体执行效率来看,以PostgreSQL数据库为例,参见图4,Sort节点加速过程可包括:开始执行查询语句后,调用tuplesort_performsort函数,然后判断sort节点中元组数量是否超过内存上限,若是,则执行原外部排序方法,若否,则调用tuplesort_sort_memtuples函数,进一步判断是否为单键值排序,若是,则对原Dblib_qsort函数进行加速,若否,则对原qsort_tuple进行加速。如此一来,能够选择较优的sort节点执行方法,从而进一步保证查询语句的执行效率。
综上所述,本发明实施例的关系型数据库管理系统中的元组排序方法、关系型数据库管理系统的查询方法、电子设备及计算机可读存储介质,通过将从原结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,能够实现原数据库向异构系统加速设备传输数据的对接;通过核函数输出存储的元组排序所用数据给外部硬件加速器进行排序计算,能够加速排序计算;通过依据返回的排序计算结果并利用存储的元组向原元组数组赋值,能够实现结构体中元组的排序。如此一来,解决了现有数据库的节点无法支持外部加速器进行排序的问题,在对原数据库修改较小的情况下,提高了数据库的排序速度,进而提高了查询语句的执行效率。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。另外,说明书中在描述执行步骤时所使用的符号并不用于限定步骤的执行顺序,实际执行顺序可根据描述内容进行合乎逻辑地判断。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种关系型数据库管理系统中的元组排序方法,其特征在于,包括:
将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,以及将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中;
通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算并通过所述设定核函数返回排序计算结果;
接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组。
2.如权利要求1所述的关系型数据库管理系统中的元组排序方法,其特征在于,
将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,包括:
在内存中申请基础数据类型的数组,并从原始关系型数据库结构体提取元组排序所用数据中的单键值和相应的元组索引,将提取的单键值和相应的元组索引存储至申请的基础数据类型的数组中;
通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算,包括:
通过设定核函数输出申请的基础数据类型的数组中存储的单键值和相应的元组索引,以利用能够识别所述基础数据类型的数据的外部硬件加速器对单键值进行排序计算,从而返回排序后的单键值对应的元组索引;
将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中,包括:
在内存中申请原始关系型数据库结构体类型的元组数组,并将从原始关系型数据库结构体的原始元组数组中的全部元组拷贝至申请的原始关系型数据库结构体类型的元组数组;
接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组,包括:
接收通过所述设定核函数返回的排序后的单键值对应的元组索引;
根据排序后的单键值对应的元组索引,利用申请的原始关系型数据库结构体类型的元组数组中存储的元组向原始关系型数据库结构体的原始元组数组赋值,以按排序后的单键值排序原始关系型数据库结构体中的元组。
3.如权利要求1所述的关系型数据库管理系统中的元组排序方法,其特征在于,
将从原始关系型数据库结构体提取的元组排序所用数据存储至在内存中申请的基础数据类型的数组中,包括:
在内存中申请基础数据类型的第一数组和第二数组,并从原始关系型数据库结构体提取元组排序所用数据中的多键值、相应的元组索引及相应的键值属性,将提取的多键值和相应的元组索引存储至申请的基础数据类型的第一数组中,将提取的键值属性存储至申请的基础数据类型的第二数组中;
通过设定核函数输出所述基础数据类型的数组中存储的元组排序所用数据,以利用能够识别所述基础数据类型的数据的外部硬件加速器对所述元组排序所用数据进行排序计算,包括:
通过设定核函数输出基础数据类型的第一数组中存储的多键值和相应的元组索引与基础数据类型的第二数组中存储的键值属性,以利用能够识别所述基础数据类型的数据的外部硬件加速器根据所述键值属性识别所述多键值中的各种键值,并对所述多键值进行排序计算,从而返回排序后的多键值对应的元组索引;
将从原始关系型数据库结构体拷贝的元组存储至在内存中申请的原始关系型数据库结构体类型的元组数组中,包括:
在内存中申请原始关系型数据库结构体类型的元组数组;
将从原始关系型数据库结构体的原始元组数组中的全部元组拷贝至申请的原始关系型数据库结构体类型的元组数组;
接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组,包括:
接收通过所述设定核函数返回的排序后的多键值对应的元组索引;
根据排序后的多键值对应的元组索引,利用申请的原始关系型数据库结构体类型的元组数组中存储的元组向原始关系型数据库结构体的原始元组数组赋值,以按排序后的多键值排序原始关系型数据库结构体中的元组。
4.如权利要求1所述的关系型数据库管理系统中的元组排序方法,其特征在于,接收通过所述设定核函数返回的排序计算结果,以及依据所述排序计算结果,并利用所述原始关系型数据库结构体类型的元组数组中的元组向原始关系型数据库结构体中的元组数组进行赋值,以排序所述原始关系型数据库结构体中的元组之后,所述方法还包括:
回收申请的基础数据类型的数组对应的内存空间和原始关系型数据库结构体类型的元组数组对应的内存空间,并将基础数据类型的数组的指针和原始关系型数据库结构体类型的指针置空。
5.如权利要求2所述的关系型数据库管理系统中的元组排序方法,其特征在于,在内存中申请基础数据类型的数组,并从原始关系型数据库结构体提取元组排序所用数据中的单键值和相应的元组索引,将提取的单键值和相应的元组索引存储至申请的基础数据类型的数组中,包括:
在内存中申请基础数据类型的数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的数组进行初始化,以从原始关系型数据库结构体提取元组排序所用数据中的单键值和相应的元组索引存储至申请的基础数据类型的数组对应的内存空间中。
6.如权利要求3所述的关系型数据库管理系统中的元组排序方法,其特征在于,在内存中申请基础数据类型的第一数组和第二数组,并从原始关系型数据库结构体提取元组排序所用数据中的多键值、相应的元组索引及相应的键值属性,将提取的多键值和相应的元组索引存储至申请的基础数据类型的第一数组中,将提取的键值属性存储至申请的基础数据类型的第二数组中,包括:
在内存中申请基础数据类型的第一数组对应的内存空间和第二数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的第一数组和第二数组进行初始化,以从原始关系型数据库结构体提取元组排序所用数据中的多键值、相应的元组索引及相应的键值属性,并将提取的多键值和相应的元组索引与提取的键值属性分别存储至申请的基础数据类型的第一数组对应的内存空间和申请的基础数据类型的第二数组对应的内存空间。
7.如权利要求6所述的关系型数据库管理系统中的元组排序方法,其特征在于,在内存中申请基础数据类型的第一数组对应的内存空间和第二数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的第一数组和第二数组进行初始化,以从原始关系型数据库结构体提取元组排序所用数据中的多键值、相应的元组索引及相应的键值属性,并将提取的多键值和相应的元组索引与提取的键值属性分别存储至申请的基础数据类型的第一数组对应的内存空间和申请的基础数据类型的第二数组对应的内存空间,包括:
在内存中申请基础数据类型的第一数组对应的内存空间和第二数组对应的内存空间,并利用原始关系型数据库中的属性获取函数对申请的基础数据类型的第一数组和第二数组进行初始化,以从原始关系型数据库结构体提取元组排序所用数据中的多键值、相应的元组索引及相应的键值属性;
将原始关系型数据库的排序比较函数中元组排序所用数据中的非基础数据类型的输入参数转化为基础数据类型,并将提取的多键值和相应的元组索引存储至申请的基础数据类型的第一数组对应的内存空间,将提取的键值属性存储至申请的基础数据类型的第二数组对应的内存空间,将转化为基础数据类型后的输入参数存储至其余内存空间。
8.一种关系型数据库管理系统的查询方法,其特征在于,包括:
接收SQL查询语句,并根据所述SQL查询语句进行查询编译,生成查询树;
在所述查询树包含Sort节点的情况下,利用如权利要求1至7任一项所述的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序;
基于所述查询树中各Sort节点中需要排序的元组的排序结果完成所述查询树中其余节点的操作,以返回所述SQL查询语句的查询结果。
9.如权利要求8所述的关系型数据库管理系统的查询方法,其特征在于,还包括:
在所述查询树不包含Sort节点的情况下,利用原始关系型数据库中的原始查询方法完成所述查询树中的各节点的操作,以返回所述SQL查询语句的查询结果。
10.如权利要求8所述的关系型数据库管理系统的查询方法,其特征在于,在所述查询树包含Sort节点的情况下,利用如权利要求1至7任一项所述的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序,包括:
在所述查询树包含Sort节点的情况下,判断所述查询树中的Sort节点中需要排序元组的数量是否超过内存上限;
若所述查询树中的Sort节点中需要排序元组的数量未超过内存上限,则利用如权利要求1至7任一项所述的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序。
11.如权利要求10所述的关系型数据库管理系统的查询方法,其特征在于,在所述查询树包含Sort节点的情况下,利用如权利要求1至7任一项所述的元组排序方法对所述查询树中的Sort节点中需要排序的元组进行排序,还包括:
若所述查询树中的Sort节点中需要排序元组的数量超过内存上限,则利用原始关系型数据库中的原始外部排序方法对所述查询树中的Sort节点中需要排序的元组进行排序。
12.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至11任一项所述方法的步骤。
13.如权利要求12所述的电子设备,其特征在于,还包括:外部硬件加速器。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至11任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910981210.6A CN110928875B (zh) | 2019-10-16 | 2019-10-16 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910981210.6A CN110928875B (zh) | 2019-10-16 | 2019-10-16 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928875A CN110928875A (zh) | 2020-03-27 |
CN110928875B true CN110928875B (zh) | 2021-04-16 |
Family
ID=69849154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910981210.6A Active CN110928875B (zh) | 2019-10-16 | 2019-10-16 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928875B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104020983A (zh) * | 2014-06-16 | 2014-09-03 | 上海大学 | 一种基于OpenCL的KNN-GPU加速方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7890518B2 (en) * | 2007-03-29 | 2011-02-15 | Franz Inc. | Method for creating a scalable graph database |
EP2234025A1 (en) * | 2009-03-24 | 2010-09-29 | Software AG | XML database management system for an XML database comprising access-protected XML data |
US8805811B2 (en) * | 2012-04-30 | 2014-08-12 | Hewlett-Packard Development Company, L.P. | Executing user-defined function on a plurality of database tuples |
CN109241093B (zh) * | 2017-06-30 | 2021-06-08 | 华为技术有限公司 | 一种数据查询的方法、相关装置及数据库系统 |
CN109710220B (zh) * | 2018-12-12 | 2023-08-22 | 平安科技(深圳)有限公司 | 关系型数据库查询方法、装置、设备及存储介质 |
-
2019
- 2019-10-16 CN CN201910981210.6A patent/CN110928875B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104020983A (zh) * | 2014-06-16 | 2014-09-03 | 上海大学 | 一种基于OpenCL的KNN-GPU加速方法 |
Non-Patent Citations (1)
Title |
---|
Kernel Weaver: Automatically Fusing Database Primitives for Efficient GPU Computation;Haicheng Wu等;《2012 IEEE/ACM 45th Annual International Symposium on Microarchitecture》;20130404;第107-118页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110928875A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391653B (zh) | 一种分布式NewSQL数据库系统及图片数据储存方法 | |
JP5833406B2 (ja) | 参照を使用してジェネリック・データ・アイテムに関連するデータ管理アーキテクチャ | |
CN112579155B (zh) | 代码相似性检测方法、装置以及存储介质 | |
US20070250517A1 (en) | Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries | |
EP0753819A1 (en) | System and method for accessing cobol data with a cobol compatible structured query language | |
US12047098B2 (en) | Data compression techniques | |
US11803550B2 (en) | Workload-aware column imprints | |
US11301469B2 (en) | Dynamic rebuilding of query execution trees and reselection of query execution operators | |
US10599614B1 (en) | Intersection-based dynamic blocking | |
CN111078705A (zh) | 基于Spark平台建立数据索引方法及数据查询方法 | |
CN113918807A (zh) | 数据推荐方法、装置、计算设备及计算机可读存储介质 | |
CN110928875B (zh) | 关系型数据库管理系统中的元组排序方法、查询方法及装置 | |
CN102789488A (zh) | 数据查询处理系统和数据查询处理方法 | |
US20230097765A1 (en) | Pseudorandom Thread Generation | |
CN111752549A (zh) | Sql函数生成方法及装置 | |
CN111767287A (zh) | 数据导入方法、装置、设备及计算机存储介质 | |
CN111026776B (zh) | 关系型数据库中的查询方法及装置 | |
US6480833B2 (en) | Method of resolving overloaded routines, system for implementing the same and medium for storing processing program therefor | |
CN111061760B (zh) | 关系型数据库管理系统中的窗口聚合方法、查询方法及装置 | |
CN110162531B (zh) | 一种分布式并发数据处理任务决策方法 | |
US11734282B1 (en) | Methods and systems for performing a vectorized delete in a distributed database system | |
CN111930313B (zh) | 主机中数据关联访问的方法和装置 | |
CN118193032B (zh) | 消除无效依赖库的方法、装置、设备、介质和程序产品 | |
Ponce et al. | Extension of a Task-based model to Functional programming | |
WO2024156113A1 (en) | Runtime error attribution for database queries specified using a declarative database query language |
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 |