首页 / 专利库 / 资料储存系统 / 根哈希 / 一种生成哈希连接表的方法及装置

一种生成哈希连接表的方法及装置

阅读:536发布:2020-05-11

专利汇可以提供一种生成哈希连接表的方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 的 实施例 提供一种生成哈希连接表的方法及装置,涉及 数据库 技术领域,用于解决 节点 间以元组的方式进行数据传递生成哈希连接表而造成数据库性能较低的问题。包括:节点扫描第一数据表包括的元组;节点根据哈希 算法 对第一数据表包括的所有元组进行哈希运算,得到第一哈希表;节点接收第一类节点广播的哈希表;节点对第一哈希表和接收到的第一类节点广播的所有哈希表执行哈希合并,得到第一哈希合并表;节点扫描第二数据表包括的元组;节点根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表。,下面是一种生成哈希连接表的方法及装置专利的具体信息内容。

1.一种生成哈希连接表的方法,其特征在于,用于分布式数据库进行数据表的哈希连接,所述分布式数据库包括至少两个节点,所述方法包括:
第一节点扫描第一数据表包括的元组,所述第一节点为所述分布式数据库包括至少两个节点中的任意一个节点;
所述第一节点根据哈希算法对所述第一数据表包括的所有元组进行哈希运算,得到第一哈希表;
所述第一节点接收第一类节点广播的哈希表,所述第一类节点为所述分布式数据库中除所述第一节点之外的能够扫描到所述第一数据表包括的元组的节点;
所述第一节点对所述第一哈希表和接收到的所述第一类节点广播的所有哈希表执行哈希合并,得到第一哈希合并表,所述第一哈希合并表包括所述第一数据表包括的元组;
所述第一节点扫描第二数据表包括的元组;
所述第一节点根据所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,所述第一哈希连接表包括所述第一哈希合并表包括的元组和所述第二数据表包括的元组。
2.根据权利要求1所述的方法,其特征在于,在所述第一节点根据哈希算法对所述第一数据表包括的所有元组进行哈希运算,得到第一哈希表之后,所述方法还包括:
所述第一节点将生成的所述第一哈希表广播给所述分布式数据库中除所述第一节点之外的其他所有节点。
3.根据权利要求2所述的方法,其特征在于,在所述第一节点根据所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接之后,所述方法还包括:
所述第一节点接收第二类节点广播的哈希连接表,所述第二类节点为所述分布式数据库中除所述第一节点之外的能够生成哈希连接表的节点;
所述第一节点对所述第一哈希连接表和接收到的所述第二类节点广播的所有哈希连接表执行哈希合并,得到第二哈希合并表,所述第二哈希合并表包括所述第一哈希连接表包括的元组和所述所有哈希连接表包括的元组;
所述第一节点扫描第三数据表包括的元组;
所述第一节点根据所述第三数据表包括的元组与所述第二哈希合并表包括的元组进行哈希连接,得到第二哈希连接表,所述第二哈希连接表包括所述第二哈希合并表包括的元组和所述第三数据表包括的元组。
4.根据权利要求3所述的方法,其特征在于,在所述第一节点根据所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表之后,所述方法还包括:
所述第一节点将生成的所述第一哈希连接表广播给所述分布式数据库中除所述第一节点之外的其他所有节点。
5.一种生成哈希连接表的装置,其特征在于,所述生成哈希连接表的装置属于分布式数据库,所述分布式数据库包括至少两个所述生成哈希连接表的装置,所述生成哈希连接表的装置包括:
扫描单元,用于扫描第一数据表包括的元组;
处理单元,用于根据哈希算法对所述扫描单元扫描到的所述第一数据表包括的所有元组进行哈希运算,得到第一哈希表;
接收单元,用于接收第一类装置广播的哈希表,所述第一类装置为所述分布式数据库中除所述生成哈希连接表的装置之外的能够扫描到所述第一数据表包括的元组的装置;
所述处理单元,还用于对所述第一哈希表和接收到的所述第一类装置广播的所有哈希表执行哈希合并,得到第一哈希合并表,所述第一哈希合并表包括所述第一数据表包括的元组;
所述扫描单元,还用于扫描第二数据表包括的元组;
所述处理单元,还用于根据所述扫描单元扫描到的所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,所述第一哈希连接表包括所述第一哈希合并表包括的元组和所述第二数据表包括的元组。
6.根据权利要求5所述的装置,其特征在于,所述生成哈希连接表的装置还包括:
发送单元,用于将生成的所述第一哈希表广播给所述分布式数据库中除所述生成哈希连接表的装置之外的其他所有装置。
7.根据权利要求6所述的装置,其特征在于,
所述接收单元,还用于接收第二类装置广播的哈希连接表,所述第二类装置为所述分布式数据库中除所述生成哈希连接表的装置之外的能够生成哈希连接表的装置;
所述处理单元,还用于对所述第一哈希连接表和接收到的所述第二类装置广播的所有第一哈希连接表执行哈希合并,得到第二哈希合并表,所述第二哈希合并表包括所述第一哈希连接表包括的元组和所述所有哈希连接表包括的元组;
所述扫描单元,还用于扫描第三数据表包括的元组;
所述处理单元,还用于根据所述扫描单元扫描到的所述第三数据表包括的元组与所述第二哈希合并表包括的元组进行哈希连接,得到第二哈希连接表,所述第二哈希连接表包括所述第二哈希合并表包括的元组和所述第三数据表包括的元组。
8.根据权利要求7所述的装置,其特征在于,
所述发送单元,还用于将生成的所述第一哈希连接表广播给所述分布式数据库中除所述生成哈希连接表的装置之外的其他所有装置。
9.一种分布式数据库,其特征在于,包括:至少两个如权利要求5-8任意一项权利要求所述的生成哈希连接表的装置。
10.一种节点,其特征在于,包括:
存储器,用于存储程序代码;
处理器,用于调用所述存储器存储的程序代码执行如下方法:扫描第一数据表包括的元组;
所述处理器执行的方法还包括:
根据哈希算法对所述第一数据表包括的所有元组进行哈希运算,得到第一哈希表;
通信接口,用于接收第一类节点广播的哈希表,所述第一类节点为所述分布式数据库中除所述节点之外的能够扫描到所述第一数据表包括的元组的节点;
所述处理器执行的方法还包括:
对所述第一哈希表和接收到的所述第一类节点广播的所有哈希表执行哈希合并,得到第一哈希合并表,所述第一哈希合并表包括所述第一数据表包括的元组;
扫描第二数据表包括的元组;
根据所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,所述第一哈希连接表包括所述第一哈希合并表包括的元组和所述第二数据表包括的元组。

说明书全文

一种生成哈希连接表的方法及装置

技术领域

[0001] 本发明涉及数据库技术领域,尤其涉及一种生成哈希连接表的方法及装置。

背景技术

[0002] 结构化查询语言(英文全称:Structured Query Language,英文简称:SQL)中的连接语句可以将数据库中的两个或多个数据表连接起来,且哈希连接(Hash Join)是大多数数据库最常用的连接算法,哈希连接利用哈希表(hash table)实现两个或多个数据表的等值连接,其原理为:构建哈希表,即在要进行连接的两个数据表中,选取元组较少的一个数据表(又称内表),将其中的元组采用某个哈希函数和某种冲突解决方法构建哈希表;探测哈希表,即选取两个数据表中元组较多的数据表作为探测表(又称外表),取探测表中的每一个元组到构建好的哈希表中进行哈希查找,找到能够实现等值连接的元组;输出,即如果探测表中的某个元组与哈希表中的某个元组满足等值连接的条件,则将它们进行连接并输出。
[0003] 现有的哈希连接实现中,哈希连接的节点之间通过元组的方式进行数据传递,这种通过元组进行数据传递的方式会导致哈希连接后的元组再次组成哈希表的情况,这严重影响了分布式数据库的性能。

发明内容

[0004] 本发明的目的在于提供一种生成哈希连接表的方法及装置,在生成哈希连接表的过程中,通过在进行哈希连接的节点间传递哈希表,避免通过传递元组被多次加工成哈希表的重复逻辑,从而提高分布式数据库的性能。
[0005] 上述目标和其他目标将通过独立权利要求中的特征来达成。进一步的实现方式在从属权利要求说明书附图中体现。
[0006] 第一方面,提供一种生成哈希连接表的方法,用于分布式数据库进行数据表的哈希连接,分布式数据库包括至少两个节点,以第一节点来说明上述方法的具体步骤,该第一节点为分布式数据库包括至少两个节点中的任意一个节点:
[0007] 首先,第一节点扫描第一数据表包括的元组,根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表,在第一节点接收到第一类节点广播的哈希表后,对第一哈希表和接收到的第一类节点广播的所有哈希表执行哈希合并,得到第一哈希合并表,其中,第一类节点为分布式数据库中除第一节点之外的能够扫描到第一数据表包括的元组的节点,第一哈希合并表包括第一数据表包括的元组;然后,第一节点扫描第二数据表包括的元组,根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,其中,第一哈希连接表包括第一哈希合并表包括的元组和第二数据表包括的元组。
[0008] 这样一来,第一节点扫描到第一数据表包括的元组后,根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表,使得第一节点在构建第一哈希表时,只是针对本节点存储的第一数据表包括的元组进行构建的,而非现有技术中是针对分布式数据库中每个节点存储的相同的第一数据表包括的所有元组进行构建的,然后,第一节点接收其他能够扫描到第一数据表包括的元组的节点广播的哈希表,对自身生成的哈希表和接收到的所有哈希表进行哈希合并,再将第二数据表包括的元组与哈希合并表进行哈希连接。从而在节点构建完哈希表之后,节点之间直接传递的是哈希表,而非元组,避免通过传递元组被多次加工成哈希表的重复逻辑,从而有效地提高了分布式数据库的性能。
[0009] 具体的,哈希表包括哈希键值,第一节点对第一哈希表和接收到的第一类节点广播的所有哈希表可以根据包括的相同的哈希键值对应的元组进行合并。
[0010] 结合第一方面,在第一种可实现方式中,在所述第一节点根据哈希算法对所述第一数据表包括的所有元组进行哈希运算,得到第一哈希表之后,所述方法还包括:
[0011] 第一节点将生成的第一哈希表广播给分布式数据库中除第一节点之外的其他所有节点。从而在节点构建完哈希表之后,节点之间直接传递的是哈希表,而非元组,避免通过传递元组被多次加工成哈希表的重复逻辑,从而有效地提高了分布式数据库的性能。
[0012] 结合第一种可实现方式,在第二种可实现方式中,在所述第一节点根据所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接之后,所述方法还包括:
[0013] 首先,第一节点接收第二类节点广播的哈希连接表,第二类节点为分布式数据库中除第一节点之外的能够生成哈希连接表的节点;然后,第一节点对第一哈希连接表和接收到的第二类节点广播的所有哈希连接表执行哈希合并,得到第二哈希合并表,第二哈希合并表包括第一哈希连接表包括的元组和所有哈希连接表包括的元组;第一节点再扫描第三数据表包括的元组;第一节点根据第三数据表包括的元组与第二哈希合并表包括的元组进行哈希连接,得到第二哈希连接表,第二哈希连接表包括第二哈希合并表包括的元组和第三数据表包括的元组。
[0014] 这样一来,直接将中间结果的哈希连接表广播给其它节点,相邻的两个哈希连接算子之间去掉了一个哈希算子,如果执行计划中有N个哈希连接算子,则去掉了N-1个哈希算子,也就是减少了N-1次哈希表的生成过程,从而避免通过传递元组被多次加工成哈希表的重复逻辑,有效地提高了分布式数据库的性能。
[0015] 具体的,第一哈希连接表包括哈希键值,第一节点对第一哈希连接表和接收到的第二类节点广播的所有哈希连接表可以根据包括的相同的哈希键值对应的元组进行合并。
[0016] 结合第二种可实现方式,在第三种可实现方式中,在所述第一节点根据所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表之后,所述方法还包括:
[0017] 第一节点将生成的第一哈希连接表广播给分布式数据库中除第一节点之外的其他所有节点。
[0018] 第二方面,提供一种生成哈希连接表的装置,生成哈希连接表的装置属于分布式数据库,所述分布式数据库包括至少两个所述生成哈希连接表的装置,所述生成哈希连接表的装置包括:
[0019] 扫描单元,用于扫描第一数据表包括的元组;处理单元,用于根据哈希算法对扫描单元扫描到的第一数据表包括的所有元组进行哈希运算,得到第一哈希表;接收单元,用于接收第一类装置广播的哈希表,第一类装置为分布式数据库中除生成哈希连接表的装置之外的能够扫描到第一数据表包括的元组的装置;处理单元,还用于对第一哈希表和接收到的第一类装置广播的所有哈希表执行哈希合并,得到第一哈希合并表,第一哈希合并表包括第一数据表包括的元组;扫描单元,还用于扫描第二数据表包括的元组;处理单元,还用于根据扫描单元扫描到的第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,第一哈希连接表包括第一哈希合并表包括的元组和第二数据表包括的元组。具体的实现方式可以参考第一方面提供的生成哈希连接表的方法中第一节点的行为的功能。
[0020] 需要说明的是,上述第二方面包括的功能模可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块。具体的,可以参考第一方面提供生成哈希连接表的方法中的第一节点的行为的功能。
[0021] 本发明中,节点和的生成哈希连接表的装置的名字对设备本身不构成限定,在实际实现中,这些设备可以以其他名称出现。只要各个设备的功能和本发明类似,属于本发明权利要求及其等同技术的范围之内。
[0022] 本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

[0023] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0024] 图1为本发明实施例提供的一种分布式数据库结构示意图;
[0025] 图2为本发明实施例提供的一种计算机设备示意图;
[0026] 图3为本发明实施例提供的一种生成哈希连接表的方法流程图
[0027] 图4为本发明实施例提供的另一种生成哈希连接表的方法流程图;
[0028] 图5为本发明实施例提供的一种节点存储的数据示意图;
[0029] 图6为现有技术提供的一种哈希连接的节点间通过元组方式传递数据的执行计划树;
[0030] 图7为现有技术提供的一种节点广播元组的示意图;
[0031] 图8为现有技术提供的一种节点生成哈希表的示意图;
[0032] 图9为现有技术提供的一种节点进行哈希连接的示意图;
[0033] 图10为现有技术提供的一种节点生成另一哈希表的示意图;
[0034] 图11为现有技术提供的另一种节点进行哈希连接的示意图;
[0035] 图12为本发明实施例提供的一种哈希连接的节点间通过哈希表的方式传递数据的执行计划树;
[0036] 图13为本发明实施例提供的一种节点生成哈希表的示意图;
[0037] 图14为本发明实施例提供的一种节点广播哈希表的示意图;
[0038] 图15为本发明实施例提供的一种节点广播哈希表后的示意图;
[0039] 图16为本发明实施例提供的一种节点执行哈希合并的示意图;
[0040] 图17为本发明实施例提供的一种节点进行哈希连接的示意图;
[0041] 图18为本发明实施例提供的另一种节点进行哈希连接的示意图;
[0042] 图19为本发明实施例提供的又一种节点进行哈希连接的示意图;
[0043] 图20为本发明实施例提供的再一种节点进行哈希连接的示意图;
[0044] 图21为本发明实施例提供的一种生成哈希连接表的装置结构示意图;
[0045] 图22为本发明实施例提供的另一种生成哈希连接表的装置结构示意图。

具体实施方式

[0046] 为了下述各实施例的描述清楚简洁,首先给出相关技术的简要介绍:
[0047] 元组(Tuple),是关系数据库中的基本概念,表中的每行(即数据库中的每条记录)就是一个元组,元组也称为记录。
[0048] 连接(Join),关系数据库中最重要的查询,将两个表或多表的查询结果组合在一起。
[0049] 哈希连接(Hash Join),一种连接算法,关系数据库一般提供三种Join方法,MergeJoin,HashJoin和NestLoopJoin。HashJoin是等值连接中最常用的Join方法。
[0050] 内表,连接操作涉及两个表或多表,哈希连接中将需要生成哈希表的表称之为内表。
[0051] 外表,哈希连接中不需要生成哈希表的表。
[0052] 算子,也称操作符,数据库将用户输入的结构化查询语言在内部转换为由算子搭建而成的执行计划树中的Hash,Hash Join,Merge Join都可称为算子。
[0053] 分布式数据库,是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。其中,每个被连接起来的数据库单元称为节点。分布式数据库包括至少两个节点。节点可以是分布在不同地方的物理节点,也可以是分布在同一个物理数据库中的逻辑节点。
[0054] 如图1所示,为本发明实施例提供的一种分布式数据库结构示意图,包括:第一节点、第二节点和第三节点。这里的第一节点、第二节点和第三节点只是示意性说明,实际中分布式数据库还可以包括更多或更少的节点。其中,三个节点分别存储有T1表、T2表和T3表。T1表、T2表和T3表分别存储不同的数据,且不同节点中存储的相同表的数据也不同,例如第一节点存储的第一数据表的数据与第二节点存储的第一数据表的数据是不同的。需要说明的是,不同的节点也可以存储不同的表,例如第一节点存储有T1表和T2表,第二节点存储有T2表和T3表。
[0055] 在现有的哈希连接的节点间数据传递的过程中节点间以元组的方式传递数据,出现哈希表“吐出”的元组再次组织成哈希表的情况;如果执行计划中有L个哈希连接算子,上述状况可能重复出现L-1次,严重影响分布式数据库的性能。
[0056] 为了解决该问题,本发明实施例提供了生成哈希连接表的方法,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚。完整地描述。
[0057] 需要说明的是,为了便于清楚描述本发明实施例的技术方案,在本发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。
[0058] 本发明的基本原理在于:节点扫描到第一数据表包括的元组后,根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表,使得节点在构建第一哈希表时,只是针对本节点存储的第一数据表包括的元组进行构建的,而非现有技术中是针对分布式数据库中每个节点存储的相同的第一数据表包括的所有元组进行构建的,然后,节点接收其他能够扫描到第一数据表包括的元组的节点广播的哈希表,对自身生成的哈希表和接收到的所有哈希表进行哈希合并,再将第二数据表包括的元组与哈希合并表进行哈希连接。从而在节点构建完哈希表之后,节点之间直接传递的是哈希表,而非元组,避免通过传递元组被多次加工成哈希表的重复逻辑,从而有效地提高了分布式数据库的性能。
[0059] 如图2所示,图1中的节点可以以图2中的计算机设备(或系统)的方式来实现。
[0060] 图2所示为本发明实施例提供的计算机设备示意图。计算机设备100包括至少一个处理器101,通信总线102,存储器103以及至少一个通信接口104。
[0061] 处理器101可以是一个处理器,也可以是多个处理元件的统称。例如,处理器101可以是一个通用中央处理器(英文全称:Central Processing Unit,英文简称:CPU),也可以是特定应用集成电路(英文全称:application-specific integrated circuit,英文简称:ASIC),或一个或多个用于控制本发明方案程序执行的集成电路,例如:一个或多个微处理器(英文全称:digital signal processor,英文简称:DSP),或,一个或者多个现场可编程阵列(英文全称:Field Programmable Gate Array,英文简称:FPGA)。
[0062] 在具体实现中,作为一种实施例,处理器101可以包括一个或多个CPU,例如图2中的CPU0和CPU1。
[0063] 在具体实现中,作为一种实施例,计算机设备100可以包括多个处理器,例如图2中的处理器101和处理器105。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
[0064] 通信总线102可以是工业标准体系结构(英文全称:Industry  Standard Architecture,英文简称:ISA)总线、外部设备互连(英文全称:Peripheral Component,英文简称:PCI)总线或扩展工业标准体系结构(英文全称:Extended Industry Standard Architecture,英文简称:EISA)总线等。该总线可以分为地址总线数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0065] 存储器103可以是只读存储器(英文全称:read-only memory,英文简称:ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(英文全称:random access memory,英文简称:RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(英文全称:Electrically Erasable Programmable Read-Only Memory,英文简称:EEPROM)、只读光盘(英文全称:Compact Disc Read-Only Memory,英文简称:CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
[0066] 其中,所述存储器103用于存储执行本发明方案的应用程序代码,并由处理器101来控制执行。所述处理器101用于执行所述存储器103中存储的应用程序代码。
[0067] 所述通信接口104,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(英文全称:Wireless Local Area Networks,英文简称:WLAN)等。通信接口104可以包括接收单元实现接收功能,以及发送单元实现发送功能。
[0068] 在具体实现中,作为一种实施例,图2所示的计算机设备100可以是图1中的节点。
[0069] 存储器103,用于存储程序代码。
[0070] 处理器101,用于调用存储器存储的程序代码执行如下方法:扫描第一数据表包括的元组,根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表。
[0071] 处理器101,还用于对第一哈希表和接收到的第一类节点广播的所有哈希表执行哈希合并,得到第一哈希合并表,第一哈希合并表包括第一数据表包括的元组;扫描第二数据表包括的元组;根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,第一哈希连接表包括第一哈希合并表包括的元组和第二数据表包括的元组。
[0072] 通信接口104,用于接收第一类节点广播的哈希表,第一类节点为分布式数据库中除节点之外的能够扫描到第一数据表包括的元组的节点。
[0073] 实施例1
[0074] 本发明实施例提供一种生成哈希连接表的方法,用于分布式数据库进行数据表的哈希连接,分布式数据库包括至少两个节点,本发明实施例以第一节点为例进行说明,第一节点为分布式数据库包括至少两个节点中的任意一个节点,如图3所示,所述方法包括:
[0075] 步骤201、第一节点扫描第一数据表包括的元组。
[0076] 第一数据表为节点存储的任意的一个数据表,例如,图1中所示的T1表、T2表或T3表。实际应用中节点存储的数据表可以是用户的通话话单或用户的身份信息等等。
[0077] 需要说明的是,第一节点扫描第一数据表包括的元组的同时,分布式数据库中的其他节点也在扫描第一数据表包括的元组,也就是分布式数据库中的每个节点均进行自身的扫描。
[0078] 步骤202、第一节点根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表。
[0079] 具体的,第一节点在扫描第一数据表包括的元组后,需要判断是否扫描到第一数据表包括的元组,在第一节点确定扫描到第一数据表包括的元组,再根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表。
[0080] 需要说明的是,在第一节点确定扫描到第一数据表包括的元组,根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表之后,第一节点将生成的第一哈希表广播给分布式数据库中除第一节点之外的其他所有节点。
[0081] 步骤203、第一节点接收第一类节点广播的哈希表。
[0082] 第一类节点为分布式数据库中除第一节点之外的能够扫描到第一数据表包括的元组的节点。其中,能够扫描到第一数据表包括的元组的节点可以是分布式数据库中除了第一节点之外的所有其他节点,或可以是分布式数据库中除了第一节点之外的部分其他节点。
[0083] 接收到的第一类节点广播的哈希表为多个不同的哈希表,即分布式数据库中除了第一节点之外的所有其他节点生成的哈希表,或可以是分布式数据库中除了第一节点之外的部分其他节点生成的哈希表。
[0084] 步骤204、第一节点对第一哈希表和接收到的第一类节点广播的所有哈希表执行哈希合并,得到第一哈希合并表。
[0085] 第一哈希合并表包括第一数据表包括的元组,也就是分布式数据库中存储的所有第一数据表包括的元组。其中,用于生成第一哈希合并表的节点自身生成的第一哈希表包括的第一数据表的元组与第一类节点广播的哈希表包括的第一数据表的元组是不同的,而且,第一类节点广播的每个哈希表包括的第一数据表的元组也是不同的。
[0086] 同时,分布式数据库中除了第一节点之外的所有其他节点均对自身生成的哈希表和接收到的第一类节点广播的所有哈希表执行哈希合并,得到哈希合并表。
[0087] 需要说明的是,哈希表包括哈希键值,分布式数据库中的每个节点可以根据获取到的所有哈希表包括的相同的哈希键值对应的元组进行合并。那么,第一节点可以对第一哈希表和接收到的第一类节点广播的所有哈希表包括的相同的哈希键值对应的元组进行合并。
[0088] 示例的,如下表1所示的哈希表1和哈希表2为例:
[0089] 表1哈希表1和哈希表2
[0090]
[0091] 表2所示为哈希合并之后的哈希合并表:
[0092] 表2哈希合并表
[0093]哈希键值 元组1 元组2
1 (1,2) (11,22)
[0094] 步骤205、第一节点扫描第二数据表包括的元组。
[0095] 第二数据表为节点存储的任意的一个数据表,例如,图1中所示的T1表、T2表或T3表。实际应用中节点存储的数据表可以是用户的通话话单或用户的身份信息等等。
[0096] 需要说明的是,第一节点扫描第二数据表包括的元组的同时,分布式数据库中的其他节点也在扫描第二数据表包括的元组,也就是分布式数据库中的每个节点均进行自身的扫描。
[0097] 步骤206、第一节点根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表。
[0098] 具体的,第一节点在扫描第二数据表包括的元组后,需要判断是否扫描到第二数据表包括的元组,在第一节点确定扫描到第二数据表包括的元组,再根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,第一哈希连接表包括第一哈希合并表包括的元组和第二数据表包括的元组。
[0099] 需要说明的是,在第一节点确定扫描到第二数据表包括的元组,根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表之后,第一节点将生成的第一哈希连接表广播给分布式数据库中除第一节点之外的其他所有节点。
[0100] 这样一来,第一节点扫描到第一数据表包括的元组后,根据哈希算法对第一数据表包括的所有元组进行哈希运算,得到第一哈希表,使得第一节点在构建第一哈希表时,只是针对本节点存储的第一数据表包括的元组进行构建的,而非现有技术中是针对分布式数据库中每个节点存储的相同的第一数据表包括的所有元组进行构建的,然后,第一节点接收其他能够扫描到第一数据表包括的元组的节点广播的哈希表,对自身生成的哈希表和接收到的所有哈希表进行哈希合并,再将第二数据表包括的元组与哈希合并表进行哈希连接。从而在节点构建完哈希表之后,节点之间直接传递的是哈希表,而非元组,避免通过传递元组被多次加工成哈希表的重复逻辑,从而有效地提高了分布式数据库的性能。
[0101] 进一步的,如图4所示,在第一节点根据第二数据表包括的元组与第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表之后,即步骤206之后,还可以执行以下步骤。
[0102] 步骤207、第一节点接收第二类节点广播的哈希连接表。
[0103] 第二类节点为分布式数据库中除第一节点之外的能够生成哈希连接表的节点。其中,能够生成哈希连接表的节点可以是分布式数据库中除了第一节点之外的所有其他节点,或可以是分布式数据库中除了第一节点之外的部分其他节点。
[0104] 接收到的第二类节点广播的哈希连接表为多个不同的哈希连接表,即分布式数据库中除了第一节点之外的所有其他节点生成的哈希连接表,或可以是分布式数据库中除了第一节点之外的部分其他节点生成的哈希连接表。
[0105] 步骤208、第一节点对第一哈希连接表和接收到的第二类节点广播的所有哈希连接表执行哈希合并,得到第二哈希合并表。
[0106] 第二哈希合并表包括第一哈希连接表包括的元组和所有哈希连接表包括的元组。第一哈希连接表包括第一哈希合并表包括的元组和第一节点扫描到的第二数据表包括的元组,第一哈希合并表包括第一数据表包括的元组,也就是分布式数据库中存储的所有第一数据表包括的元组。哈希连接表为分布式数据库中除了第一节点之外的所有其他节点根据自身扫描到的第二数据表包括的元组与自身生成的哈希合并表包括的元组进行哈希连接得到的。其中,用于生成第二哈希合并表的节点自身生成的第一哈希连接表包括的元组与第二类节点广播的哈希连接表包括的元组是不同的,而且,第二类节点广播的每个哈希连接表包括的元组也是不同的。
[0107] 同时,分布式数据库中除了第一节点之外的所有其他节点均对自身生成的第一哈希连接表和接收到的第二类节点广播的所有第一哈希连接表执行哈希合并。
[0108] 特别的,如果第一节点由于不符合哈希连接的条件没有生成第一哈希连接表,那么,第一节点只对第二类节点广播的所有哈希连接表执行哈希合并,第二哈希合并表包括所有哈希连接表包括的元组。
[0109] 需要说明的是,哈希合并表包括哈希键值,分布式数据库中的每个节点可以根据获取到的所有哈希合并表包括的相同的哈希键值对应的元组进行合并。那么,第一节点可以对第一哈希合并表和接收到的第二类节点广播的所有哈希合并表包括的相同的哈希键值对应的元组进行合并。
[0110] 步骤209、第一节点扫描第三数据表包括的元组。
[0111] 第三数据表为节点存储的任意的一个数据表,例如,图1中所示的T1表、T2表或T3表。实际应用中节点存储的数据表可以是用户的通话话单或用户的身份信息等等。
[0112] 需要说明的是,第一节点扫描第三数据表包括的元组的同时,分布式数据库中的其他节点也在扫描第三数据表包括的元组,也就是分布式数据库中的每个节点均进行自身的扫描。
[0113] 步骤210、第一节点根据第三数据表包括的元组与第二哈希合并表包括的元组进行哈希连接,得到第二哈希连接表。
[0114] 具体的,第一节点在扫描第三数据表包括的元组后,需要判断是否扫描到第三数据表包括的元组,在第一节点确定扫描到第三数据表包括的元组,再根据第三数据表包括的元组与第二哈希合并表包括的元组进行哈希连接,得到第二哈希连接表,第二哈希连接表包括第二哈希合并表包括的元组和第三数据表包括的元组。
[0115] 需要说明的是,在第一节点确定扫描到第三数据表包括的元组,根据第三数据表包括的元组与第二哈希合并表包括的元组进行哈希连接,得到第二哈希连接表之后,第一节点将生成的第二哈希连接表广播给分布式数据库中除第一节点之外的其他所有节点。
[0116] 这样一来,直接将中间结果的哈希表广播给其它节点,相邻的两个哈希连接算子之间去掉了一个哈希算子,如果执行计划中有N个哈希连接算子,则去掉了N-1个哈希算子,也就是减少了N-1次哈希表的生成过程,从而在节点构建完哈希表之后,节点之间直接传递的是哈希表,而非元组,避免通过传递元组被多次加工成哈希表的重复逻辑,从而有效地提高了分布式数据库的性能。
[0117] 需要说明的是,如果第四数据表需要与第三数据表进行哈希连接,可以参考步骤207至步骤210的详细描述,进行哈希连接。同理,如果第五数据表需要与第四数据表进行哈希连接,第六数据表需要与第五数据表进行哈希连接,甚至更多的数据表进行哈希连接时,均可参考步骤207至步骤210的详细描述。
[0118] 以下通过具体的示例将现有的生成哈希连接表的方法与本发明的生成哈希连接表的方法进行对比说明。
[0119] 示例的,图1中所示的T1表、T2表和T3表中存储的数据均可为整数,即T1表(a int,b int)、T2表(a int,b int)和T3表(a int,b int),int表示整数,在分布式数据库中均按照a列进行哈希分布。
[0120] 如图5所示,第一节点存储的T1表的数据为(1,2);第一节点存储的T2表的数据为(1,3);第一节点存储的T3表的数据为(1,2)。
[0121] 第二节点存储的T1表的数据为(2,2);第二节点存储的T2表的数据为(2,2);第二节点存储的T3表的数据为(2,5)。
[0122] 第三节点存储的T1表的数据为(3,2);第三节点存储的T2表的数据为(3,4);第三节点存储的T3表的数据为(3,6)。
[0123] 那么,T1表的数据、T2表的数据和T3表的数据是由分别存储的第一节点、第二节点和第三节点上的数据组成的。如表3所示T1表的数据。
[0124] 表3T1表的数据
[0125]第一节点 (1,2)
第二节点 (2,2)
第三节点 (3,2)
[0126] 如表4所示T2表的数据。
[0127] 表4T2表的数据
[0128]第一节点 (1,3)
第二节点 (2,2)
第三节点 (3,4)
[0129] 如表5所示T3表的数据。
[0130] 表5T3表的数据
[0131]第一节点 (1,2)
第二节点 (2,5)
第三节点 (3,6)
[0132] 假设分布式数据库获取到SQL查询语句select*from T1,T2,T3where t1.b=t2.b and t2.b=t3.b,即从T1表、T2表和T3表中查询T1表中的b列的值等于T2表中的b列的值,且T2表中的b列的值等于T3表中的b列的值的数据。
[0133] 现有的生成哈希连接表的方法如下:
[0134] 如图6所示,哈希连接的节点间通过元组方式传递数据的执行计划树。具体的,每个算子的详细描述如下所述。
[0135] T1扫描(T1scan),是指第一节点、第二节点和第三节点中的每个节点从T1表中扫描元组。
[0136] 广播(Broad Cast),是指第一节点、第二节点和第三节点中的每个节点从T1表中扫描到的元组再通过广播传递给其它节点。
[0137] 如图7所示,节点广播元组的示意图。第一节点存储的T1表的数据(1,2)为一个元组,第一节点扫描元组(1,2),再广播给第二节点和第三节点。
[0138] 同理,第二节点存储的T1表的数据(2,2)为一个元组,第二节点扫描元组(2,2),再广播给第一节点和第三节点。
[0139] 第三节点存储的T1表的数据(3,2)为一个元组,第三节点扫描元组(3,2),再广播给第二节点和第三节点。
[0140] 哈希(hash),是指第一节点、第二节点和第三节点中的每个节点收集完成所有其它节点广播过来的数据后,对数据进行哈希运算。其中,T1表就可以称为内表。
[0141] 如图8所示,节点生成哈希表的示意图。第一节点、第二节点和第三节点中的每个节点同时对三个元组做哈希运算,生成哈希表。
[0142] T2扫描(T2scan),是指第一节点、第二节点和第三节点中的每个节点从T2表中扫描元组。
[0143] 哈希连接(Hash Join),是指第一节点、第二节点和第三节点中的每个节点将T2表作为探测表(又称外表),取探测表中的每一个元组到构建好的哈希表中进行哈希查找,找到能够实现等值连接的元组,生成中间结果。
[0144] 如图9所示,节点进行哈希连接的示意图。第一节点存储的T2表的数据(1,3)为一个元组,第一节点扫描到元组(1,3),根据T1表中的b列的值等于T2表中的b列的值的条件,用元组(1,3)在第一节点构建好的哈希表中进行哈希查找,但是,在构建好的哈希表中未查找到T1表中的b列的值等于T2表中的b列的值。
[0145] 同理,第二节点存储的T2表的数据(2,2)为一个元组,第二节点扫描到元组(2,2),根据T1表中的b列的值等于T2表中的b列的值的条件,用元组(2,2)在第一节点构建好的哈希表中进行哈希查找,找到能够实现等值连接的元组,生成中间结果,即三个元组。
[0146] 广播(Broad Cast),是指第二节点读取中间结果中的每个元组,将中间结果中的每个元组通过广播传递给第一节点和第三节点。
[0147] 哈希(hash),是指第一节点和第三节点中的每个节点收集到第二节点广播的中间结果后,第一节点、第二节点和第三节点中的每个节点对中间结果的三个元组再进行哈希运算。
[0148] 如图10所示,节点生成另一哈希表的示意图。
[0149] T3扫描(T3scan),是指第一节点、第二节点和第三节点中的每个节点从T3表中扫描元组。
[0150] 哈希连接(Hash Join),是指第一节点、第二节点和第三节点中的每个节点将T3表作为探测表(又称外表),取探测表中的每一个元组到构建好的哈希表中进行哈希查找,找到能够实现等值连接的元组,生成中间结果。
[0151] 如图11所示,节点进行哈希连接的示意图。第一节点存储的T3表的数据(1,2)为一个元组,第一节点扫描到元组(1,2),根据T2表中的b列的值等于T3表中的b列的值的条件,用元组(1,2)在第一节点构建好的哈希表中进行哈希查找,找到能够实现等值连接的元组,生成最终结果。
[0152] 本发明的生成哈希连接表的方法如下:
[0153] 如图12所示,哈希连接的节点间通过哈希表的方式传递数据的执行计划树。具体的,每个算子的详细描述如下所述。
[0154] T1扫描(T1scan),是指第一节点、第二节点和第三节点中的每个节点从T1表中扫描元组。
[0155] 哈希(hash),是指第一节点、第二节点和第三节点中的每个节点根据哈希算法对所述节点存储的T1表包括的所有元组进行哈希运算,得到哈希表。其中,T1表就可以称为内表。
[0156] 如图13所示,节点生成哈希表的示意图。第一节点、第二节点和第三节点中的每个节点同时对自身存储的元组做哈希运算,生成哈希表。
[0157] 广播(Broad Cast),是指第一节点、第二节点和第三节点中的每个节点将生成的哈希表广播给分布式数据库包括的其他节点。
[0158] 如图14所示,节点广播哈希表的示意图。
[0159] 如图15所示,节点广播哈希表后的示意图。
[0160] 哈希合并(hash Merge),是指第一节点、第二节点和第三节点中的每个节点对所述节点获取到的所有所述哈希表执行哈希合并,得到第一哈希合并表。
[0161] 如图16所示,节点执行哈希合并的示意图。
[0162] T2扫描(T2scan),是指第一节点、第二节点和第三节点中的每个节点从T2表中扫描元组。
[0163] 哈希连接(Hash Join),是指第一节点、第二节点和第三节点中的每个节点将T2表作为探测表(又称外表),取探测表中的每一个元组到构建好的第一哈希合并表中进行哈希查找,找到能够实现等值连接的元组,生成中间结果。
[0164] 如图17所示,节点进行哈希连接的示意图。第二节点存储的T2表的数据(2,2)为一个元组,第二节点扫描到元组(2,2),根据T1表中的b列的值等于T2表中的b列的值的条件,用元组(2,2)在第二节点构建好的第一哈希合并表中进行哈希查找,找到能够实现等值连接的元组,生成第一哈希连接表。
[0165] 需要说明的是,第一节点存储的T2表的数据(1,3)为一个元组,第一节点扫描到元组(1,3),根据T1表中的b列的值等于T2表中的b列的值的条件,用元组(1,3)在第一节点构建好的第一哈希合并表中进行哈希查找,但是,在构建好的第一哈希合并表中未查找到T1表中的b列的值等于T2表中的b列的值,第一节点无法生成第一哈希连接表。
[0166] 如图18所示,同理,如果第一节点存储的T2表的数据(1,2)为一个元组,第一节点扫描到元组(1,2),根据T1表中的b列的值等于T2表中的b列的值的条件,用元组(1,2)在第一节点构建好的第一哈希合并表中进行哈希查找,在构建好的第一哈希合并表中查找到T1表中的b列的值等于T2表中的b列的值,第一节点生成第一哈希连接表。
[0167] 广播(Broad Cast),是指节点将第一哈希连接表广播给分布式数据库包括的其他节点。例如,即第二节点将第一哈希连接表广播给分布式数据库包括的第一节点和第三节点。
[0168] T3扫描(T3scan),是指第一节点、第二节点和第三节点中的每个节点从T3表中扫描元组。
[0169] 哈希合并(hash Merge),是指第一节点、第二节点和第三节点中的每个节点对所述节点获取到的所有所述第一哈希连接表执行哈希合并,得到第二哈希合并表。
[0170] 本实施中第一节点、第二节点和第三节点中的每个节点只接收到第一哈希连接表,无需执行哈希合并。
[0171] 哈希连接(Hash Join),是指第一节点、第二节点和第三节点中的每个节点将T3表作为探测表(又称外表),取探测表中的每一个元组到构建好的第二哈希合并表中进行哈希查找,找到能够实现等值连接的元组,生成中间结果。
[0172] 如图19所示,节点进行哈希连接的示意图。第一节点存储的T3表的数据(1,2)为一个元组,第一节点扫描到元组(1,2),根据T2表中的b列的值等于T3表中的b列的值的条件,用元组(1,2)在第一节点构建好的哈希连接表中进行哈希查找,找到能够实现等值连接的元组,生成最终结果。
[0173] 需要说明的是,第一节点能够生成第一哈希连接表,而且接收到第二节点广播的哈希连接表,需要对生成第一哈希连接表和接收到的哈希连接表进行合并,得到第二哈希合并表,再与第三数据表进行哈希连接。基于图18如图20所示,节点进行哈希连接的示意图。
[0174] 从而在节点构建完哈希表之后,节点之间直接传递的是哈希表,而非元组,避免哈希连接的节点间进行数据传递的过程中元组被多次加工成哈希表的重复逻辑,有效地提高了分布式数据库的查询性能。
[0175] 实施例2
[0176] 本发明实施例提供一种生成哈希连接表的装置30,生成哈希连接表的装置属于分布式数据库,分布式数据库包括至少两个生成哈希连接表的装置,如图21所示,包括:
[0177] 扫描单元301,用于扫描第一数据表包括的元组;
[0178] 处理单元302,用于根据哈希算法对所述扫描单元扫描到的所述第一数据表包括的所有元组进行哈希运算,得到第一哈希表;
[0179] 接收单元303,用于接收第一类装置广播的哈希表,所述第一类装置为所述分布式数据库中除所述生成哈希连接表的装置之外的能够扫描到所述第一数据表包括的元组的装置;
[0180] 所述处理单元302,还用于对所述第一哈希表和接收到的所述第一类装置广播的所有哈希表执行哈希合并,得到第一哈希合并表,所述第一哈希合并表包括所述第一数据表包括的元组;
[0181] 所述扫描单元301,还用于扫描第二数据表包括的元组;
[0182] 所述处理单元302,还用于根据所述扫描单元扫描到的所述第二数据表包括的元组与所述第一哈希合并表包括的元组进行哈希连接,得到第一哈希连接表,所述第一哈希连接表包括所述第一哈希合并表包括的元组和所述第二数据表包括的元组。
[0183] 进一步的,如图22所示,所述生成哈希连接表的装置30还包括:
[0184] 发送单元304,用于将生成的所述第一哈希表广播给所述分布式数据库中除所述生成哈希连接表的装置之外的其他所有装置。
[0185] 在本实施例中,生成哈希连接表的装置30是以功能单元的形式来呈现。这里的“单元”可以指特定应用集成电路(英文全称:application-specific integrated circuit,英文简称:ASIC),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。在一个简单的实施例中,本领域的技术人员可以想到生成哈希连接表的装置30可以采用图21所示的形式。扫描单元301、处理单元302、接收单元303和发送单元304可以通过图2的硬件结构来实现。
[0186] 本发明实施例还提供了一种计算机存储介质,用于储存为上述图19所示的节点所用的计算机软件指令,其包含用于执行上述方法实施例所设计的程序。
[0187] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0188] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0189] 本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random-Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0190] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈