一种跨数据库的数据查询方法、查询装置及可读介质转让专利

申请号 : CN202010900308.7

文献号 : CN111767304B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 姜双林潘星彤周磊饶志波

申请人 : 北京安帝科技有限公司

摘要 :

本发明涉及一种跨数据库的数据查询方法、查询装置及可读介质,该数据查询方法包括:接收特定语言格式的查询语句;对查询语句进行语法解析和校验,以生成查询计划;根据查询计划,确定与查询计划相对应的计算引擎和若干个数据库,并将查询语句发送至计算引擎;其中,计算引擎用于接收由若干个数据库发来的数据;接收由计算引擎发来的计算任务;其中,计算任务是利用计算引擎对查询语句进行转换得到;对计算任务进行优化,并将优化后的计算任务发送至计算引擎,以使计算引擎对若干个数据库发来的数据执行优化后的计算任务,并得到计算结果;接收由计算引擎发来的计算结果。本发明的方案能够提高跨数据库的数据查询效率。

权利要求 :

1.一种跨数据库的数据查询方法,其特征在于,包括:

接收特定语言格式的查询语句;

对所述查询语句进行语法解析和校验,以生成查询计划;

根据所述查询计划,确定与所述查询计划相对应的计算引擎和若干个数据库,并将所述查询语句发送至所述计算引擎;其中,所述计算引擎用于接收由所述若干个数据库发来的数据;

接收由所述计算引擎发来的计算任务;其中,所述计算任务是利用所述计算引擎对所述查询语句进行转换得到;

对所述计算任务进行优化,并将优化后的计算任务发送至所述计算引擎,以使所述计算引擎对所述若干个数据库发来的数据执行所述优化后的计算任务,并得到计算结果;

接收由所述计算引擎发来的计算结果;

根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数;其中,所述计算引擎的并行计算指数和单行计算指数均用于表征所述计算引擎执行所述计算任务的难易程度;

根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化;

所述根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化,包括:如果所述计算引擎的并行计算指数大于第一预设值,则对所述计算任务进行递归拆解,直至所述计算引擎的并行计算指数的最大值小于等于第一预设值,终止递归拆解,并生成至少两个计算子任务;

针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最大值是否小于等于第二预设值;

如果小于等于第二预设值,则确定单行计算指数最小的物理单节点,并利用该物理单节点执行至少两个所述计算子任务。

2.根据权利要求1所述的方法,其特征在于,所述根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数,包括:根据所述计算引擎接收的数据,确定所述数据的数据量、数据比重;

根据所述计算引擎,确定所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存;

根据所述数据的数据量、数据比重、所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的并行计算指数:其中,V表示并行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存,G表示所述计算引擎中的物理单节点的个数;

根据所述数据的数据量、数据比重和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的单行计算指数:其中,U表示单行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存。

3.根据权利要求1所述的方法,其特征在于,在所述生成至少两个计算子任务之后,进一步包括:针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最小值是否大于第二预设值;

如果大于第二预设值,则根据所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第一计算子任务和每一个所述第一计算子任务所占的内存,以利用每一个所述物理单节点执行与该物理单节点相对应的所述第一计算子任务。

4.根据权利要求1所述的方法,其特征在于,在所述生成至少两个计算子任务之后,进一步包括:如果存在至少一个所述物理单节点的单行计算指数大于第二预设值且存在至少一个所述物理单节点的单行计算指数小于等于第二预设值,则确定单行计算指数小于等于第二预设值的物理单节点为第一物理单节点、单行计算指数大于第二预设值且小于等于第三预设值的物理单节点为第二物理单节点以及单行计算指数大于第三预设值的物理单节点为第三物理单节点;

对每一个所述第一物理单节点赋予数值为1的第一计算权重,对每一个所述第二物理单节点赋予数值为0.5的第二计算权重,对每一个所述第三物理单节点赋予数值为0的第三计算权重;

根据所述第一物理单节点的个数、所述第一计算权重、所述第二物理单节点的个数、所述第二计算权重、每一个所述第一物理单节点的可用内存和每一个所述第二物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第二计算子任务和每一个所述第二计算子任务所占的内存,以利用每一个所述第一物理单节点执行与该物理单节点相对应的所述第二计算子任务以及利用每一个所述第二物理单节点执行与该物理单节点相对应的所述第二计算子任务。

5.根据权利要求1或3或4所述的方法,其特征在于,在所述确定所述计算引擎的并行计算指数和单行计算指数之后,进一步包括:根据所述计算引擎的单行计算指数,确定所述计算引擎的计算进程的刷新间隔时间;

和/或,

判断所述计算引擎执行优化后的计算任务的计算时长是否大于预设时长,如果大于预设时长,则终止执行该计算任务的所述计算引擎的物理单节点工作;

对该计算任务进行拆解,以利用所述计算引擎对拆解后的计算任务进行并行计算。

6.一种跨数据库的数据查询装置,其特征在于,包括:

第一接收模块,用于接收特定语言格式的查询语句;

解析模块,用于对所述查询语句进行语法解析和校验,以生成查询计划;

发送模块,用于根据所述查询计划,确定与所述查询计划相对应的计算引擎和若干个数据库,并将所述查询语句发送至所述计算引擎;其中,所述计算引擎用于接收由所述若干个数据库发来的数据;

第二接收模块,用于接收由所述计算引擎发来的计算任务;其中,所述计算任务是利用所述计算引擎对所述查询语句进行转换得到;

优化模块,用于对所述计算任务进行优化,并将优化后的计算任务发送至所述计算引擎,以使所述计算引擎对所述若干个数据库发来的数据执行所述优化后的计算任务,并得到计算结果;

第三接收模块,用于接收由所述计算引擎发来的计算结果;

所述优化模块,用于执行如下操作:

根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数;其中,所述计算引擎的并行计算指数和单行计算指数均用于表征所述计算引擎执行所述计算任务的难易程度;

根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化;

所述优化模块,进一步用于执行如下操作:

如果所述计算引擎的并行计算指数大于第一预设值,则对所述计算任务进行递归拆解,直至所述计算引擎的并行计算指数的最大值小于等于第一预设值,终止递归拆解,并生成至少两个计算子任务;

针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最大值是否小于等于第二预设值;

如果小于等于第二预设值,则确定单行计算指数最小的物理单节点,并利用该物理单节点执行至少两个所述计算子任务。

7.一种跨数据库的数据查询装置,其特征在于,包括:至少一个存储器和至少一个处理器;

所述至少一个存储器,用于存储机器可读程序;

所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1-5中任一项所述的方法。

8.一种计算机可读介质,其特征在于,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行权利要求1-5中任一项所述的方法。

说明书 :

一种跨数据库的数据查询方法、查询装置及可读介质

技术领域

[0001] 本发明涉及信息处理技术领域,尤其涉及跨数据库的数据查询方法、查询装置及可读介质。

背景技术

[0002] 数据库是计算机应用系统中的一种专门管理数据资源的系统。数据有多种形式,如文字、数码、符号、图形、图像以及声音等。随着技术的发展,一个数据库中通常都可存储有大量的数据。
[0003] 目前,对于一些业务数据量大或业务数据的分布广泛的公司,通常为了便于管理,而设置有多个数据库。对于上述的情况,当需要获取多个数据库中的相关数据时,传统的查询方法通常需要针对每个数据库进行一一查询,然后再将查询出的数据进行汇总,其查询效率不高。
[0004] 因此,针对以上不足,需要提供一种跨数据库的数据查询方法、查询装置及可读介质。

发明内容

[0005] 本发明要解决的技术问题在于跨数据库的数据查询效率不高,针对现有技术中的缺陷,提供一种跨数据库的数据查询方法、查询装置及可读介质。
[0006] 为了解决上述技术问题,本发明提供了一种跨数据库的数据查询方法,包括:
[0007] 接收特定语言格式的查询语句;
[0008] 对所述查询语句进行语法解析和校验,以生成查询计划;
[0009] 根据所述查询计划,确定与所述查询计划相对应的计算引擎和若干个数据库,并将所述查询语句发送至所述计算引擎;其中,所述计算引擎用于接收由所述若干个数据库发来的数据;
[0010] 接收由所述计算引擎发来的计算任务;其中,所述计算任务是利用所述计算引擎对所述查询语句进行转换得到;
[0011] 对所述计算任务进行优化,并将优化后的计算任务发送至所述计算引擎,以使所述计算引擎对所述若干个数据库发来的数据执行所述优化后的计算任务,并得到计算结果;
[0012] 接收由所述计算引擎发来的计算结果。
[0013] 在一种可能的实现方式中,所述对所述计算任务进行优化,包括:
[0014] 根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数;其中,所述计算引擎的并行计算指数和单行计算指数均用于表征所述计算引擎执行所述计算任务的难易程度;
[0015] 根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化。
[0016] 在一种可能的实现方式中,所述根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数,包括:
[0017] 根据所述计算引擎接收的数据,确定所述数据的数据量、数据比重;
[0018] 根据所述计算引擎,确定所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存;
[0019] 根据所述数据的数据量、数据比重、所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的并行计算指数:
[0020]
[0021] 其中,V表示并行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存,G表示所述计算引擎中的物理单节点的个数;
[0022] 根据所述数据的数据量、数据比重和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的单行计算指数:
[0023]
[0024] 其中,U表示单行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存。
[0025] 在一种可能的实现方式中,所述根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化,包括:
[0026] 如果所述计算引擎的并行计算指数大于第一预设值,则对所述计算任务进行递归拆解,直至所述计算引擎的并行计算指数的最大值小于等于第一预设值,终止递归拆解,并生成至少两个计算子任务;
[0027] 针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最大值是否小于等于第二预设值;
[0028] 如果小于等于第二预设值,则确定单行计算指数最小的物理单节点,并利用该物理单节点执行至少两个所述计算子任务。
[0029] 在一种可能的实现方式中,在所述生成至少两个计算子任务之后,进一步包括:
[0030] 针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最小值是否大于第二预设值;
[0031] 如果大于第二预设值,则根据所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第一计算子任务和每一个所述第一计算子任务所占的内存,以利用每一个所述物理单节点执行与该物理单节点相对应的所述第一计算子任务。
[0032] 在一种可能的实现方式中,在所述生成至少两个计算子任务之后,进一步包括:
[0033] 如果存在至少一个所述物理单节点的单行计算指数大于第二预设值且存在至少一个所述物理单节点的单行计算指数小于等于第二预设值,则确定单行计算指数小于等于第二预设值的物理单节点为第一物理单节点、单行计算指数大于第二预设值且小于等于第三预设值的物理单节点为第二物理单节点以及单行计算指数大于第三预设值的物理单节点为第三物理单节点;
[0034] 对每一个所述第一物理单节点赋予数值为1的第一计算权重,对每一个所述第二物理单节点赋予数值为0.5的第二计算权重,对每一个所述第三物理单节点赋予数值为0的第三计算权重;
[0035] 根据所述第一物理单节点的个数、所述第一计算权重、所述第二物理单节点的个数、所述第二计算权重、每一个所述第一物理单节点的可用内存和每一个所述第二物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第二计算子任务和每一个所述第二计算子任务所占的内存,以利用每一个所述第一物理单节点执行与该物理单节点相对应的所述第二计算子任务以及利用每一个所述第二物理单节点执行与该物理单节点相对应的所述第二计算子任务。
[0036] 在一种可能的实现方式中,在所述确定所述计算引擎的并行计算指数和单行计算指数之后,进一步包括:
[0037] 根据所述计算引擎的单行计算指数,确定所述计算引擎的计算进程的刷新间隔时间;
[0038] 和/或,
[0039] 判断所述计算引擎执行优化后的计算任务的计算时长是否大于预设时长,如果大于预设时长,则终止执行该计算任务的所述计算引擎的物理单节点工作;
[0040] 对该计算任务进行拆解,以利用所述计算引擎对拆解后的计算任务进行并行计算。
[0041] 本发明还提供了一种跨数据库的数据查询装置,包括:
[0042] 第一接收模块,用于接收特定语言格式的查询语句;
[0043] 解析模块,用于对所述查询语句进行语法解析和校验,以生成查询计划;
[0044] 发送模块,用于根据所述查询计划,确定与所述查询计划相对应的计算引擎和若干个数据库,并将所述查询语句发送至所述计算引擎;其中,所述计算引擎用于接收由所述若干个数据库发来的数据;
[0045] 第二接收模块,用于接收由所述计算引擎发来的计算任务;其中,所述计算任务是利用所述计算引擎对所述查询语句进行转换得到;
[0046] 优化模块,用于对所述计算任务进行优化,并将优化后的计算任务发送至所述计算引擎,以使所述计算引擎对所述若干个数据库发来的数据执行所述优化后的计算任务,并得到计算结果;
[0047] 第三接收模块,用于接收由所述计算引擎发来的计算结果。
[0048] 本发明还提供了一种跨数据库的数据查询装置,包括:至少一个存储器和至少一个处理器;
[0049] 所述至少一个存储器,用于存储机器可读程序;
[0050] 所述至少一个处理器,用于调用所述机器可读程序,执行如上述所述的跨数据库的数据查询方法。
[0051] 本发明还提供了一种计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行如上述所述的跨数据库的数据查询方法。
[0052] 实施本发明的跨数据库的数据查询方法、查询装置及可读介质,具有以下有益效果:
[0053] 通过接收特定语言格式的查询语句,对查询语句进行语法解析和校验,以生成查询计划;根据查询计划,确定与查询计划相对应的计算引擎和若干个数据库,并将查询语句发送至计算引擎;接收由计算引擎发来的计算任务,如此借助计算引擎来对若干个数据库发来的数据进行计算,从而可以提高跨数据库的数据查询效率;同时,对接收到的由计算引擎发来的计算任务进行优化,将优化后的计算任务发送至计算引擎,以使计算引擎对若干个数据库发来的数据执行优化后的计算任务,并得到计算结果,如此通过对计算引擎发来的计算任务进行优化,从而可以提高数据的计算效率和稳定性。

附图说明

[0054] 图1是本发明实施例一提供的跨数据库的数据查询方法的流程图;
[0055] 图2是本发明实施例二提供的跨数据库的数据查询方法的流程图;
[0056] 图3是本发明一个实施例提供的跨数据库的数据查询装置所在设备的示意图;
[0057] 图4是本发明一个实施例提供的跨数据库的数据查询装置的示意图。

具体实施方式

[0058] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0059] 实施例一
[0060] 目前,对于一些业务数据量大或业务数据的分布广泛的公司,通常为了便于管理,而设置有多个数据库。如图1所示,本发明实施例提供的跨数据库的数据查询方法,包括:步骤101、接收特定语言格式的查询语句;步骤102、对查询语句进行语法解析和校验,以生成查询计划;步骤103、根据查询计划,确定与查询计划相对应的计算引擎和若干个(即至少一个)数据库,并将查询语句发送至计算引擎;其中,计算引擎用于接收由若干个数据库发来的数据;利用计算引擎对查询语句进行转换得到计算任务;利用计算引擎对若干个数据库发来的数据执行计算任务,并得到计算结果。
[0061] 也就是说,在现有技术中,当需要获取多个数据库中的相关数据时,传统的查询方法通常需要针对每个数据库进行一一查询,然后再将查询出的数据进行汇总,其查询效率不高。或者,如上述步骤描述,借助外部的计算引擎对若干个数据库发来的数据执行计算任务,并得到计算结果,但是这不利于提高数据的计算效率和稳定性。
[0062] 本发明实施例提供的跨数据库的数据查询方法,还包括:步骤104、接收由计算引擎发来的计算任务;其中,计算任务是利用计算引擎对查询语句进行转换得到;步骤105、对计算任务进行优化,并将优化后的计算任务发送至计算引擎,以使计算引擎对若干个数据库发来的数据执行优化后的计算任务,并得到计算结果;步骤106、接收由计算引擎发来的计算结果。如此通过对计算引擎发来的计算任务进行优化,从而可以提高数据的计算效率和稳定性。
[0063] 可以知道的是,该跨数据库的数据查询方法可以支持多种数据库,例如:MySQL、Elasticsearch、Hive、MongoDB、Kylin、Oracle和PostgreSQL等;可以支持多种计算引擎,例如:Spark、Flink、Storm和Samza等;可以支持多种对外调用方式输入的查询语句,例如:命令行调用方式、JDBC调用方式和专用API调用方式等。
[0064] 同时,本发明提供的跨数据库的数据查询方法还具有如下效果:将所有结构化数据查询统一为 SQL 语法,屏蔽了不同数据库各自的DSL语言,节约了学习和开发成本;屏蔽不同数据库之间的隔离性,能够很方便地查询不同数据库中的表;可以选择最合适的方式来执行查询,针对不同特征的数据进行查询分析和对计算任务进行优化,可以选择合适的计算引擎进行计算。
[0065] 在本发明的一种实施例中,在步骤101之前,还可以包括:
[0066] 加载配置文件或通过命令行与若干个数据库建立连接。
[0067] 例如,上述配置文件如下所示:
[0068] {
[0069]   "version": "1.0",
[0070]   "defaultSchema": "TEST",
[0071]   "schemas": [
[0072]     {
[0073]       "name": "TEST",
[0074]       "type": "custom",
[0075]       "factory": "org.apache.calcite.adapter.jdbc.JdbcSchema$Factory",
[0076]       "operand": {
[0077]         "jdbcUrl":
[0078]
[0079]         "jdbcDriver":"com.mysql.cj.jdbc.Driver",
[0080]         "jdbcUser":"test",
[0081]         "jdbcPassword":"test"
[0082]       }
[0083]     }
[0084]   ]
[0085] }
[0086] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,所述对所述计算任务进行优化,包括:
[0087] 根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数;其中,所述计算引擎的并行计算指数和单行计算指数均用于表征所述计算引擎执行所述计算任务的难易程度;
[0088] 根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化。
[0089] 在本发明实施例中,根据计算引擎接收的数据和计算引擎,即可以根据数据量和计算引擎的物理单节点的可用资源(如CPU、内存和磁盘等),确定计算引擎的并行计算指数和单行计算指数,再根据计算引擎的并行计算指数和单行计算指数,如此可以有利于对计算任务进行更细致地优化。
[0090] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,所述根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数,包括:
[0091] 根据所述计算引擎接收的数据,确定所述数据的数据量、数据比重;
[0092] 根据所述计算引擎,确定所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存;
[0093] 根据所述数据的数据量、数据比重、所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的并行计算指数:
[0094]
[0095] 其中,V表示并行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存,G表示所述计算引擎中的物理单节点的个数;
[0096] 根据所述数据的数据量、数据比重和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的单行计算指数:
[0097]
[0098] 其中,U表示单行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存。
[0099] 在本发明实施例中,给出了并行计算指数和单行计算指数具体的计算公式,如此通过数据的数据量(单位:条)、数据的数据比重(单位:KB)、每一个物理单节点的可用内存(单位:GB)等可直接获得的参数,来得到并行计算指数和单行计算指数,并进一步表征计算引擎执行计算任务的难易程度,从而可以提高并行计算指数和单行计算指数确定的速率以及降低并行计算指数和单行计算指数确定的难度。
[0100] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,所述根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化,包括:
[0101] 如果所述计算引擎的并行计算指数大于第一预设值,则对所述计算任务进行递归拆解,直至所述计算引擎的并行计算指数的最大值小于等于第一预设值,终止递归拆解,并生成至少两个计算子任务;
[0102] 针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最大值是否小于等于第二预设值;
[0103] 如果小于等于第二预设值,则确定单行计算指数最小的物理单节点,并利用该物理单节点执行至少两个所述计算子任务。
[0104] 在本发明实施例中,首先利用计算引擎进行并行计算,如此可以充分利用计算引擎的硬件资源(即若干个物理单节点)提高服务吞吐量、降低响应时间,还可以降低计算引擎的内存消耗;当计算引擎的并行计算指数大于第一预设值时,则可以证明计算引擎的硬件资源紧张(或计算困难),即响应时间会增加,此时可对该计算任务进行递归拆解,以利用磁盘为媒介,进行分步计算,如此可以增加计算效率。
[0105] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,在所述生成至少两个计算子任务之后,进一步包括:
[0106] 针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最小值是否大于第二预设值;
[0107] 如果大于第二预设值,则根据所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第一计算子任务和每一个所述第一计算子任务所占的内存,以利用每一个所述物理单节点执行与该物理单节点相对应的所述第一计算子任务。
[0108] 在本发明实施例中,在一个物理单节点的单行计算指数的最小值大于第二预设值时,则可以证明该物理单节点的计算仍然较为困难,如此可对该物理单节点执行的计算子任务继续进行拆解,然后再将计算子任务拆解后得到的第一计算子任务适应性地分配给每一个物理单节点,如此可使该物理单节点的计算变得不那么困难。
[0109] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,在所述生成至少两个计算子任务之后,进一步包括:
[0110] 如果存在至少一个所述物理单节点的单行计算指数大于第二预设值且存在至少一个所述物理单节点的单行计算指数小于等于第二预设值,则确定单行计算指数小于等于第二预设值的物理单节点为第一物理单节点、单行计算指数大于第二预设值且小于等于第三预设值的物理单节点为第二物理单节点以及单行计算指数大于第三预设值的物理单节点为第三物理单节点;
[0111] 对每一个所述第一物理单节点赋予数值为1的第一计算权重,对每一个所述第二物理单节点赋予数值为0.5的第二计算权重,对每一个所述第三物理单节点赋予数值为0的第三计算权重;
[0112] 根据所述第一物理单节点的个数、所述第一计算权重、所述第二物理单节点的个数、所述第二计算权重、每一个所述第一物理单节点的可用内存和每一个所述第二物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第二计算子任务和每一个所述第二计算子任务所占的内存,以利用每一个所述第一物理单节点执行与该物理单节点相对应的所述第二计算子任务以及利用每一个所述第二物理单节点执行与该物理单节点相对应的所述第二计算子任务。
[0113] 在本发明实施例中,如果存在至少一个物理单节点的单行计算指数大于第二预设值且存在至少一个物理单节点的单行计算指数小于等于第二预设值,则可以证明计算引擎中既有计算较为困难的物理单节点,又有计算不太困难的物理单节点,然后通过利用分配计算权重的方式,对计算引擎中的所有物理单节点进行分类,如此可以利用计算不太困难的物理单节点来执行对计算子任务拆解后得到的第二计算子任务,从而可以更好地实现硬件资源的合理利用与分配。
[0114] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,在所述确定所述计算引擎的并行计算指数和单行计算指数之后,进一步包括:
[0115] 根据所述计算引擎的单行计算指数,确定所述计算引擎的计算进程的刷新间隔时间。
[0116] 在本发明实施例中,通过根据不同的单行计算指数来设置不同计算进程的刷新间隔时间,如此可以避免因为意外而导致计算引擎需要重新开始计算(这会耗费大量时间),从而可以保证在不占用太多计算引擎的硬件资源的情况下,进一步提升计算引擎的稳定性,提升用户体验。
[0117] 基于图1所示的跨数据库的数据查询方法,在本发明的一种实施例中,在所述确定所述计算引擎的并行计算指数和单行计算指数之后,进一步包括:
[0118] 判断所述计算引擎执行优化后的计算任务的计算时长是否大于预设时长,如果大于预设时长,则终止执行该计算任务的所述计算引擎的物理单节点工作;
[0119] 对该计算任务进行拆解,以利用所述计算引擎对拆解后的计算任务进行并行计算。
[0120] 在本发明实施例中,在执行优化后的计算任务(包括计算子任务、第一计算子任务、第二计算子任务)的过程中,比较计算引擎中所有的物理单节点的计算进度,如果计算时长大于预设时长,则可以初步判断为数据倾斜,即可以终止执行该计算任务的计算引擎的物理单节点工作,并对该计算任务进行优化,也就是对该计算任务进行拆解。
[0121] 在一些实施方式中,在判断所述计算引擎执行优化后的计算任务的计算时长是否大于预设时长之前,还可以包括:判断预设数量的物理单节点是否均执行完各自的优化后的计算任务。如果是,则判断所述计算引擎执行优化后的计算任务的计算时长是否大于预设时长。如此设置,可以更进一步判断是否产生数据倾斜,以有利于对计算任务在计算阶段更进一步优化。
[0122] 实施例二
[0123] 如图2所示,本发明另一实施例还提供了一种跨数据库的数据查询方法。该方法包括以下步骤:
[0124] 步骤201、接收特定语言格式的查询语句。
[0125] 在本步骤中,特定语言格式的查询语句可以是利用任一种对外调用方式输入的。例如,可以包括:命令行调用方式、JDBC调用方式和/或专用API调用方式。可选地,为进一步提升用户体验,本实施例可针对于不同的用户群体提供相应的对外调用方式。例如,针对于终端用户群体,可为其提供命令行调用方;而针对于开发者用户群体,则可为其提供JDBC(Java DataBase Connectivi ty, java数据库连接)调用方式和/或专用API调用方式。在一些实施方式中,该查询语句可以特定语言格式的SQL语句。
[0126] 步骤202、对所述查询语句进行语法解析和校验,以生成查询计划。
[0127] 在本步骤中,为保障数据查询效率以及避免系统资源浪费,首先需要对接收到的查询语句进行语法校验。在一些实施方式中,若查询语句的语法校验不合格,可为用户反馈相应的提示信息,以供用户根据提示信息进行查询语句的及时修正。待语法校验成功后,可进一步对查询语句进行解析,以生成相应的逻辑查询计划。
[0128] 步骤203、根据所述查询计划,确定与所述查询计划相对应的计算引擎和若干个数据库,并将所述查询语句发送至所述计算引擎;其中,所述计算引擎用于接收由所述若干个数据库发来的数据。
[0129] 在本步骤中,根据逻辑查询计划生成相应的物理执行计划,即确定与所述查询计划相对应的计算引擎和若干个数据库,然后将该查询语句发送至计算引擎进行处理。
[0130] 步骤204、接收由所述计算引擎发来的计算任务;其中,所述计算任务是利用所述计算引擎对所述查询语句进行转换得到。
[0131] 步骤205、根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数;其中,所述计算引擎的并行计算指数和单行计算指数均用于表征所述计算引擎执行所述计算任务的难易程度。
[0132] 在本步骤中,根据所述数据的数据量、数据比重、所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的并行计算指数:
[0133]
[0134] 其中,V表示并行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存,G表示所述计算引擎中的物理单节点的个数;
[0135] 根据所述数据的数据量、数据比重和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的单行计算指数:
[0136]
[0137] 其中,U表示单行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存。
[0138] 步骤206、如果所述计算引擎的并行计算指数大于第一预设值,则对所述计算任务进行递归拆解,直至所述计算引擎的并行计算指数的最大值小于等于第一预设值,终止递归拆解,并生成至少两个计算子任务。
[0139] 在本步骤中,通常数据的数据量等级为万条(或以上),数据的数据比重为2KB,每一个物理单节点的可用内存的等级为几GB,因此,基于经验,可设定该第一预设值为1,当V大于1时,则对计算任务进行递归拆解。
[0140] 步骤207、针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最大值是否小于等于第二预设值;如果小于等于第二预设值,则确定单行计算指数最小的物理单节点,并利用该物理单节点执行至少两个所述计算子任务。
[0141] 在本步骤中,接步骤206,基于经验,可设定第二预设值为0.75,当U小于等于0.75时,则确定U最小的物理单节点,例如可以利用数据路径查找算法来确定,在此不进行赘述。为使计算时间更快,在该步骤中,可不用考虑其它物理单节点的单行计算指数,即利用该物理单节点执行至少两个计算子任务。在该步骤中,可设定计算引擎的计算进程的刷新间隔时间为5分钟。
[0142] 步骤208、针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最小值是否大于第二预设值;如果大于第二预设值,则根据所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第一计算子任务和每一个所述第一计算子任务所占的内存,以利用每一个所述物理单节点执行与该物理单节点相对应的所述第一计算子任务。
[0143] 在本步骤中,当U大于0.75时,可以根据所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第一计算子任务和每一个所述第一计算子任务所占的内存,并通过任务调度器将不同的第一计算子任务发送给相应的物理单节点。可以理解的是,任务调度器可以是外围设备,也可以是集成在执行该方法的软件中的任务调度模块。在该步骤中,可设定计算引擎的计算进程的刷新间隔时间为15分钟。
[0144] 步骤209、如果存在至少一个所述物理单节点的单行计算指数大于第二预设值且存在至少一个所述物理单节点的单行计算指数小于等于第二预设值,则确定单行计算指数小于等于第二预设值的物理单节点为第一物理单节点、单行计算指数大于第二预设值且小于等于第三预设值的物理单节点为第二物理单节点以及单行计算指数大于第三预设值的物理单节点为第三物理单节点。
[0145] 在本步骤中,接步骤207,基于经验,可设定第三预设值为0.85,通过所设定的第二预设值和第三预设值可以将计算引擎中的所有的物理单节点进行分类,以利于对计算子任务的进一步优化。
[0146] 步骤210、对每一个所述第一物理单节点赋予数值为1的第一计算权重,对每一个所述第二物理单节点赋予数值为0.5的第二计算权重,对每一个所述第三物理单节点赋予数值为0的第三计算权重。
[0147] 步骤211、根据所述第一物理单节点的个数、所述第一计算权重、所述第二物理单节点的个数、所述第二计算权重、每一个所述第一物理单节点的可用内存和每一个所述第二物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第二计算子任务和每一个所述第二计算子任务所占的内存,以利用每一个所述第一物理单节点执行与该物理单节点相对应的所述第二计算子任务以及利用每一个所述第二物理单节点执行与该物理单节点相对应的所述第二计算子任务。
[0148] 在本步骤中,可以通过任务调度器将不同的第二计算子任务发送给相应的第一物理单节点和第二物理单节点。可以理解的是,任务调度器可以是外围设备,也可以是集成在执行该方法的软件中的任务调度模块。在该步骤中,对位于0.75
[0149] 如图3和图4所示,本发明实施例提供了一种跨数据库的数据查询装置所在的设备和跨数据库的数据查询装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图3所示,为本发明实施例提供的跨数据库的数据查询装置所在设备的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图4所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。
[0150] 如图4所示,本实施例提供的跨数据库的数据查询装置,包括:
[0151] 第一接收模块401,用于接收特定语言格式的查询语句;
[0152] 解析模块402,用于对所述查询语句进行语法解析和校验,以生成查询计划;
[0153] 发送模块403,用于根据所述查询计划,确定与所述查询计划相对应的计算引擎和若干个数据库,并将所述查询语句发送至所述计算引擎;其中,所述计算引擎用于接收由所述若干个数据库发来的数据;
[0154] 第二接收模块404,用于接收由所述计算引擎发来的计算任务;其中,所述计算任务是利用所述计算引擎对所述查询语句进行转换得到;
[0155] 优化模块405,用于对所述计算任务进行优化,并将优化后的计算任务发送至所述计算引擎,以使所述计算引擎对所述若干个数据库发来的数据执行所述优化后的计算任务,并得到计算结果;
[0156] 第三接收模块406,用于接收由所述计算引擎发来的计算结果。
[0157] 在本发明实施例中,第一接收模块401可用于执行上述方法实施例中的步骤101,解析模块402可用于执行上述方法实施例中的步骤102;发送模块403可用于执行上述方法实施例中的步骤103;第二接收模块404可用于执行上述方法实施例中的步骤104;优化模块405可用于执行上述方法实施例中的步骤105;第三接收模块406可用于执行上述方法实施例中的步骤106。
[0158] 在本发明的一个实施例中,所述优化模块405,用于执行如下操作:
[0159] 根据所述计算引擎接收的数据和所述计算引擎,确定所述计算引擎的并行计算指数和单行计算指数;其中,所述计算引擎的并行计算指数和单行计算指数均用于表征所述计算引擎执行所述计算任务的难易程度;
[0160] 根据所述计算引擎的并行计算指数和单行计算指数,对所述计算任务进行优化。
[0161] 在本发明的一个实施例中,所述优化模块405,进一步用于执行如下操作:
[0162] 根据所述计算引擎接收的数据,确定所述数据的数据量、数据比重;
[0163] 根据所述计算引擎,确定所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存;
[0164] 根据所述数据的数据量、数据比重、所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的并行计算指数:
[0165]
[0166] 其中,V表示并行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存,G表示所述计算引擎中的物理单节点的个数;
[0167] 根据所述数据的数据量、数据比重和每一个所述物理单节点的可用内存,利用如下公式确定所述计算引擎的单行计算指数:
[0168]
[0169] 其中,U表示单行计算指数,X表示所述数据的数据量,Y表示所述数据的数据比重,M表示每一个所述物理单节点的可用内存。
[0170] 在本发明的一个实施例中,所述优化模块405,进一步用于执行如下操作:
[0171] 如果所述计算引擎的并行计算指数大于第一预设值,则对所述计算任务进行递归拆解,直至所述计算引擎的并行计算指数的最大值小于等于第一预设值,终止递归拆解,并生成至少两个计算子任务;
[0172] 针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最大值是否小于等于第二预设值;
[0173] 如果小于等于第二预设值,则确定单行计算指数最小的物理单节点,并利用该物理单节点执行至少两个所述计算子任务。
[0174] 在本发明的一个实施例中,所述优化模块405,进一步用于执行如下操作:
[0175] 针对所述计算引擎中的若干个物理单节点,判断每一个所述物理单节点的单行计算指数的最小值是否大于第二预设值;
[0176] 如果大于第二预设值,则根据所述计算引擎中的物理单节点的个数和每一个所述物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第一计算子任务和每一个所述第一计算子任务所占的内存,以利用每一个所述物理单节点执行与该物理单节点相对应的所述第一计算子任务。
[0177] 在本发明的一个实施例中,所述优化模块405,进一步用于执行如下操作:
[0178] 如果存在至少一个所述物理单节点的单行计算指数大于第二预设值且存在至少一个所述物理单节点的单行计算指数小于等于第二预设值,则确定单行计算指数小于等于第二预设值的物理单节点为第一物理单节点、单行计算指数大于第二预设值且小于等于第三预设值的物理单节点为第二物理单节点以及单行计算指数大于第三预设值的物理单节点为第三物理单节点;
[0179] 对每一个所述第一物理单节点赋予数值为1的第一计算权重,对每一个所述第二物理单节点赋予数值为0.5的第二计算权重,对每一个所述第三物理单节点赋予数值为0的第三计算权重;
[0180] 根据所述第一物理单节点的个数、所述第一计算权重、所述第二物理单节点的个数、所述第二计算权重、每一个所述第一物理单节点的可用内存和每一个所述第二物理单节点的可用内存,对所述计算子任务进行拆解,并获得若干个第二计算子任务和每一个所述第二计算子任务所占的内存,以利用每一个所述第一物理单节点执行与该物理单节点相对应的所述第二计算子任务以及利用每一个所述第二物理单节点执行与该物理单节点相对应的所述第二计算子任务。
[0181] 在本发明的一个实施例中,进一步包括:
[0182] 刷新模块,用于根据所述计算引擎的单行计算指数,确定所述计算引擎的计算进程的刷新间隔时间;
[0183] 和/或,
[0184] 判断模块,用于判断所述计算引擎执行优化后的计算任务的计算时长是否大于预设时长,如果大于预设时长,则终止执行该计算任务的所述计算引擎的物理单节点工作;
[0185] 拆解模块,用于对该计算任务进行拆解,以利用所述计算引擎对拆解后的计算任务进行并行计算。
[0186] 可以理解的是,本发明实施例示意的结构并不构成对跨数据库的数据查询装置的具体限定。在本发明的另一些实施例中,跨数据库的数据查询装置可以包括比图示更多或者更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件、软件或者软件和硬件的组合来实现。
[0187] 上述装置内的各模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0188] 本发明实施例还提供了一种跨数据库的数据查询装置,包括:至少一个存储器和至少一个处理器;
[0189] 所述至少一个存储器,用于存储机器可读程序;
[0190] 所述至少一个处理器,用于调用所述机器可读程序,执行本发明任一实施例中的跨数据库的数据查询方法。
[0191] 本发明实施例还提供了一种计算机可读介质,简称可读介质,存储用于使一计算机执行如本文所述的跨数据库的数据查询方法的指令。具体地,可以提供配有存储介质的方法或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该方法或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
[0192] 在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
[0193] 用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0194] 此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作方法等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
[0195] 此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
[0196] 综上所述,本发明各个实施例所提供的跨数据库的数据查询方法、装置及可读介质,至少具有如下有益效果:
[0197] 1、在本发明实施例中,通过接收特定语言格式的查询语句,对查询语句进行语法解析和校验,以生成查询计划;根据查询计划,确定与查询计划相对应的计算引擎和若干个数据库,并将查询语句发送至计算引擎;接收由计算引擎发来的计算任务,如此借助计算引擎来对若干个数据库发来的数据进行计算,从而可以提高跨数据库的数据查询效率;同时,对接收到的由计算引擎发来的计算任务进行优化,将优化后的计算任务发送至计算引擎,以使计算引擎对若干个数据库发来的数据执行优化后的计算任务,并得到计算结果,如此通过对计算引擎发来的计算任务进行优化,从而可以提高数据的计算效率和稳定性。
[0198] 2、在本发明实施例中,首先利用计算引擎进行并行计算,如此可以充分利用计算引擎的硬件资源(即若干个物理单节点)提高服务吞吐量、降低响应时间,还可以降低计算引擎的内存消耗;当计算引擎的并行计算指数大于第一预设值时,则可以证明计算引擎的硬件资源紧张(或计算困难),即响应时间会增加,此时可对该计算任务进行递归拆解,以利用磁盘为媒介,进行分步计算,如此可以增加计算效率。
[0199] 3、在本发明实施例中,如果存在至少一个物理单节点的单行计算指数大于第二预设值且存在至少一个物理单节点的单行计算指数小于等于第二预设值,则可以证明计算引擎中既有计算较为困难的物理单节点,又有计算不太困难的物理单节点,然后通过利用分配计算权重的方式,对计算引擎中的所有物理单节点进行分类,如此可以利用计算不太困难的物理单节点来执行对计算子任务拆解后得到的第二计算子任务,从而可以更好地实现硬件资源的合理利用与分配。
[0200] 4、在本发明实施例中,如果存在至少一个物理单节点的单行计算指数大于第二预设值且存在至少一个物理单节点的单行计算指数小于等于第二预设值,则可以证明计算引擎中既有计算较为困难的物理单节点,又有计算不太困难的物理单节点,然后通过利用分配计算权重的方式,对计算引擎中的所有物理单节点进行分类,如此可以利用计算不太困难的物理单节点来执行对计算子任务拆解后得到的第二计算子任务,从而可以更好地实现硬件资源的合理利用与分配。
[0201] 5、在本发明实施例中,在执行优化后的计算任务(包括计算子任务、第一计算子任务、第二计算子任务)的过程中,比较计算引擎中所有的物理单节点的计算进度,如果计算时长大于预设时长,则可以初步判断为数据倾斜,即可以终止执行该计算任务的计算引擎的物理单节点工作,并对该计算任务进行优化,也就是对该计算任务进行拆解。
[0202] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。