一种基于跨分布模式的关联查询优化方法转让专利

申请号 : CN202311361464.0

文献号 : CN117131078B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘新亮崔杰

申请人 : 天津南大通用数据技术股份有限公司

摘要 :

本发明提供了一种基于跨分布模式的关联查询优化方法,包括:在数据库中新增一张系统表,记录所有表的分布信息,包括表名、所属分布模式、分片和分布键;对于数据库中的两个需要进行关联查询的分布表,在执行关联查询的阶段,根据系统表的记录,判断两个分布表是否分别属于不同的分布模式,以及是否存在包含关系;根据两个分布表的分布模式及两个分布表之间的包含关系,判断在关联查询的过程中是否需要执行拉表操作。本发明有益效果:在同一集群存在多种分布模式的场景下,使包含关系下的分布各表,在关联查询时不产生数据重分布和多余计划步骤等耗时操作,从而极大地节省了时间并大幅提升了性能。

权利要求 :

1.一种基于跨分布模式的关联查询优化方法,其特征在于,包括:在数据库中新增一张系统表,记录所有表的分布信息,包括表名、所属分布模式、分片数、分布键;

对于数据库中的两个需要进行关联查询的分布表,在执行关联查询的阶段,根据系统表的记录判断两个分布表是否分别属于不同的分布模式;

根据分布模式的判断结果,对两个分布表是否存在包含关系进行判断;

当两个分布表属于不同的分布模式且两个分布表不存在包含关系时,执行拉表操作,否则进行混合关联查询判断;

所述拉表操作为,将其中一个分布表的数据根据关联条件拉取到另一个分布表所在的节点IP上,然后在每个节点IP上进行关联计算的操作所述分布模式包括DIST1模式和DIST2模式:当分布表处于任一分布模式时,分布表均被划分为多个分片,其中:当分布表处于DIST1模式时,部分分片拥有一个备片;

当分布表处于DIST2模式时,所有分片均拥有一个备片。

2.根据权利要求1所述的一种基于跨分布模式的关联查询优化方法,其特征在于:判断两个分布表是否分别属于不同的分布模式以及是否存在包含关系:根据系统表中的记录,判断两个分布表是否分别属于DIST1模式和DIST2模式;

若两个分布表分别属于DIST1模式和DIST2模式,则判断DIST2模式的分布表是否包含DIST1模式的分布表;

若两个分布表属于同一个分布模式,则进行混合关联查询判断。

3.根据权利要求2所述的一种基于跨分布模式的关联查询优化方法,其特征在于:判断DIST2模式的分布表是否包含DIST1模式的分布表:对于分布模式为DIST1模式的分布表的每一个分片,判断其主节点IP是否存在于分布模式为DIST2模式的分布表的对应分片的主备节点IP中;

若其主节点IP都存在于分布模式为DIST2模式的分布表的对应分片的主备节点IP中,则认为DIST2模式的分布表包含DIST1模式的分布表,进行混合关联查询判断;

否则不能认为DIST2模式的分布表包含DIST1模式的分布表,执行拉表操作。

4.根据权利要求3所述的一种基于跨分布模式的关联查询优化方法,其特征在于:执行拉表操作时:

对于需要拉表的查询,将一个分布表重分布到另一个分布表所在的分布模式,然后进行关联计算;

对于可直接关联的查询,直接按分片下发到每个节点IP并行执行;

所有查询结束后,收集所有节点IP的结果进行汇总,得到完整的查询结果。

5.根据权利要求3所述的一种基于跨分布模式的关联查询优化方法,其特征在于:混合关联查询判断如下:

当两个分布表之一为复制表时,无论另一张分布表为什么类型,均直接下发查询无需拉表;

当两个分布表均为哈希表且等值关联列为哈希键时,直接下发查询无需拉表;

当两个分布表之间的关系不满足两个分布表之一为复制表,且不满足两个分布表均为哈希表且等值关联列为哈希键时,需要拉表后执行关联查询。

6.一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述权利要求1‑5任一所述的一种基于跨分布模式的关联查询优化方法。

7.一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如权利要求1‑5任一所述的一种基于跨分布模式的关联查询优化方法。

8.一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1‑5任一项所述的一种基于跨分布模式的关联查询优化方法。

说明书 :

一种基于跨分布模式的关联查询优化方法

技术领域

[0001] 本发明属于计算机技术领域,尤其是涉及一种基于跨分布模式的关联查询优化方法。

背景技术

[0002] 对于成体系规模的大型数据库系统,往往同时存在多种数据的分布模式。所谓分布模式,即指在规定数量的数据节点上设定主备分片的数量和部署位置,以及在当前模式下hash桶与部署节点间的映射关系,对多分布模式的支持是大型数据库的基本功能和特征,也是实施部署、在线升级等运维操作的重要技术手段。
[0003] 在分布模式1中包括3个节点,每个节点存储表的一个分片且编号为n1‑n3,每个分片拥有一个备片(数据相同的拷贝)且错位部署;我们在同一分布模式下进行表间关联查询时,计划的生成同单一分布模式的情况是一致的,对执行步骤是没有影响的,性能也是最优的,假如我们有t1、t2两张分布表且所处的分布模式相同,若两个分布表的关联查询符合优化原则时(比如,关联条件使用了等值的hash列),则可以直接在每个节点上执行同名主片间的关联查询,各节点执行结果的汇总即为最终结果集。
[0004] 但是在不同的分布模式下,表间的关联查询会出现跨分布模式的情况。在这种场景下,查询计划的生成会因为关联数据所处分布的不同而做出相应的调整,因为需要将其中一个分布模式下的表数据依另一个分布模式重新分布,最直接的表现就是会执行数据的重分布(或称之为拉表)操作,以期两个分布表均在同一模式下进行关联。此时,不仅原有的复制表、分布表的优化效果会丧失,而且操作步骤的增加及海量数据的搬移,都会对查询性能造成显著的影响。

发明内容

[0005] 有鉴于此,本发明旨在提出一种基于跨分布模式的关联查询优化方法,以期解决上述部分技术问题中的至少之一。
[0006] 为达到上述目的,本发明的技术方案是这样实现的:
[0007] 本发明第一方面提出了一种基于跨分布模式的关联查询优化方法,包括:
[0008] 在数据库中新增一张系统表,记录所有表的分布信息,包括表名、所属分布模式、分片数、分布键;
[0009] 对于数据库中的两个需要进行关联查询的分布表,在执行关联查询的阶段,根据系统表的记录判断两个分布表是否分别属于不同的分布模式;
[0010] 根据分布模式的判断结果,对两个分布表是否存在包含关系进行判断;
[0011] 当两个分布表属于不同的分布模式且两个分布表不存在包含关系时,执行拉表操作,否则进行混合关联查询判断;
[0012] 所述拉表操作为,在跨分布表的查询中,将其中一个分布表的数据根据关联条件拉取到另一个分布表所在的节点上,然后在每个节点上进行关联计算的操作。
[0013] 进一步的,所述分布模式包括DIST1模式和DIST2模式:
[0014] 当分布表处于任一分布模式时,分布表均被划分为多个分片,其中:
[0015] 当分布表处于DIST1模式时,部分分片拥有一个备片;
[0016] 当分布表处于DIST2模式时,所有分片均拥有一个备片。
[0017] 进一步的,判断两个分布表是否分别属于不同的分布模式以及是否存在包含关系:
[0018] 根据系统表中的记录,判断两个分布表是否分别属于DIST1模式和DIST2模式;
[0019] 若两个分布表分别属于DIST1模式和DIST2模式,则判断DIST2模式的分布表是否包含DIST1模式的分布表;
[0020] 若两个分布表属于同一个分布模式,则进行混合关联查询判断。
[0021] 进一步的,判断DIST2模式的分布表是否包含DIST1模式的分布表:
[0022] 对于分布模式为DIST1的分布表的每一个分片,判断其主节点IP是否存在于分布模式为DIST2的分布表的对应分片的主备节点IP中;
[0023] 若其主节点IP都存在于分布模式为DIST2的分布表的对应分片的主备节点中,则认为DIST2模式的分布表包含DIST1模式的分布表,进行混合关联查询判断;
[0024] 否则不能认为DIST2模式的分布表包含DIST1模式的分布表,执行拉表操作。
[0025] 进一步的,执行拉表操作时:
[0026] 对于需要拉表的查询,将一个分布表重分布到另一个分布表所在的分布模式,然后进行关联计算;
[0027] 对于可直接关联的查询,直接按分片下发到每个节点并行执行;
[0028] 所有查询结束后,收集所有节点的结果进行汇总,得到完整的查询结果。
[0029] 进一步的,混合关联查询判断如下:
[0030] 当两个分布表之一为复制表时,无论另一张分布表为什么类型,均直接下发查询无需拉表;
[0031] 当两个分布表均为哈希表且等值关联列为哈希键时,直接下发查询无需拉表;
[0032] 当两个分布表之间关系不满足上述关系时,需要拉表后执行关联查询。
[0033] 本发明第二方面提出了一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述第一方面任一所述的一种基于跨分布模式的关联查询优化方法。
[0034] 本发明第三方面提出了一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如第一方面任一所述的一种基于跨分布模式的关联查询优化方法。
[0035] 本发明第四方面提出了一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现第一方面任一项所述的一种基于跨分布模式的关联查询优化方法。
[0036] 相对于现有技术,本发明所述的一种基于跨分布模式的关联查询优化方法具有以下有益效果:
[0037] 在同一集群存在多种分布模式的场景下,使存在包含关系下的各分布表,在关联查询时不产生数据重分布和多余计划步骤等耗时操作,从而极大地节省了时间并大幅提升了性能。

附图说明

[0038] 构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0039] 图1为本发明实施例所述的一种基于跨分布模式的关联查询优化方法的流程示意图。

具体实施方式

[0040] 需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0041] 下面将参考附图并结合实施例来详细说明本发明。
[0042] 实施例一:
[0043] 如图1所示:一种基于跨分布模式的关联查询优化方法,包括:
[0044] 在数据库中新增一张系统表,记录所有表的分布信息,包括表名、所属分布模式、分片数、分布键;
[0045] 对于数据库中的两个需要进行关联查询的分布表,在执行关联查询的阶段,根据系统表的记录判断两个分布表是否分别属于不同的分布模式;
[0046] 根据分布模式的判断结果,对两个分布表是否存在包含关系进行判断;
[0047] 当两个分布表属于不同的分布模式且两个分布表不存在包含关系时,执行拉表操作,否则进行混合关联查询判断;
[0048] 所述拉表操作为,在跨分布表的查询中,将其中一个分布表的数据根据关联条件拉取到另一个分布表所在的节点上,然后在每个节点上进行关联计算的操作。
[0049] 所述分布模式包括DIST1模式和DIST2模式:
[0050] 当分布表处于任一分布模式时,分布表均被划分为多个分片,其中:
[0051] 当分布表处于DIST1模式时,部分分片拥有一个备片;
[0052] 当分布表处于DIST2模式时,所有分片均拥有一个备片。
[0053] 判断两个分布表是否分别属于不同的分布模式以及是否存在包含关系:
[0054] 根据系统表中的记录,判断两个分布表是否分别属于DIST1模式和DIST2模式;
[0055] 若两个分布表分别属于DIST1模式和DIST2模式,则判断DIST2模式的分布表是否包含DIST1模式的分布表;
[0056] 若两个分布表属于同一个分布模式,则进行混合关联查询判断。
[0057] 判断DIST2模式的分布表是否包含DIST1模式的分布表:
[0058] 对于分布模式为DIST1的分布表的每一个分片,判断其主节点IP是否存在于分布模式为DIST2的分布表的对应分片的主备节点IP中;
[0059] 若其主节点IP都存在于分布模式为DIST2的分布表的对应分片的主备节点中,则认为DIST2模式的分布表包含DIST1模式的分布表,进行混合关联查询判断;
[0060] 否则不能认为DIST2模式的分布表包含DIST1模式的分布表,执行拉表操作。
[0061] 执行拉表操作时:
[0062] 对于需要拉表的查询,将一个分布表重分布到另一个分布表所在的分布模式,然后进行关联计算;
[0063] 对于可直接关联的查询,直接按分片下发到每个节点并行执行;
[0064] 所有查询结束后,收集所有节点的结果进行汇总,得到完整的查询结果。
[0065] 混合关联查询判断如下:
[0066] 当两个分布表之一为复制表时,无论另一张分布表为什么类型,均直接下发查询无需拉表;
[0067] 当两个分布表均为哈希表且等值关联列为哈希键时,直接下发查询无需拉表;
[0068] 当两个分布表之间关系不满足上述关系时,需要拉表后执行关联查询。
[0069] 工作过程:
[0070] 在大规模分布式集群数据库中,某个节点常会因不可避免地出现硬件故障而下线的情况,高可用机制就会在此种情况下用于保障正常的生产活动不受影响;
[0071] 在后续的运维恢复过程中,一般会发起节点替换的操作,即使用新的硬件设备替换原有的故障设备来恢复上线,这时为避免业务在故障节点上大量堆积,往往使用先缩容(DIST1)再扩容(DIST2)的方案,但是在不同的分布模式下,表间的关联查询会出现跨分布模式的情况,在这种场景下,查询计划的生成会因为关联数据所处分布的不同而做出相应的调整,因为需要将其中一个分布模式下的表数据依另一个分布模式重新分布,最直接的表现就是会执行拉表操作,以期两个分布表均在同一模式下进行关联,为了减少数据处理时间,避免对查询性能产生较大的影响,需要使用本发明所述的一种基于跨分布模式的关联查询优化方法进行处理:
[0072] 构建系统表(记录所有表的分布信息,包括表名、所属分布模式、分片和分布键),获取各分布模式下所有分布表的全部信息,比如DIST2模式下的分布表分布于192.168.1.1和192.168.1.3两个节点上,而对于DIST1模式下的分布表仅分布于192.168.1.1一个节点上;
[0073] 对于分布模式为DIST1的表的每一个分片,判断其主节点IP是否存在于分布模式为DIST2的表的对应分片的主备节点IP中,从而判断分布表之间是否存在包含关系;
[0074] 包含关系的判断是此算法的核心,包含关系的确立在于:
[0075] 不同分布模式下的分布表的分片数目一致(不存在双方分片配置不同的情况)、分布键一一对应、同一分片的分布节点集合相等或存在交集(不存在互不属于对方集合的节点元素);否则认定为不存在包含关系;
[0076] 在分布表的HASHMAP已经初始化的前提下,分布表的HASH分布映射关系也需一致,否则亦认定为不存在包含关系;
[0077] 构建分布表间的映射关系表,将所有存在包含关系的分布模式依据包含与被包含的关系顺序保存起来;
[0078] 在实验环境下,创建与示例相同的分布模式设定,为tpcds库加载100s数据量,执行
[0079] select*fromstore_salest1joinweb_salest2ont1.ws_order_number=t2.ss_item_sk;
[0080] 应用本发明进行优化后的测试结果为:
[0081] 跨分布模式的关联查询的耗时由优化前的460秒提升到优化后的2s内;观察查询计划可以确定用时减少的原因为当两个分布表之一为复制表时,或两个分布表均为哈希表且等值关联列为哈希键时,量表之间的拉表操作被优化掉了。
[0082] 实施例二:
[0083] 一种电子设备,包括处理器以及与处理器通信连接,且用于存储处理器可执行指令的存储器,处理器用于执行上述实施例一任一的一种基于跨分布模式的关联查询优化方法。
[0084] 实施例三:
[0085] 一种服务器,包括至少一个处理器,以及与处理器通信连接的存储器,存储器存储有可被至少一个处理器执行的指令,指令被处理器执行,以使至少一个处理器执行如实施例一任一的一种基于跨分布模式的关联查询优化方法。
[0086] 实施例四:
[0087] 一种计算机可读取存储介质,存储有计算机程序,计算机程序被处理器执行时实现实施例一任一项的一种基于跨分布模式的关联查询优化方法。
[0088] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0089] 在本申请所提供的几个实施例中,应该理解到,所揭露的方法和系统,可以通过其它的方式实现。例如,以上所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。上述单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
[0090] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
[0091] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。