应用于GaussDB数据库存储过程的并行计算方法转让专利

申请号 : CN202210391361.8

文献号 : CN114817311B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邹昌根刘建高星龚丽丽

申请人 : 上海掌数科技有限公司

摘要 :

本发明公开了一种应用于GaussDB数据库存储过程的并行计算方法,其包括如下步骤:在GaussDB数据库引擎中增加并行特性的处理代码,并编译出支持并行特性的GaussDB数据库内核;在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启以及关闭并行特性;为所述GaussDB数据库指定分布字段,并开启所述并行特性;开启所述并行特性,对开启所述并行特性的GaussDB数据库指定分布字段;应用本方法可以最大化的利用底层资源的多核并行能力,避免因数据倾斜导致的性能下降。

权利要求 :

1.一种应用于GaussDB数据库存储过程的并行计算方法,其特征在于,包括如下步骤:在GaussDB数据库引擎中增加并行特性的处理组件,并根据所述并行特性的处理组件编译出支持并行特性的GaussDB数据库内核;

在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启以及关闭并行特性;

为所述GaussDB数据库指定分布字段,并开启所述并行特性;

使用JDBC调用所述开启了并行特性的存储过程,并在所述GaussDB数据库内核中进行计算获得计算结果集合。

2.根据权利要求1所述的方法,其特征在于,在开启所述并行特性后还包括如下步骤:安装部署所述编译出的GaussDB数据库内核;

向所述GaussDB数据库内核中导入存储过程的数据模型;

向所述GaussDB数据库内核中导入业务数据,并根据所述业务数据,执行所述开启了并行特性的存储过程。

3.根据权利要求1所述的方法,其特征在于,所述GaussDB数据库内核中进行计算的方法包括如下步骤:将待执行的SQL语句传入所述GaussDB数据库内核,并对所述SQL语句进行解析获得解析结果;

将所述解析结果按照数据分片的方式进行拆分并对拆分结果分别进行数据计算得到若干个计算结果;

根据所述SQL语句中指定的方式,对所述计算结果进行合并、统计、聚合,并按条件进行排序、筛选后生成计算结果集合。

4.根据权利要求3所述的方法,其特征在于,在解析SQL语句之前设置并发路数,并且在解析SQL语句之后将所述并发路数恢复为一路,避免过度占用系统资源。

5.根据权利要求3所述的方法,其特征在于,所述数据分片的方法包括如下步骤:根据所述指定的分布字段对所述解析结果进行垂直分片,以确保拆分出的拆分结果彼此间的计算量相同,进而提高并行计算效率。

6.基于上述权利要求1‑5任一项所述方法的系统,其特征在于,包括:编译模块:在GaussDB数据库引擎中增加并行特性的处理组件,并根据所述并行特性的处理组件编译出支持并行特性的GaussDB数据库内核;

修改模块:在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启或关闭并行特性;

启动模块:为所述GaussDB数据库指定分布字段,并开启所述并行特性;

执行模块:使用JDBC调用所述开启了并行特性的存储过程,并在所述GaussDB数据库内核中进行计算获得计算结果集合。

7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序执行时实现权利要求1‑5任一项所述方法的步骤。

8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1‑5任一项所述方法的步骤。

说明书 :

应用于GaussDB数据库存储过程的并行计算方法

技术领域

[0001] 本发明属于计算机技术领域,具体而言属于一种应用于GaussDB数据库存储过程的并行计算方法。

背景技术

[0002] 市面上的主流计算机系统,都具有利用多CPU或者CPU多核技术实现并行计算的能力,这种技术被称为对称多处理(Symmetrical Multi‑Processing)简称SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。GaussDB(for openGauss)是华为公司面向市场推出的商业化数据库产品,支持该重要特性,并将其开源给openGauss社区。
[0003] SMP特性通过算子并行来提升性能,同时会占用较多的系统资源,包括CPU、内存、I/O等等。本质上SMP是一种以资源换取时间的方式,在合适的场景以及资源充足的情况下,能够起到较好的性能提升效果。通常情况下,SMP特性适用于分析类查询场景,这类场景的特点是单个查询时间较长,业务并发度低。通过SMP并行技术能够降低查询时延,提高系统吞吐性能。
[0004] GaussDB数据库是一款支持SMP特性的商业化数据库产品,但是在GaussDB数据库中SMP并行技术特性仅支持Scan、Join、Agg、Stream等少量算子的并行。在以下场景下并不支持:索引扫描、MergeJoin、cursor、存储过程及函数内、子查询、全局临时表查询、物化视图更新等。但是由于证券核心业务系统中大量使用存储过程,因此现在亟需一种可以使得GaussDB数据库的存储过程支持并合理应用该特性的方法,应用此种方法将极大提升存储过程的运行性能。
[0005] 有鉴于此,特提出本发明。

发明内容

[0006] 本发明的第一目的在于提供一种应用于GaussDB数据库存储过程的并行计算方法,本方法通过对GaussDB数据库内核的部分逻辑进行优化,实现了在存储过程中,支持会话中自主开启SMP并行特性,能够大幅提升GaussDB数据库进行批处理的执行效率。
[0007] 本发明的第二目的在于提供一种应用于GaussDB数据库存储过程的并行计算系统,该系统是基于上述方法所设计的,本系统以及本发明第一目的提供的方法均可以用于大批量数据加载、更新和复杂查询业务场景。
[0008] 为了实现本发明的上述目的,特采用以下技术方案:
[0009] 本方法包括如下步骤:
[0010] 在GaussDB数据库引擎中增加并行特性的处理组件,并根据所述并行特性的处理组件编译出支持并行特性的GaussDB数据库内核;
[0011] 在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启以及关闭并行特性;
[0012] 为所述GaussDB数据库指定分布字段,并开启所述并行特性;
[0013] 使用JDBC调用所述开启了并行特性的存储过程,并在所述GaussDB数据库内核中进行计算获得计算结果集合。
[0014] 优选地,在开启所述并行特性后还包括如下步骤:
[0015] 安装部署所述编译出的GaussDB数据库内核;
[0016] 向所述GaussDB数据库内核中导入存储过程的数据模型;
[0017] 向所述GaussDB数据库内核中导入业务数据,并根据所述业务数据,执行所述开启了并行特性的存储过程。
[0018] 其中所述数据库内核是需要安装部署在一款支持SMP多核并行处理能力的计算机和操作系统中的,所述GaussDB数据库内核是随着编译好的GaussDB二进制软件一同安装部署的。
[0019] 在对所述GaussDB数据库二进制软件进行各项设置完成后,启用所述存储过程的SMP特性,并导入业务表、存储过程、视图、函数等一系列数据模型。
[0020] 在将数据模型导入完成后还需要导入待处理的业务数据,并根据所述待处理的业务数据以及业务调度需求来执行所述开启了并行特性的存储过程。
[0021] 优选地,所述GaussDB数据库内核中进行计算的方法包括如下步骤:
[0022] 将待执行的SQL语句传入所述GaussDB数据库内核,并对所述SQL语句进行解析获得解析结果;
[0023] 将所述解析结果按照数据分片的方式进行拆分并对拆分结果分别进行数据计算得到若干个计算结果;
[0024] 根据所述SQL语句中指定的方式,对所述计算结果进行合并、统计、聚合,并按条件进行排序、筛选后生成计算结果集合。
[0025] 其中对所述待执行的SQL语句进行解析的工具为查询优化器,所述查询优化器会对传入内核的SQL语句进行解析,并将SQL语句中获取数据的部分的逻辑按照数据分片的方法进行拆分,将拆分为多部分的片段分别下发到不同的执行单位进行分别处理,所述执行单位本身是支持多线程并行的。
[0026] 执行单位对所述多个片段进行计算后产生计算结果,所述计算结果会实时传回进行合并、聚合、统计,直到所有的工作单位都返回了数据结果,最后将所有的计算结果进行排序、筛选后即可生成计算结果集合。
[0027] 优选地,在解析SQL语句之前要设置并发路数,并且在解析SQL语句之后将所述并发路数恢复为一路,避免过度占用系统资源。
[0028] 优选地,所述数据分片的方法包括如下步骤:
[0029] 根据所述指定的分布字段对所述解析结果进行垂直分片,以确保拆分出的拆分结果彼此间的计算量相同,进而提高并行计算效率。
[0030] 本发明第二目的公开的一种应用于GaussDB数据库存储过程的并行计算系统,其包括:
[0031] 编译模块:在GaussDB数据库引擎中增加并行特性的处理组件,并根据所述并行特性的处理组件编译出支持并行特性的GaussDB数据库内核;
[0032] 修改模块:在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启或关闭并行特性;
[0033] 启动模块:为所述GaussDB数据库指定分布字段,并开启所述并行特性;
[0034] 执行模块:使用JDBC调用所述开启了并行特性的存储过程,并在所述GaussDB数据库内核中进行计算获得计算结果集合。
[0035] 并且本发明还公开了一种计算机可读存储介质,其上存储有计算机程序,所述程序执行时实现上述方法的步骤。
[0036] 一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
[0037] 与现有技术相比,本发明的有益效果在于:
[0038] (1)可以用于大批量数据加载、更新和复杂查询业务场景,可推广价值大,实用性强。
[0039] (2)可以最大化的利用底层资源的多核并行能力,避免因数据倾斜导致的性能下降。

附图说明

[0040] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0041] 图1为本实施例提供的应用于GaussDB数据库存储过程的并行计算方法流程图;
[0042] 图2为本实施例提供的应用于GaussDB数据库存储过程的并行计算系统图;
[0043] 图3位本实施例提供的流程示意图;
[0044] 图4为本发明实施例提供的一种计算机设备的结构示意图。

具体实施方式

[0045] 下面将结合附图和具体实施方式对本发明的技术方案进行清楚、完整地描述,但是本领域技术人员将会理解,下列所描述的实施例是本发明一部分实施例,而不是全部的实施例,仅用于说明本发明,而不应视为限制本发明的范围。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0046] 为了更加清晰的对本发明中的技术方案进行阐述,下面以具体实施使用的形式进行说明。
[0047] 如图1‑3所示,本实施例提供了一种应用于GaussDB数据库存储过程的并行计算方法,本方法包括如下步骤:
[0048] S101:在GaussDB数据库引擎中增加并行特性的处理组件,并根据所述并行特性的处理组件编译出支持并行特性的GaussDB数据库内核;
[0049] S102:在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启以及关闭并行特性;
[0050] S103:为所述GaussDB数据库指定分布字段,并开启所述并行特性;
[0051] S104:使用JDBC调用所述开启了并行特性的存储过程,并在所述GaussDB数据库内核中进行计算获得计算结果集合。
[0052] 值得一提的是,在步骤S101之前还需要在GaussDB数据库中进行创建存储过程,如“CREATE PROCEDURE prod_XXX(OUT result INT)”语句所示,创建的存储过程为“prod_XXX”。
[0053] 其中步骤S102中,增加的控制逻辑为设置好并发路数,如“SET query_dop=4”表示开启4路并行,“SET query_dop=4”表示并行路数为1,也即是表示恢复默认不并行。
[0054] 优选地,在开启所述并行特性后还包括如下步骤:
[0055] 安装部署所述编译出的GaussDB数据库内核;
[0056] 向所述GaussDB数据库内核中导入存储过程的数据模型;
[0057] 向所述GaussDB数据库内核中导入业务数据,并根据所述业务数据,执行所述开启了并行特性的存储过程。
[0058] 优选地,所述GaussDB数据库内核中进行计算的方法包括如下步骤:
[0059] 将待执行的SQL语句传入所述GaussDB数据库内核,并对所述SQL语句进行解析获得解析结果;
[0060] 将所述解析结果按照数据分片的方式进行拆分并对拆分结果分别进行数据计算得到若干个计算结果;
[0061] 根据所述SQL语句中指定的方式,对所述计算结果进行合并、统计、聚合,并按条件进行排序、筛选后生成计算结果集合。
[0062] 在步骤S103中,指定分布字段是需要在较为合理的范围内指定分布字段的,本实施例是按照ID Hash的方式进行指定分布字段的,指定好分布字段后,各个计算节点(Worker)将根据所述分布字段,自动处理归属本节点的分片数据,计算节点在计算完成后会立即去处理其他的计算逻辑;若是在步骤S103中不指定一个合理的分布字段,那么不同计算节点获取到的分片数据体量会不均衡,导致执行时长差异较大,进而导致并行效率低下。
[0063] 其中本实施例中数据分片的方式选择的是垂直分片,以确保拆分出的拆分结果彼此之间的计算量相同,进而使得并行计算的效率最高。
[0064] 一般来说,在进行多表查询时,往往会使用列join的方法,以此种方式的话若查询中主表的join列上的计算量远大于其他列,这样在并行的状态下,数据库内核会自动对该表数据做hash重分布,这样就会使得某一个并行的线程计算量远多于其他线程,如此一来便产生了长尾效应,导致并行效果差;此外在进行表聚合时,聚合列在数据节点中的分布如果不均衡,在并行状态下同样会导致某个并行的线程计算量远大于其他线程,同样会导致并行效果差。
[0065] 因此本实施例提供的数据分片方式是能够做到较为平均的分配,每一个并行的线程都可以分得相同多或者近似多的数据并行计算量,进而使得并行性能达到最大化。同时通过对业务数据的分析、统计和计算,使用到合理的join列、聚合列等,可以获得更高的并行回报。
[0066] 优选地,在解析SQL语句之前要设置并发路数,即使用“SET query_dop=4”语句设置并发路数为4,在解析SQL语句之后使用“SET query_dop=1”的语句将所述并发路数恢复为一路,避免因为并发设置导致的大量并行计算,从而引起过度占用系统资源。
[0067] 在步骤S104中,要使用JDBC调用所述开启了并行特性的存储过程,所谓的JDBC即java数据库连接,在该步骤中,首先要创建对于数据库的连接,以“Connection conn=DBUtil.getConnection()”语句实现,其中的“conn”即创建的连接名称;之后要通过“CallableStatement cs=conn.prepareCall(“call prod_XXX()”)”语句,在此连接上的数据库中创建执行存储过程的接口,其中的“cs”即创建好的接口,“prod_XXX()”即是存储过程;对所述存储过程的接口对接完成后开始执行该接口,并输出接口传输来的数据即可,执行使用的是“cs.execute()”函数。
[0068] 本实施例还提供了一种应用于GaussDB数据库存储过程的并行计算系统,本系统包括:
[0069] 编译模块201:在GaussDB数据库引擎中增加并行特性的处理组件,并根据所述并行特性的处理组件编译出支持并行特性的GaussDB数据库内核;
[0070] 修改模块202:在所述GaussDB数据库的存储过程中增加对于并行路数的控制逻辑,以使所述存储过程支持动态开启或关闭并行特性;
[0071] 启动模块203:为所述GaussDB数据库指定分布字段,并开启所述并行特性;
[0072] 执行模块204:使用JDBC调用所述开启了并行特性的存储过程,并在所述GaussDB数据库内核中进行计算获得计算结果集合。
[0073] 图4是本发明公开的一种计算机设备的结构示意图。参考图4所示,该计算机设备包括:输入装置63、输出装置64、存储器62和处理器61;所述存储器62,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器61执行,使得所述一个或多个处理器61实现如上述实施例提供的并行计算方法;其中输入装置63、输出装置64、存储器62和处理器61可以通过总线或者其他方式连接,图4中以通过总线连接为例。
[0074] 存储器62作为一种计算设备可读写存储介质,可用于存储软件程序、计算机可执行程序,如本申请实施例所述的方法对应的程序指令;存储器62可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等;此外,存储器62可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件或其他非易失性固态存储器件;在一些实例中,存储器62可进一步包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0075] 输入装置63可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入;输出装置64可包括显示屏等显示设备。
[0076] 处理器61通过运行存储在存储器62中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理。
[0077] 上述提供的计算机设备可用于执行上述实施例提供的并行计算方法,具备相应的功能和有益效果。
[0078] 本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如上述实施例提供的并行计算方法,存储介质是任何的各种类型的存储器设备或存储设备,存储介质包括:安装介质,例如CD‑ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等;存储介质可以还包括其它类型的存储器或其组合;存储介质包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
[0079] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。