CN115221249B - 跨库数据查询方法、装置、计算机设备和存储介质 - Google Patents
跨库数据查询方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN115221249B CN115221249B CN202211146494.5A CN202211146494A CN115221249B CN 115221249 B CN115221249 B CN 115221249B CN 202211146494 A CN202211146494 A CN 202211146494A CN 115221249 B CN115221249 B CN 115221249B
- Authority
- CN
- China
- Prior art keywords
- node
- query
- nodes
- pushing
- executed
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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/248—Presentation of query results
Abstract
本申请涉及一种跨库数据查询方法、装置、计算机设备和存储介质。该方法包括:确定基于跨库查询语句构建的数据库查询树;数据库查询树中各节点代表的子语句分别用于从不同数据库中查询数据;从数据库查询树中的次根节点起向下遍历节点以进行向下推送;在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的查询结果,以从根节点开始向下遍历节点进行向下推送;根据各节点的查询结果,生成符合预设查询数据量的目标查询结果。采用本方法能够提高查询效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种跨库数据查询方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,数据库已普遍应用于各种场景,为了避免海量数据存储于一个数据库中所导致的性能问题,经常需要对数据进行分库存储,比如:对于企业的业务系统的数据,可以根据数据所属的不同业务将数据存储于不同的数据库中,例如财务、供应链、销售等业务数据分别存放在不同的数据库。在这种分库存储的情况下,对业务数据的查询涉及到多个分库,如何对不同的数据库进行高效率的跨库关联查询,成为了一个重要问题。
在传统方法中是将查询语句拆分成多个子语句,各子语句分别到各分库上执行查询,然后汇总计算各分库的结果集得到最终查询结果。然而,上述方法中有的子语句在分库查询时可能进行全表扫描或查询出大量不必要数据集,也影响到最后汇总计算得到查询结果的效率,导致跨库查询效率低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高查询效率的跨库数据查询方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种跨库数据查询方法。所述方法包括:
确定基于跨库查询语句构建的数据库查询树;所述数据库查询树中各节点分别代表所述跨库查询语句的子语句;各所述子语句分别用于从不同数据库中查询数据;
从所述数据库查询树中的次根节点起向下遍历节点以进行向下推送;所述向下推送,是指针对当前遍历至的有查询条件且未执行的第一节点,在执行所述第一节点的子语句得到的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送;所述第一节点的查询结果是通过执行所述第一节点的子语句,从相应数据库中查询到的数据;
在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;所述向上推送,是在当前遍历至且未执行的第二节点的子节点的查询结果满足所述预设推送条件的情况下,将所述第二节点的子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果;
在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送;
根据各节点的查询结果,生成符合所述预设查询数据量的目标查询结果。
第二方面,本申请还提供了一种跨库数据查询装置。所述装置包括:
数据库查询树确定模块,用于确定基于跨库查询语句构建的数据库查询树;所述数据库查询树中各节点分别代表所述跨库查询语句的子语句;各所述子语句分别用于从不同数据库中查询数据;
下推模块,用于从所述数据库查询树中的次根节点起向下遍历节点以进行向下推送;所述向下推送,是指针对当前遍历至的有查询条件且未执行的第一节点,在执行所述第一节点的子语句得到的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送;所述第一节点的查询结果是通过执行所述第一节点的子语句,从相应数据库中查询到的数据;
上推模块,用于在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;所述向上推送,是在当前遍历至且未执行的第二节点的子节点的查询结果满足所述预设推送条件的情况下,将所述第二节点的子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果;在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
所述下推模块,还用于基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送;
目标查询结果确定模块,用于根据各节点的查询结果,生成符合所述预设查询数据量的目标查询结果。
在其中一个实施例中,所述数据库查询树确定模块还用于确定跨库查询语句中指定的预设查询数据量;将所述跨库查询语句中各数据库对应的查询语句进行拆分,得到多个子语句;将各所述子语句分别作为节点,并根据各所述子语句所查询的数据表的引用对象之间的聚合关系确定各节点间的连接关系,生成数据库查询树。
在其中一个实施例中,所述下推模块还用于将所述数据库查询树中的次根节点作为当前遍历至的第一节点;识别所述第一节点是否有查询条件以及是否已执行;若所述第一节点有查询条件且未执行,则执行所述第一节点的子语句得到查询结果,在所述第一节点的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送,并将相应子节点作为新的第一节点;若所述第一节点没有查询条件或已执行,则将相应子节点作为新的第一节点;返回执行所述识别所述第一节点是否有查询条件以及是否已执行及后续步骤。
在其中一个实施例中,所述上推模块还用于将叶子节点作为当前遍历至的第二节点;识别所述第二节点是否已执行;若所述第二节点未执行,则在相应子节点的查询结果满足所述预设推送条件的情况下,将相应子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果,将相应父节点作为新的第二节点;若所述第二节点已执行,则将相应父节点作为新的第二节点;返回执行所述识别所述第二节点是否已执行及后续步骤。
在其中一个实施例中,所述下推模块还用于在向上推送完成后,若已执行的节点的数量和未执行且没有查询条件的节点的数量之和符合所述数据库查询树中除根节点之外的节点的数量,则执行所述基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送及后续步骤。
在其中一个实施例中,所述下推模块还用于在完成第一轮向下推送和向上推送的基础上,从所述数据库查询树中的次根节点起向下遍历节点以进行向下推送;
所述上推模块还用于在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;在完成第二轮向上推送后,基于各已执行的节点的查询结果确定根节点的查询条件。
在其中一个实施例中,所述上推模块还用于在第二轮向上推送中,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,并对当前遍历至且在本轮向上推送中仍未执行的节点添加标记;在第二轮向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
所述下推模块还用于若被添加标记的节点的数量和已执行的节点的数量之和符合所述数据库查询树中除根节点外的节点数量,则执行所述基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送及后续步骤。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行本申请各实施例所述的跨库数据查询方法中的步骤。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行本申请各实施例所述的跨库数据查询方法中的步骤。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,使得所述处理器执行本申请各实施例所述的跨库数据查询方法中的步骤。
上述跨库数据查询方法、装置、计算机设备、存储介质和计算机程序产品,确定基于跨库查询语句构建的数据库查询树,从数据库查询树中的次根节点起向下遍历节点以进行向下推送,在向下推送完成后从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,在向上推送完成后基于各已执行的节点的查询结果确定根节点的查询条件,从而能够将除根节点之外有查询条件的节点都执行掉,将已执行的各节点的查询结果带入到根节点的查询条件去约束根节点的查询,从而使得最后能够带上预设查询数据量从根节点开始向下推送,避免了一开始直接带上预设查询数据量从根节点开始向下推送所导致的根节点查询到的符合预设查询数据量的查询结果无法满足后续节点的查询条件的问题,因为带上预设数据量从根节点开始向下推送,所以使得根节点的查询结果数据量不会过大,避免了根节点的查询结果数据量过大而无法满足预设推送条件向下推送的情况,使得未执行且没有查询条件的节点无需等到最后强制执行而全表扫描导致查询出大量不必要的数据集,而是在从根节点开始向下推送的过程中就能将各个未执行且没有查询条件的节点执行到,无需全表扫描导致得到大量数据集,最后简单汇总各个节点的少量的查询结果即可得到符合预设查询数据量的目标查询结果,提高了跨库数据查询的查询效率。
附图说明
图1为一个实施例中跨库数据查询方法的应用环境图;
图2为一个实施例中跨库数据查询方法的流程示意图;
图3为一个实施例中数据库查询树的结构示意图;
图4为一个实施例中基于数据库查询树展示的跨库数据查询方法的整体流程示意图;
图5为一个实施例中两个子节点情况下跨库数据查询方法的整体流程示意图;
图6为一个实施例中跨库数据查询装置的结构框图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的跨库数据查询方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据,数据存储系统可以包含多个数据库106。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。终端102可以根据用户输入的待查询的属性和条件生成跨库查询语句,并将跨库查询语句发送至服务器104。服务器104可以根据跨库查询语句执行本申请各实施例中的跨库数据查询方法,以从跨库查询语句的各个子语句所对应的数据库106中查询数据,得到目标查询结果,服务器104可以将目标查询结果发送至终端102进行展示。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。数据库106可以是任意类型的数据库。
在一个实施例中,如图2所示,提供了一种跨库数据查询方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤:
步骤202,确定基于跨库查询语句构建的数据库查询树;数据库查询树中各节点分别代表跨库查询语句的子语句;各子语句分别用于从不同数据库中查询数据。
其中,跨库查询语句,是用于指示针对存储于不同数据库中的数据进行数据查询的语句。子语句,是将跨库查询语句按照查询数据库的不同进行拆分所得到的语句。数据库查询树,是一种包含多个节点的树形结构。数据库查询树中各个节点的连接关系取决于相应子语句所查询的数据表的引用对象之间的聚合关系。比如:子语句A所查询的数据表中引用了子语句B所查询的数据表,则子语句B对应的节点为子语句A对应的节点的子节点。
具体地,服务器可以将跨库查询语句进行拆分得到多个子语句,根据各个子语句所查询的数据表的引用对象之间的聚合关系,将子语句作为节点,构建数据库查询树。
在一个实施例中,跨库查询语句可以是基于对象查询语言(OQL,Ontology QueryLanguage)的语句。在一个实施例中,子语句可以是基于结构化查询语言(SQL,StructuredQuery Language)的语句。
例如:跨库查询语句为:
Select top 10 id,material.name from sale_order where billno like ‘%123%’;
其中,sale_order和material分别代表一个数据表,sale_order和material在不同的数据库中,id、billno和material是sale_order数据表中的属性对象,sale_order引用material数据表作为属性对象,name是material数据表中的属性对象。上述跨库查询语句的含义是:从sale_order数据表中查询billno属性对象值中包含“123”的id和material.name的属性对象值中的前10条数据。
将上述跨库查询语句拆分得到两条子语句Sql1和Sql2分别为:
Sql1:select top 10 id from sale_order where billno like ‘%123%’;
Sql2:select material.name from material where id in (...);
上述子语句Sql1用于从sale_order数据表中查询数据,子语句Sql2用于从material数据表中查询数据。
如图3所示,是数据库查询树的结构示意图,每个节点分表代表一条子语句,即,图中的sql1、sql2、sql3、sql4和sql5分别为一条子语句,它们所对应的位置分别为一个节点。sql2和sql3是sql1的子节点,表明sql1所查询的数据表中引用了sql2和sql3所查询的数据表。Sql4和sql5是sql3的子节点,表明sql3所查询的数据表中引用了sql4和sql5所查询的数据表。
步骤204,从数据库查询树中的次根节点起向下遍历节点以进行向下推送;向下推送,是指针对当前遍历至的有查询条件且未执行的第一节点,在执行第一节点的子语句得到的查询结果满足预设推送条件的情况下,将第一节点的查询结果作为相应子节点的查询条件向子节点推送;第一节点的查询结果是通过执行第一节点的子语句,从相应数据库中查询到的数据。
其中,次根节点,是指根节点的子节点,即,根节点的下一层级的节点。子节点,是指下一层级且与之相连接的节点。例如:在如图3所示的数据库查询树中,sql1对应的节点为根节点,sql2和sql3对应的节点是sql1对应的节点的子节点,因此,sql2和sql3对应的节点是次根节点。
查询条件,用于对查询的数据所符合的条件进行限制,是子语句中的一部分。比如:前述例子中的where billno like ‘%123%’即为查询条件。预设推送条件,用于判定是否可以将当前遍历至的节点的查询结果作为下一节点的查询条件进行推送。查询结果,是通过执行节点对应的子语句从节点对应的数据库的数据表中查询到的数据。第一节点,是指从数据库查询树中的次根节点起向下遍历节点的过程中当前遍历至的节点。
具体地,服务器可以从数据库查询树中的次根节点起依次向下遍历数据库查询树中除根节点之外的各个节点,以从各个当前遍历至的第一节点向下推送。
在一个实施例中,预设推送条件可以是查询结果的数据量不超过预设查询数据量阈值。若查询结果的数据量不超过预设查询数据量阈值,则表明查询结果满足预设推送条件。若查询结果的数据量超过预设查询数据量阈值,则表明查询结果不满足预设推送条件。
在一个实施例中,在向下遍历过程中,若当前遍历至的第一节点没有查询条件,则继续遍历至下一节点(即,当前遍历至的第一节点的子节点)。若当前遍历至的第一节点有查询条件,则执行第一节点的子语句得到的查询结果,并在第一节点的查询结果满足预设推送条件的情况下,将第一节点的查询结果作为第一节点的子节点的查询条件向子节点推送。直至遍历至叶子节点,结束向下遍历。若第一节点的查询结果不满足预设推送条件,则不将第一节点的查询结果作为第一节点的子节点的查询条件向子节点推送,而是直接遍历至下一节点。
在一个实施例中,将第一节点的查询结果作为相应子节点的查询条件向子节点推送,是指将第一节点的查询结果作为相应子节点的查询条件带入至相应子节点对应的子语句中,即,此时相应子节点也有了查询条件。
步骤206,在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;向上推送,是在当前遍历至且未执行的第二节点的子节点的查询结果满足预设推送条件的情况下,将第二节点的子节点的查询结果作为查询条件向第二节点推送,并执行第二节点对应的子语句得到相应查询结果。
其中,叶子节点,是数据库查询树中最下层的节点,即,数据库查询树中没有子节点的节点。例如:在如图3所示的数据库查询树中,sql4和sql5对应的节点没有子节点,因此,sql4和sql5对应的节点为叶子节点。第二节点,是指从叶子节点起向上遍历除根节点之外的各节点的过程中当前遍历至的节点。
具体地,服务器可以从数据库查询树中的叶子节点起依次向上遍历数据库查询树中除根节点之外的各个节点,以从各个当前遍历至的第二节点向上推送。
在一个实施例中,在向上遍历过程中,若当前遍历至的第二节点没有子节点(即,第二节点为叶子节点)且未执行过且有查询条件,则执行第二节点对应的子语句。若当前遍历至的第二节点未执行过,且第二节点的子节点的查询结果满足预设推送条件,则将第二节点的子节点的查询结果作为查询条件向第二节点推送,并执行第二节点对应的子语句得到相应查询结果。若当前遍历至的第二节点执行过,则继续遍历至下一节点(即,当前遍历至的第二节点的父节点)。直至遍历至次根节点,结束向上遍历。若第二节点的子节点的查询结果不满足预设推送条件,则不将第二节点的子节点的查询结果作为查询条件向第二节点推送,而是直接遍历至下一节点。
在一个实施例中,将第二节点的子节点的查询结果作为查询条件向第二节点推送,是指将第二节点的子节点的查询结果作为第二节点的查询条件带入至第二节点对应的子语句中,即,此时第二节点也有了查询条件。
步骤208,在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件。
具体地,服务器可以将各已执行的节点的查询结果作为查询条件带入至根节点的子语句中。
步骤210,基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送。
其中,预设查询数据量,是指本次数据查询所需要查询的数据量。比如:前述例子的top 10中的10即为预设查询数据量。
在一个实施例中,预设查询数据量可以是分页数据量(即,每一个页面要展示的数据条数)。
具体地,服务器可以将预设查询数据量带入至根节点的子语句中,并将各已执行的节点的查询结果作为查询条件带入至根节点的子语句中,然后执行根节点的子语句得到根节点对应的、且符合预设查询数据量的查询结果。然后将根节点的查询结果作为查询条件向次根节点推送,以从根节点开始向下遍历各节点进行向下推送。
在一个实施例中,在向下遍历过程中,若当前遍历至的节点有查询条件且执行过,则继续遍历至下一节点(即,当前遍历至的节点的子节点)。若当前遍历至的节点有查询条件且未执行过,则执行当前遍历至的节点的子语句得到的查询结果,并在当前遍历至的节点的查询结果满足预设推送条件的情况下,将当前遍历至的节点的查询结果作为当前遍历至的节点的子节点的查询条件向子节点推送。直至遍历至叶子节点,结束向下遍历。
可以理解,因为执行根节点的子语句时带上了预设查询数据量,所以根节点的查询结果不会超过预设推送条件,所以根节点的查询结果可以作为子节点的查询条件向下推送,因此,在本轮向下遍历的过程中,各个之前没有查询条件且未执行过的节点,都会被推送而得到查询条件,从而能够在本轮向下遍历过程中将各个之前没有查询条件且未执行过的节点执行掉,因为得到了查询条件所以无需全表扫描。
步骤212,根据各节点的查询结果,生成符合预设查询数据量的目标查询结果。
其中,目标查询结果,是跨库查询语句的查询结果。
在一个实施例中,服务器可以将各个目标节点的查询结果进行合并,生成符合预设查询数据量的目标查询结果。目标节点,是针对跨库查询语句所查询的数据所属的数据表进行查询的子语句对应的节点。
如图4所示,是基于数据库查询树展示的跨库数据查询方法的整体流程示意图。首先根据跨库查询语句生成如图所示的数据库查询树,然后先执行除根节点以外的节点(即,sql2、sql3、sql4和sql5)的查询及推送,即,从次根节点(sql2和sql3)开始向下遍历各节点以进行向下推送,再从叶子节点(sql4和sql5)起向上遍历除根节点(sql1)之外的各节点以进行向上推送,在向上推送完成后,再从根节点(sql1)开始带上预设查询数据量向下推送。
可以理解,假如直接从根节点开始向下推送,则在某些情况下可能存在一些问题,例如:根节点对应的查询结果的数据量可能非常大,容易不满足预设推送条件,导致无法将根节点的查询结果作为查询条件向下推送,这样使得有些不带查询条件的节点无法在向下推送过程中执行到,需要在最后进行强制执行,因为不带查询条件,所以强制执行时需要对该节点对应的子语句所针对的整个数据表进行全表扫描,导致数据查询效率比较低。
上述跨库数据查询方法,确定基于跨库查询语句构建的数据库查询树,从数据库查询树中的次根节点起向下遍历节点以进行向下推送,在向下推送完成后从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,在向上推送完成后基于各已执行的节点的查询结果确定根节点的查询条件,从而能够将除根节点之外有查询条件的节点都执行掉,将已执行的各节点的查询结果带入到根节点的查询条件去约束根节点的查询,从而使得最后能够带上预设查询数据量从根节点开始向下推送,避免了一开始直接带上预设查询数据量从根节点开始向下推送所导致的根节点查询到的符合预设查询数据量的查询结果无法满足后续节点的查询条件的问题,因为带上预设查询数据量从根节点开始向下推送,所以使得根节点的查询结果数据量不会过大,避免了根节点的查询结果数据量过大而无法满足预设推送条件向下推送的情况,使得未执行且没有查询条件的节点无需等到最后强制执行而全表扫描导致查询出大量不必要的数据集,而是在从根节点开始向下推送的过程中就能将各个未执行且没有查询条件的节点执行到,无需全表扫描导致得到大量数据集,最后简单汇总各个节点的少量的查询结果即可得到符合预设查询数据量的目标查询结果,提高了跨库数据查询的查询效率。
在一个实施例中,在确定基于跨库查询语句构建的数据库查询树之前,该方法还包括:确定跨库查询语句中指定的预设查询数据量;确定基于跨库查询语句构建的数据库查询树包括:将跨库查询语句中各数据库对应的查询语句进行拆分,得到多个子语句;将各子语句分别作为节点,并根据各子语句所查询的数据表的引用对象之间的聚合关系确定各节点间的连接关系,生成数据库查询树。
其中,数据表的引用对象,是指数据表中引用另一个数据表的属性对象。
具体地,服务器可以按照查询的数据库的不同,将跨库查询语句拆分成多个子语句。服务器可以将第二子语句对应的节点与第一子语句对应的节点相连接,并且作为第一子语句对应的节点的子节点。其中,第二子语句所查询的数据表,是第一子语句所查询的数据表中的引用对象所引用的数据表。
例如:前述的“Select top 10 id,material.name from sale_order wherebillno like ‘%123%’;”这一跨库查询语句中,top10 中的10即为指定的预设查询数据量,服务器可以将top对应的数值确定为预设查询数据量。material和sale_order均为数据表,而且material 是sale_order中的属性对象,由于material这一属性对象有引用相应的数据表material,所以material是sale_order的引用对象。因为material是sale_order的引用对象,所以用于查询material这一数据表的子语句(即,前述例子中拆分得到的子语句Sql2)对应的节点可以与用于查询sale_order这一数据表的子语句(即,前述例子中拆分得到的子语句Sql1)对应的节点相连接,并且作为用于查询sale_order这一数据表的子语句(即,前述例子中拆分得到的子语句Sql1)对应的节点的子节点。
上述实施例中,从跨库查询语句中确定预设查询数据量,而且将跨库查询语句进行拆分生成数据库查询树,从而能够按照数据查询树的结构来依次执行各个子语句,解决了传统方法无法对不同数据库进行高效的跨库关联查询的问题,而且通过确定预设查询数据量,能够在从根节点开始向下推送时带上预设查询数据量,避免了未执行且没有查询条件的节点需要等到最后强制执行而全表扫描的问题,提高了跨库数据查询的查询效率。
在一个实施例中,从数据库查询树中的次根节点起向下遍历节点以进行向下推送包括:将数据库查询树中的次根节点作为当前遍历至的第一节点;识别第一节点是否有查询条件以及是否已执行;若第一节点有查询条件且未执行,则执行第一节点的子语句得到查询结果,在第一节点的查询结果满足预设推送条件的情况下,将第一节点的查询结果作为相应子节点的查询条件向子节点推送,并将相应子节点作为新的第一节点;若第一节点没有查询条件或已执行,则将相应子节点作为新的第一节点;返回执行识别第一节点是否有查询条件以及是否已执行及后续步骤。
具体地,服务器可以先将数据库查询树中的次根节点作为当前遍历至的第一节点,然后识别第一节点是否有查询条件以及是否已执行。若第一节点有查询条件且未执行,则执行第一节点的子语句得到查询结果,在第一节点的查询结果满足预设推送条件的情况下,将第一节点的查询结果作为相应子节点的查询条件向子节点推送,并将相应子节点作为新的第一节点,再返回识别第一节点是否有查询条件以及是否已执行的步骤以继续向下遍历。若第一节点的查询结果不满足预设推送条件,则不将第一节点的查询结果作为相应子节点的查询条件向子节点推送,而是直接将相应子节点作为新的第一节点,再返回识别第一节点是否有查询条件以及是否已执行的步骤以继续向下遍历。若第一节点没有查询条件或已执行,则将相应子节点作为新的第一节点,再返回识别第一节点是否有查询条件以及是否已执行的步骤以继续向下遍历。
上述实施例中,从数据库查询树中的次根节点起向下遍历节点以进行向下推送,能够将除根节点之外有查询条件的节点执行掉,从而使得最后能够带上预设查询数据量从根节点开始向下推送,使得根节点的查询结果数据量不会过大,避免了根节点的查询结果数据量过大而无法满足预设推送条件向下推送的情况,使得未执行且没有查询条件的节点无需等到最后强制执行而全表扫描,而是在从根节点开始向下推送的过程中就能将各个未执行且没有查询条件的节点执行到,无需全表扫描,提高了跨库数据查询的查询效率。
在一个实施例中,在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送包括:将叶子节点作为当前遍历至的第二节点;识别第二节点是否已执行;若第二节点未执行,则在相应子节点的查询结果满足预设推送条件的情况下,将相应子节点的查询结果作为查询条件向第二节点推送,并执行第二节点对应的子语句得到相应查询结果,将相应父节点作为新的第二节点;若第二节点已执行,则将相应父节点作为新的第二节点;返回执行识别第二节点是否已执行及后续步骤。
具体地,服务器可以先将叶子节点作为当前遍历至的第二节点,识别第二节点是否已执行。若第二节点未执行,则在第二节点的子节点的查询结果满足预设推送条件的情况下,将第二节点的子节点的查询结果作为查询条件向第二节点推送,并执行第二节点对应的子语句得到相应查询结果,将第二节点的父节点作为新的第二节点,返回识别第二节点是否已执行的步骤以继续向上遍历。若第二节点的子节点的查询结果不满足预设推送条件,则不第二节点的子节点的查询结果作为查询条件向第二节点推送,而是直接将第二节点的父节点作为新的第二节点,返回识别第二节点是否已执行的步骤以继续向上遍历。若第二节点未执行且没有子节点且有查询条件,则执行第二节点对应的子语句得到相应查询结果,并将第二节点的父节点作为新的第二节点,返回识别第二节点是否已执行的步骤以继续向上遍历。若第二节点已执行,则将第二节点的父节点作为新的第二节点,返回执行识别第二节点是否已执行及后续步骤以继续向上遍历。
上述实施例中,在向下推送完成后从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,从而能够将除根节点之外有查询条件的节点执行掉,将已执行的各节点的查询结果带入到根节点的查询条件去约束根节点的查询,从而使得最后能够带上预设查询数据量从根节点开始向下推送,使得根节点的查询结果数据量不会过大,避免了根节点的查询结果数据量过大而无法满足预设推送条件向下推送的情况,使得未执行且没有查询条件的节点无需等到最后强制执行而全表扫描,而是在从根节点开始向下推送的过程中就能将各个未执行且没有查询条件的节点执行到,无需全表扫描,提高了跨库数据查询的查询效率。
在一个实施例中,该方法还包括:在向上推送完成后,若已执行的节点的数量和未执行且没有查询条件的节点的数量之和符合数据库查询树中除根节点之外的节点的数量,则执行基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送及后续步骤。
具体地,在向上推送完成后,服务器可以确定未执行且没有查询条件的节点的数量,然后计算已执行的节点的数量和未执行且没有查询条件的节点的数量之和,将计算结果与数据库查询树中除根节点之外的节点的数量进行比对,若计算结果符合数据库查询树中除根节点之外的节点的数量,则执行基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送及后续步骤。
在一个实施例中,服务器可以在完成第一轮向下推送和向上推送的基础上,再执行一轮向下推送和向上推送,以对未执行且没有查询条件的节点添加标记,根据添加的标记确定未执行且没有查询条件的节点的数量。
在另一个实施例中,服务器可以在在第一轮向上推送的过程中确定未执行且没有查询条件的节点的数量。
在其他实施例中,服务器还可以通过其他方式来确定未执行且没有查询条件的节点的数量,不做限定。
上述实施例中,若已执行的节点的数量和未执行且没有查询条件的节点的数量之和符合数据库查询树中除根节点之外的节点的数量,则从根节点开始带上预设查询数据量向下推送,从而确保能够从根节点开始带上预设查询数据量向下推送。
在一个实施例中,在在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送之后,方法还包括:在完成第一轮向下推送和向上推送的基础上,从数据库查询树中的次根节点起向下遍历节点以进行向下推送,并在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,以进行第二轮向下推送和向上推送;在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件包括:在完成第二轮向上推送后,基于各已执行的节点的查询结果确定根节点的查询条件。
其中,第一轮向下推送和向上推送,是指在确定数据库查询树后,从数据库查询树中的次根节点起向下遍历节点以进行向下推送,在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送这一过程。
具体地,在完成第一轮向下推送和向上推送之后,服务器可以再次从数据库查询树中的次根节点起依次向下遍历数据库查询树中除根节点之外的各个节点,以从各个当前遍历至的第一节点向下推送,然后从数据库查询树中的叶子节点起依次向上遍历数据库查询树中除根节点之外的各个节点,以从各个当前遍历至的第二节点向上推送,从而完成第二轮向下推送和向上推送。在完成第二轮向下推送和向上推送后,服务器可以将各已执行的节点的查询结果作为查询条件带入至根节点的子语句中。
上述实施例中,通过执行第二轮向下推送和向上推送,能够确保能执行的节点都执行到,从而确保能够从根节点开始带上预设查询数据量向下推送。
在一个实施例中,第二轮向上推送包括如下步骤:从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,并对当前遍历至且在本轮向上推送中仍未执行的节点添加标记;在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件包括:在第二轮向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;若被添加标记的节点的数量和已执行的节点的数量之和符合数据库查询树中除根节点外的节点数量,则执行基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送及后续步骤。
具体地,在第二轮向上推送过程中,服务器可以从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,并在此过程中对当前遍历至且在本轮向上推送中仍未执行的节点添加标记,在第二轮向上推送完成后,服务器可以基于各已执行的节点的查询结果确定根节点的查询条件,并确定被添加标记的节点的数量,再确定被添加标记的节点的数量和已执行的节点的数量之和是否符合数据库查询树中除根节点外的节点数量,若符合,则执行基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送及后续步骤。
上述实施例中,在第二轮向上推送的过程中,对在本轮向上推送中仍未执行的节点添加标记,从而能够根据标记确定已执行的节点的数量和未执行且没有查询条件的节点的数量之和是否符合数据库查询树中除根节点之外的节点的数量,若符合才从根节点开始带上预设查询数据量向下推送,从而确保能够从根节点开始带上预设查询数据量向下推送。
如图5所示,是在将跨库查询语句“Select top 10 id,material.name fromsale_order where billno like ‘%123%’;”拆分得到两条子语句Sql1和Sql2的前述例子的情况下执行本申请各实施例中的跨库数据查询方法的整体流程示意图,具体包括如下步骤:
S502,从sql2的节点开始向下遍历,由于sql2没有查询条件,则不执行,向下推送结束。
S504,继续向下遍历,由于sql2是叶子节点,所以向下遍历结束。然后,从sql2起向上遍历,由于sql2没有查询条件,则不执行sql2。
S506,由于sql2的父节点是根节点,所以向上遍历结束,此时需要将各节点的查询结果上推给根节点sql1,但是由于sql2没有执行,所以不会作为查询条件推送给根节点sql1。
S508,从sql2的节点开始再次向下遍历,由于sql2没有查询条件,则不执行,向下推送结束。
S510,继续向下遍历,由于sql2是叶子节点,所以向下遍历结束。开始从sql2起向上遍历,由于sql2没有查询条件,则不执行,但会给sql2的节点添加标记。
S512,由于sql2的父节点是根节点,所以向上遍历结束,此时需要将各节点的查询结果上推给根节点sql1,但是由于sql2没有执行,所以不会作为查询条件推送给根节点sql1。
S514,由于sql2被添加标记,所以已执行的节点数量与被添加标记的节点数量之和符合除根节点之外的节点数量,则从根节点sql1开始带上预设查询数据量向下推送。
S516,向下遍历,由于根节点sql1已执行过,则不再执行。
S518,遍历至sql2,由于执行根节点的子语句时带上了预设查询数据量,所以根节点的查询结果满足预设推送条件,则将根节点的查询结果作为查询条件推送给sql2,执行sql2得到相应查询结果。
S520,将sql1与sql2的查询结果进行合并得到目标查询结果。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的跨库数据查询方法的跨库数据查询装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个跨库数据查询装置实施例中的具体限定可以参见上文中对于跨库数据查询方法的限定,在此不再赘述。
在一个实施例中,如图6所示,提供了一种跨库数据查询装置600,包括:数据库查询树确定模块602、下推模块604、上推模块606和目标查询结果确定模块608,其中:
数据库查询树确定模块602,用于确定基于跨库查询语句构建的数据库查询树;数据库查询树中各节点分别代表跨库查询语句的子语句;各子语句分别用于从不同数据库中查询数据。
下推模块604,用于从数据库查询树中的次根节点起向下遍历节点以进行向下推送;向下推送,是指针对当前遍历至的有查询条件且未执行的第一节点,在执行第一节点的子语句得到的查询结果满足预设推送条件的情况下,将第一节点的查询结果作为相应子节点的查询条件向子节点推送;第一节点的查询结果是通过执行第一节点的子语句,从相应数据库中查询到的数据。
上推模块606,用于在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;向上推送,是在当前遍历至且未执行的第二节点的子节点的查询结果满足预设推送条件的情况下,将第二节点的子节点的查询结果作为查询条件向第二节点推送,并执行第二节点对应的子语句得到相应查询结果;在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件。
下推模块604,还用于基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送。
目标查询结果确定模块608,用于根据各节点的查询结果,生成符合预设查询数据量的目标查询结果。
在一个实施例中,数据库查询树确定模块602还用于确定跨库查询语句中指定的预设查询数据量;将跨库查询语句中各数据库对应的查询语句进行拆分,得到多个子语句;将各子语句分别作为节点,并根据各子语句所查询的数据表的引用对象之间的聚合关系确定各节点间的连接关系,生成数据库查询树。
在一个实施例中,下推模块604还用于将数据库查询树中的次根节点作为当前遍历至的第一节点;识别第一节点是否有查询条件以及是否已执行;若第一节点有查询条件且未执行,则执行第一节点的子语句得到查询结果,在第一节点的查询结果满足预设推送条件的情况下,将第一节点的查询结果作为相应子节点的查询条件向子节点推送,并将相应子节点作为新的第一节点;若第一节点没有查询条件或已执行,则将相应子节点作为新的第一节点;返回执行识别第一节点是否有查询条件以及是否已执行及后续步骤。
在一个实施例中,上推模块606还用于将叶子节点作为当前遍历至的第二节点;识别第二节点是否已执行;若第二节点未执行,则在相应子节点的查询结果满足预设推送条件的情况下,将相应子节点的查询结果作为查询条件向第二节点推送,并执行第二节点对应的子语句得到相应查询结果,将相应父节点作为新的第二节点;若第二节点已执行,则将相应父节点作为新的第二节点;返回执行识别第二节点是否已执行及后续步骤。
在一个实施例中,下推模块604还用于在向上推送完成后,若已执行的节点的数量和未执行且没有查询条件的节点的数量之和符合数据库查询树中除根节点之外的节点的数量,则执行基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送及后续步骤。
在一个实施例中,下推模块604还用于在完成第一轮向下推送和向上推送的基础上,从数据库查询树中的次根节点起向下遍历节点以进行向下推送。上推模块606还用于在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;在完成第二轮向上推送后,基于各已执行的节点的查询结果确定根节点的查询条件。
在一个实施例中,上推模块606还用于在第二轮向上推送中,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,并对当前遍历至且在本轮向上推送中仍未执行的节点添加标记;在第二轮向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;下推模块604还用于若被添加标记的节点的数量和已执行的节点的数量之和符合数据库查询树中除根节点外的节点数量,则执行基于预设查询数据量和根节点的查询条件执行根节点的子语句,得到根节点对应的、且符合预设查询数据量的查询结果,以从根节点开始向下遍历节点进行向下推送及后续步骤。
上述跨库数据查询装置,确定基于跨库查询语句构建的数据库查询树,从数据库查询树中的次根节点起向下遍历节点以进行向下推送,在向下推送完成后从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,在向上推送完成后基于各已执行的节点的查询结果确定根节点的查询条件,从而能够将除根节点之外有查询条件的节点都执行掉,将已执行的各节点的查询结果带入到根节点的查询条件去约束根节点的查询,从而使得最后能够带上预设查询数据量从根节点开始向下推送,避免了一开始直接带上预设查询数据量从根节点开始向下推送所导致的根节点查询到的符合预设查询数据量的查询结果无法满足后续节点的查询条件的问题,因为带上预设查询数据量从根节点开始向下推送,所以使得根节点的查询结果数据量不会过大,避免了根节点的查询结果数据量过大而无法满足预设推送条件向下推送的情况,使得未执行且没有查询条件的节点无需等到最后强制执行而全表扫描导致查询出大量不必要的数据集,而是在从根节点开始向下推送的过程中就能将各个未执行且没有查询条件的节点执行到,无需全表扫描导致得到大量数据集,最后简单汇总各个节点的少量的查询结果即可得到符合预设查询数据量的目标查询结果,提高了跨库数据查询的查询效率。
上述跨库数据查询装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种跨库数据查询方法。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (16)
1.一种跨库数据查询方法,其特征在于,所述方法包括:
确定基于跨库查询语句构建的数据库查询树;所述数据库查询树中各节点分别代表所述跨库查询语句的子语句;各所述子语句分别用于从不同数据库中查询数据;
从所述数据库查询树中的次根节点起依次向下遍历除根节点之外的各个节点,以从各个当前遍历至的有查询条件且未执行的第一节点进行向下推送;所述向下推送,是指针对当前遍历至的有查询条件且未执行的第一节点,在执行所述第一节点的子语句得到的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送;所述第一节点的查询结果是通过执行所述第一节点的子语句,从相应数据库中查询到的数据;
在向下推送完成后,从叶子节点起依次向上遍历除根节点之外的各节点,以从各个当前遍历至的未执行的第二节点进行向上推送;所述向上推送,是在当前遍历至且未执行的第二节点的子节点的查询结果满足所述预设推送条件的情况下,将所述第二节点的子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果;
在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送;
根据各节点的查询结果,生成符合所述预设查询数据量的目标查询结果。
2.根据权利要求1所述的方法,其特征在于,在所述确定基于跨库查询语句构建的数据库查询树之前,所述方法还包括:
确定跨库查询语句中指定的预设查询数据量;
所述确定基于跨库查询语句构建的数据库查询树包括:
将所述跨库查询语句中各数据库对应的查询语句进行拆分,得到多个子语句;
将各所述子语句分别作为节点,并根据各所述子语句所查询的数据表的引用对象之间的聚合关系确定各节点间的连接关系,生成数据库查询树。
3.根据权利要求1所述的方法,其特征在于,所述从所述数据库查询树中的次根节点起向下遍历节点以进行向下推送包括:
将所述数据库查询树中的次根节点作为当前遍历至的第一节点;
识别所述第一节点是否有查询条件以及是否已执行;
若所述第一节点有查询条件且未执行,则执行所述第一节点的子语句得到查询结果,在所述第一节点的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送,并将相应子节点作为新的第一节点;
若所述第一节点没有查询条件或已执行,则将相应子节点作为新的第一节点;
返回执行所述识别所述第一节点是否有查询条件以及是否已执行及后续步骤。
4.根据权利要求1所述的方法,其特征在于,所述在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送包括:
将叶子节点作为当前遍历至的第二节点;
识别所述第二节点是否已执行;
若所述第二节点未执行,则在相应子节点的查询结果满足所述预设推送条件的情况下,将相应子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果,将相应父节点作为新的第二节点;
若所述第二节点已执行,则将相应父节点作为新的第二节点;
返回执行所述识别所述第二节点是否已执行及后续步骤。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在向上推送完成后,若已执行的节点的数量和未执行且没有查询条件的节点的数量之和符合所述数据库查询树中除根节点之外的节点的数量,则
执行所述基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送及后续步骤。
6.根据权利要求1所述的方法,其特征在于,在所述在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送之后,所述方法还包括:
在完成第一轮向下推送和向上推送的基础上,从所述数据库查询树中的次根节点起向下遍历节点以进行向下推送,并在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,以进行第二轮向下推送和向上推送;
所述在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件包括:
在完成第二轮向上推送后,基于各已执行的节点的查询结果确定根节点的查询条件。
7.根据权利要求6所述的方法,其特征在于,第二轮向上推送包括如下步骤:
从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,并对当前遍历至且在本轮向上推送中仍未执行的节点添加标记;
所述在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件包括:
在第二轮向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
若被添加标记的节点的数量和已执行的节点的数量之和符合所述数据库查询树中除根节点外的节点数量,则执行所述基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送及后续步骤。
8.一种跨库数据查询装置,其特征在于,所述装置包括:
数据库查询树确定模块,用于确定基于跨库查询语句构建的数据库查询树;所述数据库查询树中各节点分别代表所述跨库查询语句的子语句;各所述子语句分别用于从不同数据库中查询数据;
下推模块,用于从所述数据库查询树中的次根节点起依次向下遍历除根节点之外的各个节点,以从各个当前遍历至的有查询条件且未执行的第一节点进行向下推送;所述向下推送,是指针对当前遍历至的有查询条件且未执行的第一节点,在执行所述第一节点的子语句得到的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送;所述第一节点的查询结果是通过执行所述第一节点的子语句,从相应数据库中查询到的数据;
上推模块,用于在向下推送完成后,从叶子节点起依次向上遍历除根节点之外的各节点,以从各个当前遍历至的未执行的第二节点进行向上推送;所述向上推送,是在当前遍历至且未执行的第二节点的子节点的查询结果满足所述预设推送条件的情况下,将所述第二节点的子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果;在向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
所述下推模块,还用于基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送;
目标查询结果确定模块,用于根据各节点的查询结果,生成符合所述预设查询数据量的目标查询结果。
9.根据权利要求8所述的装置,其特征在于,所述数据库查询树确定模块还用于确定跨库查询语句中指定的预设查询数据量;将所述跨库查询语句中各数据库对应的查询语句进行拆分,得到多个子语句;将各所述子语句分别作为节点,并根据各所述子语句所查询的数据表的引用对象之间的聚合关系确定各节点间的连接关系,生成数据库查询树。
10.根据权利要求8所述的装置,其特征在于,所述下推模块还用于将所述数据库查询树中的次根节点作为当前遍历至的第一节点;识别所述第一节点是否有查询条件以及是否已执行;若所述第一节点有查询条件且未执行,则执行所述第一节点的子语句得到查询结果,在所述第一节点的查询结果满足预设推送条件的情况下,将所述第一节点的查询结果作为相应子节点的查询条件向所述子节点推送,并将相应子节点作为新的第一节点;若所述第一节点没有查询条件或已执行,则将相应子节点作为新的第一节点;返回执行所述识别所述第一节点是否有查询条件以及是否已执行及后续步骤。
11.根据权利要求8所述的装置,其特征在于,所述上推模块还用于将叶子节点作为当前遍历至的第二节点;识别所述第二节点是否已执行;若所述第二节点未执行,则在相应子节点的查询结果满足所述预设推送条件的情况下,将相应子节点的查询结果作为查询条件向所述第二节点推送,并执行所述第二节点对应的子语句得到相应查询结果,将相应父节点作为新的第二节点;若所述第二节点已执行,则将相应父节点作为新的第二节点;返回执行所述识别所述第二节点是否已执行及后续步骤。
12.根据权利要求8所述的装置,其特征在于,所述下推模块还用于在向上推送完成后,若已执行的节点的数量和未执行且没有查询条件的节点的数量之和符合所述数据库查询树中除根节点之外的节点的数量,则执行所述基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送及后续步骤。
13.根据权利要求8所述的装置,其特征在于,所述下推模块还用于在完成第一轮向下推送和向上推送的基础上,从所述数据库查询树中的次根节点起向下遍历节点以进行向下推送;
所述上推模块还用于在向下推送完成后,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送;在完成第二轮向上推送后,基于各已执行的节点的查询结果确定根节点的查询条件。
14.根据权利要求13所述的装置,其特征在于,所述上推模块还用于在第二轮向上推送中,从叶子节点起向上遍历除根节点之外的各节点以进行向上推送,并对当前遍历至且在本轮向上推送中仍未执行的节点添加标记;在第二轮向上推送完成后,基于各已执行的节点的查询结果确定根节点的查询条件;
所述下推模块还用于若被添加标记的节点的数量和已执行的节点的数量之和符合所述数据库查询树中除根节点外的节点数量,则执行所述基于预设查询数据量和所述根节点的查询条件执行所述根节点的子语句,得到所述根节点对应的、且符合所述预设查询数据量的查询结果,以从所述根节点开始向下遍历节点进行向下推送及后续步骤。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211146494.5A CN115221249B (zh) | 2022-09-20 | 2022-09-20 | 跨库数据查询方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211146494.5A CN115221249B (zh) | 2022-09-20 | 2022-09-20 | 跨库数据查询方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115221249A CN115221249A (zh) | 2022-10-21 |
CN115221249B true CN115221249B (zh) | 2023-02-24 |
Family
ID=83617371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211146494.5A Active CN115221249B (zh) | 2022-09-20 | 2022-09-20 | 跨库数据查询方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115221249B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018170276A2 (en) * | 2017-03-15 | 2018-09-20 | Fauna, Inc. | Methods and systems for a database |
CN111259036A (zh) * | 2020-01-10 | 2020-06-09 | 苏州达家迎信息技术有限公司 | 一种跨库跨表查询方法、设备、服务器及存储介质 |
CN113407565A (zh) * | 2021-06-29 | 2021-09-17 | 中国民生银行股份有限公司 | 跨库数据查询方法、装置和设备 |
CN114911824A (zh) * | 2021-02-07 | 2022-08-16 | 中国电信股份有限公司 | 基于查询树的数据库中间件跨节点Join查询方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109299133A (zh) * | 2017-07-24 | 2019-02-01 | 迅讯科技(北京)有限公司 | 数据查询方法、计算机系统及非暂时性计算机可读介质 |
CN112835930A (zh) * | 2021-03-03 | 2021-05-25 | 上海渠杰信息科技有限公司 | 一种数据库的查询方法及设备 |
CN113420044A (zh) * | 2021-06-30 | 2021-09-21 | 平安国际智慧城市科技股份有限公司 | 数据查询方法、装置、设备和存储介质 |
-
2022
- 2022-09-20 CN CN202211146494.5A patent/CN115221249B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018170276A2 (en) * | 2017-03-15 | 2018-09-20 | Fauna, Inc. | Methods and systems for a database |
CN111259036A (zh) * | 2020-01-10 | 2020-06-09 | 苏州达家迎信息技术有限公司 | 一种跨库跨表查询方法、设备、服务器及存储介质 |
CN114911824A (zh) * | 2021-02-07 | 2022-08-16 | 中国电信股份有限公司 | 基于查询树的数据库中间件跨节点Join查询方法 |
CN113407565A (zh) * | 2021-06-29 | 2021-09-17 | 中国民生银行股份有限公司 | 跨库数据查询方法、装置和设备 |
Non-Patent Citations (1)
Title |
---|
"数据查询优化算法综述";何源;《计算机与现代化》;20050430;第14-17页 * |
Also Published As
Publication number | Publication date |
---|---|
CN115221249A (zh) | 2022-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Guia et al. | Graph Databases: Neo4j Analysis. | |
CN107402992B (zh) | 一种分布式NewSQL数据库系统和全文检索建立方法 | |
US11042662B2 (en) | Data aggregation system for enabling query operations on restricted data that originates from multiple independent multiple sources | |
CN110795524B (zh) | 主数据映射处理方法、装置、计算机设备及存储介质 | |
WO2019085463A1 (zh) | 部门需求的推荐方法、应用服务器及计算机可读存储介质 | |
CN112883030A (zh) | 数据收集方法、装置、计算机设备和存储介质 | |
TW202004526A (zh) | 基於行動端NoSQL資料庫的索引建立方法及裝置 | |
CN111435376A (zh) | 信息处理方法及系统、计算机系统和计算机可读存储介质 | |
CN108446329B (zh) | 面向工业时序数据库的自适应数据库分区方法及系统 | |
CN117033424A (zh) | 慢sql语句的查询优化方法、装置和计算机设备 | |
CN113918605A (zh) | 数据查询方法、装置、设备以及计算机存储介质 | |
CN109697234B (zh) | 实体的多属性信息查询方法、装置、服务器和介质 | |
CN115221249B (zh) | 跨库数据查询方法、装置、计算机设备和存储介质 | |
CN110955712A (zh) | 基于多数据源的开发api处理方法及装置 | |
US11841841B2 (en) | Stand in tables | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
WO2020024824A1 (zh) | 一种用户状态标识确定方法及装置 | |
CN116185389A (zh) | 一种代码生成方法、装置、电子设备及介质 | |
CN111143356B (zh) | 报表检索方法及装置 | |
EP3086244A1 (en) | Database system and method of operation thereof | |
CN111309704B (zh) | 数据库操作方法和数据库操作系统 | |
CN113515504B (zh) | 数据管理方法、装置、电子设备以及存储介质 | |
CN115168409B (zh) | 数据库分表的数据查询方法、装置和计算机设备 | |
US20230205746A1 (en) | Determination of recommended column types for columns in tabular data | |
CN116910069A (zh) | 数据库更新方法、装置、计算机设备和存储介质 |
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 |