哈希娱乐分区哈希连接方法、设备及存储介质与流程
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
导航:X技术最新专利计算;推算;计数设备的制造及其应用技术
1.本技术实施例涉及数据表连接技术,尤其涉及一种分区哈希连接方法、设备及存储介质。
2.在数据库领域中,连接是比较常用的操作,即将数据库中的两个或者多个表组合起来,根据实现方式不同,连接可以分为嵌套循环连接,哈希连接和排序合并连接。其中,由于哈希连接的执行效率高,以及对海量数据连接的支持,已经成为目前最常用的连接方法之一。
3.哈希连接主要分为两个阶段,即建立阶段和探测阶段,在建立阶段,对其中的一个待连接表中的每个记录进行哈希,得到一个哈希表(也称为构建表);在探测阶段,对其他待连接表(也称为探测表)进行扫描,计算表中每个记录的哈希值,并与哈希表进行比较,若满足连接条件,将对应的两条记录进行连接,直到扫描完成其他待连接表中的所有记录。
4.在哈希连接的实现中,可能会遇到内存空间较小,无法加载构建表中的全部数据,因此会对构建表和探测表进行分区,但是这并不能保证构建表的任一分区的数据都能够全部加载到内存中,此时就需要扩展分区数,重新进行分区,这就会增加额外的运算,导致连接性能下降。
5.本技术实施例提供一种分区哈希连接方法、设备及存储介质,以降低重新进行分区的可能性,减少额外的运算,保证连接性能不下降。
7.在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,获取各分区表的构建表确定要素;
8.对各所述分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;
9.获取所述两个待连接表的主副关系以及所述构建表和所述探测表与所述两个待连接表的归属关系,并根据所述主副关系和所述归属关系确定目标哈希连接算法;
10.利用所述目标哈希连接算法对所述构建表和所述探测表进行连接,得到连接结果;
11.当完成所有对分区表的连接时,根据各对分区表对应的连接结果得到对所述两个待连接表进行哈希连接的连接结果。
12.第二方面,本技术实施例还提供了一种计算机设备,包括处理器和存储器,存储器用于存储指令,当指令执行时使得处理器执行以下操作:
13.在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,获取各分区表的构建表确定要素;
14.对各所述分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;
15.获取所述两个待连接表的主副关系以及所述构建表和所述探测表与所述两个待连接表的归属关系,并根据所述主副关系和所述归属关系确定目标哈希连接算法;
16.利用所述目标哈希连接算法对所述构建表和所述探测表进行连接,得到连接结果;
17.当完成所有对分区表的连接时,根据各对分区表对应的连接结果得到对所述两个待连接表进行哈希连接的连接结果。
18.第三方面,本技术实施例还提供了一种存储介质,存储介质用于存储指令,指令用于执行:
19.在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,获取各分区表的构建表确定要素;
20.对各所述分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;
21.获取所述两个待连接表的主副关系以及所述构建表和所述探测表与所述两个待连接表的归属关系,并根据所述主副关系和所述归属关系确定目标哈希连接算法;
22.利用所述目标哈希连接算法对所述构建表和所述探测表进行连接,得到连接结果;
23.当完成所有对分区表的连接时,根据各对分区表对应的连接结果得到对所述两个待连接表进行哈希连接的连接结果。
24.本技术实施例的技术方案,在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,通过获取各分区表的构建表确定要素;对各所述分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;获取所述两个待连接表的主副关系以及所述构建表和所述探测表与所述两个待连接表的归属关系,并根据所述主副关系和所述归属关系确定目标哈希连接算法;利用所述目标哈希连接算法对所述构建表和所述探测表进行连接,得到连接结果;每次对分区表进行连接时都根据构建表确定要素重新确定构建表和探测表,若其中的一个分区表满足预设条件,则可以将其确定为构建表,从而避免重新分区的可能性。
25.图1a为本技术的实施例一提供的一种分区哈希连接方法的流程示意图;
27.图2a为本技术实施例二提供的一种利用预设哈希右连接算法对分区表进行哈希连接的流程示意图;
28.图2b为利用预设哈希右连接算法对分区表进行哈希连接的具体示意图;
29.图3a为本技术实施例三提供的一种利用预设哈希右连接算法对分区表进行哈希连接的流程示意图;
30.图3b为利用预设哈希左连接算法对分区表进行哈希连接的具体示意图;
34.下面结合附图和实施例对本技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本技术,而非对本技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本技术相关的部分而非全部结构。
35.在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
36.本文使用的术语“待连接表”是指的是数据库中需要进行连接操作的数据表。
37.本文使用的术语“分区”指的是将数据表分割为预设数量的子表,每个子表区域称为一个分区。
38.本文使用的术语“哈希连接”指的是对数据表进行连接操作的一种连接方式,哈希连接主要分为两个阶段,即建立阶段和探测阶段,在建立阶段,对其中的一个待连接表中的每个记录进行哈希,得到一个哈希表(也称为构建表);在探测阶段,对其他待连接表(也称为探测表)进行扫描,计算表中每个记录的哈希值,并与哈希表进行比较,若满足连接条件,将对应的两条记录进行连接,直到扫描完成其他待连接表中的所有记录。
40.本文使用的术语“构建表确定要素”用于从一对分区表中确定构建表所依据的信息,比如可以是数据量和数据分布信息。
41.本文使用的术语“预设条件”指的是预先设置的条件,用于判断哪个分区表为构建表。
42.本文使用的术语“构建表”指的是哈希连接过程中需要一次性进行全部数据的哈希运算后,由哈希值构成的哈希表。
44.本文使用的术语“主副关系”指的是在对两个待连接表进行哈希连接时,确定的两个待连接表与主表标记和副表标记的对应关系。即两个待连接表中的一个表会被标记为主表,另一个表会被标记为副表,一般是将数据量小的待连接表标记为主表。
45.本文使用的术语“归属关系”指的是探测表和构建表与待连接表之间的包含关系,一般,分区表是属于待连接表的,即待连接表进行分区后得到分区表。若两个待连接表为表a和表b,那么,探测表可能是表a的一部分,对应的,构建表是表b的一部分,那么探测表就归属于表a,构建表归属于表b。
46.本文使用的术语“目标哈希连接算法”指的是从预先设定好的多个哈希连接算法中确定的一个在当前场景中需要使用的哈希连接算法,用于对探测表和构建表进行哈希连接的算法。
47.本文使用的术语“连接结果”指的是构建表与探测表进行哈希连接后,得到的结
49.本文使用的术语“数据分布信息”指的是表中数据的重复性信息,用于确定表中是否存在倾斜键。
50.本文使用的术语“倾斜键数量”指的是表中存在的倾斜键的具体数量,比如表a中存在两个倾斜键,其中倾斜键a涉及到了8条数据,倾斜键b涉及到了15条数据,那么表2的倾斜键数量则为8条倾斜键a,15条倾斜键b。
51.本文使用的术语“预设哈希右连接算法”和“预设哈希左连接算法”与传统的左外连接、右外连接不同,左外连接与右外连接是逻辑层面的连接类型,只要求结果符合定义即可。哈希左连接和哈希右连接则是实现层面的算法类型,被用于实现所有逻辑连接类型。后续会介绍具体的连接过程,此处不再赘述。
52.本文使用的术语“匹配标识位”用于在利用预设哈希右连接算法时,对构建表中的数据添加的标识位。
55.现有技术中,在进行哈希连接时,先将两个待连接表中数据量较小的确定为主表,将数据量较大的确定为副表,然后将主表加载到内存中进行哈希,得到哈希表(即构建表),但是若当前内存空间小于主表的大小时,此时就无法将主表全部加载到内存中,需要对主表和副表进行分区,将主表和副表分区成相同数量的分区表。
56.在得到分区表后,现有技术会将主表的分区表依次加载到内存中,进行哈希,得到分区表对应的哈希表,在对相应的副表的分区表进行探测,以实现相对应的主表和副表的分区表的连接。但是,由于分区采用的是哈希函数,其分区得到的分区表的大小不一,这就可能会导致分区表的大小可能仍然会大于内存大小,此时就需要重新选择哈希函数进行重新分区,这就会增加额外的运算,导致连接性能下降。
57.发明人针对上述情况,将确定构建表(即需要加载到内存中的分区表)和探测表的过程延迟到加载分区表到内存的时候,也就是说,本技术的方案中,主表的分区表并不一定会加载到内存中进行构建表的构建,而是将满足预设条件的主表的分区表或者副表的分区表加载到内存中,构建相应的构建表。
58.基于上述思考,发明人创造性的提出,在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,通过获取各分区表的构建表确定要素;对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;获取两个待连接表的主副关系以及构建表和探测表与两个待连接表的归属关系,并根据主副关系和归属关系确定目标哈希连接算法;利用目标哈希连接算法对构建表和探测表进行连接,得到连接结果;每次对分区表进行连接时都根据构建表确定要素重新确定构建表和探测表,若其中的一个分区表满足预设条件,则可以将其确定为构建表,从而避免重新分区的可能性。
60.图1a为本技术的实施例一提供的一种分区哈希连接方法的流程示意图。本技术实施例可适用于分区哈希连接时分区表的大小大于内存空间大小的情况,该方法可以由本申
请实施例提供的分区哈希连接装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成在计算机设备中。如图1a所示,本技术实施例的方法具体包括:
61.步骤101、在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,获取各分区表的构建表确定要素。
62.需要说明的是,对两个待连接表进行哈希连接时,会将数据量较小的待连接表确定为主表,数据量较大的表确定为副表,然后将主表加载到内存中,利用哈希函数对主表的数据进行哈希,得到各数据对应的哈希值,所有哈希值构成构建表。
63.若内存当前的空间不足以加载主表的全部数据时,则会对主表和副表进行分区,此时,便是本步骤中提到的在对两个待连接表进行分区哈希连接的情况。
64.一般而言,对于主表和副表的分区,分区的数量都是相同的,在一个具体的例子中,将主表分区为32个分区表,对副表也会分区为32个分区表,且各分区都是一一对应的关系。具体可以如下表1所示:
66.分区号主表副表分区1分区表1_主表分区表1_副表分区2分区表2_主表分区表2_副表分区3分区表3_主表分区表3_副表...................
67.如表1所示,分区号相同的分区表,视为一对分区表,即“分区表1_主表”和“分区表1_副表”为一对分区表。本步骤中所指的任一对分区表,即时任一分区号对应的两个分区表。
68.需要说明的是,对主表和副表进行分区后,一般会按照分区号的顺序,将各分区号对应的一对分区表进行连接,为了便于说明,本实施例仅以“分区表1_主表”和“分区表1_副表”为例,对分区哈希连接中对于分区表的连接过程进行说明。
69.本步骤中,在对任一对分区表进行连接的情况下,首先获取各分区表的构建表确定要素,其中,构建表确定要素是用来确定两个分区表中,哪个分区表作为确定构建表的表,加载到内存中。
70.在一个具体的例子中,获取到的“分区表1_主表”的构建表确定要素可以为构建表确定要素1,获取到的“分区表1_副表”的构建表确定要素可以为构建表确定要素2。
71.步骤102、对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表。
72.本步骤中,要对各分区表的构建表确定要素进行对比,然后基于对比的结果选取符合预设条件的构建表确定要素对应的分区表,再以选取的分区表为基础得到构建表,同时将另一分区表确定为探测表。
73.具体的,构建表确定要素可以包括数据量和数据分布信息,其中,数据量指的是分区表中包含的全部数据所占据的空间大小,数据分布信息指的是分区表中存在的重复数据以及各重复数据的数量。
74.在一个具体的例子中,“分区表1_主表”中的具体数据可以如表2所示,“分区表1_副表”中的具体数据可以如表3所示。
79.假设数据表中的一个数据单元所占据的空间大小固定,那么“分区表1_主表”的数据量为16个数据单元大小,“分区表1_副表”的数据量为6个数据单元大小;“分区表1_主表”的数据分布信息为c1列存在1个重复数据“1”,重复数量为“7”,c2列存在2个重复数据“10”和“20”,重复数量为“5”个“10”,“2”个“20”,“分区表1_副表”的数据分布信息为c1列存在0个重复数据,重复数量为“0”,c2列存在0个重复数据,重复数量为“0”。
80.本步骤中,对比时需要对同样的参数分数对比,首先可以基于数据分布信息确定各分区表的倾斜键数量,然后将倾斜键数量最少且数据量最小的分区白噢确定为构建表,并将另一分区表确定为探测表。
81.其中,基于数据分布信息确定各分区表的倾斜键数量,即可以通过数据分布数据中的重复数据确定为倾斜键,对应的重复数量确定为倾斜键涉及到的数据条数。在一个具体的例子中,如表2、表3所示,“分区表1_主表”存在3个倾斜键,倾斜键涉及到的数据条数分别为7、5、2;“分区表1_副表”存在0个倾斜键,涉及到的数据条数为0。
82.需要说明的是,前述提到的倾斜键数量最少且数据量最小即为本步骤中的预设条件,在一个具体的例子中,“分区表1_副表”是符合该预设条件的,那么就需要将“分区表1_副表”加载到内存中,进行哈希运算,得到各数据的哈希值,哈希值构成相应的构建表。并将“分区表1_主表”确定为探测表。
83.步骤103、获取两个待连接表的主副关系以及构建表和探测表与两个待连接表的归属关系,并根据主副关系和归属关系确定目标哈希连接算法。
84.需要说明的是,本实施例首先需要获取主副关系,具体的,可以将两个待连接表中数据量最小的待连接表确定为主表,另一待连接表确定为副表。
85.本实施例预先设定了两种哈希连接算法,该算法为具体实施哈希连接的过程算法,由于本实施例对于主表和副表的分区表,哪个作为构建表,哪个作为探测表是未知的,但是哈希连接的主副表是需要确定的,为了保证哈希连接的一致性,本实施例特设置了预设哈希左连接算法和预设哈希右连接算法。
86.本步骤中,若构建表归属于主表、探测表归属于副表,将预设哈希右连接算法确定为目标哈希连接算法;若构建表归属于副表,探测表归属于主表,将预设哈希左连接算法确定为目标哈希连接算法。
87.因此,当确定了主表的分区表为构建表时,采用预设哈希右连接算法,当确定了副表的分区表为构建表时,采用预设哈希左连接算法。需要说明的是,本技术中提到的确定分区表为构建表的意思为,确定分区表为确定构建表所基于的表。
88.在一个具体的例子中,对于表1中的分区1而言,通过表2和表3,将“分区表1_副表”加载到内存中,进行哈希运算,得到各数据的哈希值,哈希值构成相应的构建表。并将“分区表1_主表”确定为探测表。
89.因此,“分区表1_副表”对应的是构建表,构建表归属于副表,此时将则将预设哈希左连接算法确定为目标哈希连接算法。
90.步骤104、利用目标哈希连接算法对构建表和探测表进行连接,得到连接结果。
91.本步骤中,不同的哈希连接算法,具体的连接过程是有所不同的,对于具体的连接过程,会在后续实施例中进行介绍,此处不再赘述。
92.另外,在将构建表和探测表进行连接时,需要对探测表进行遍历,每遍历到一条数据时,需要计算该条数据连接属性的哈希值,然后与构建表中的哈希值进行比较,从而找到满足连接条件的结果,将该结果与该条遍历的数据进行组合,得到该条遍历数据对应的连接数据。
94.仍以表2、表3为例,连接条件可以是表2的c1=表3的c1且表2的c2《表3的c2。那么具体的连接过程可以参阅图1b,图1b是本技术的实施例一提供的一种哈希连接的具体示意图。
95.如图1b所示,对最左边的表(即表2)逐行进行遍历,第一行的“1,10”,从中间表中找到c1同样为1的行“1,15”,然后比较两组c2的大小,“10”《“15”,符合条件,比较结果为“true output”,若不符合,从而将两组数据进行组合,得到“1,10,1,15”,即一条连接数据,比较结果为“false skip”,进行下一条数据的遍历即可。
96.对表2遍历完成后,得到6条连接数据,该6条连接数据组成表2和表3的哈希连接的连接结果。
97.步骤105、当完成所有对分区表的连接时,根据各对分区表对应的连接结果得到对两个待连接表进行哈希连接的连接结果。
98.本步骤中,将所有的连接结果拼接后,即可得到对两个待连接表进行哈希连接的连接结果。
99.本技术实施例提供了一种分区哈希连接方法,在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,通过获取各分区表的构建表确定要素;对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;获取两个待连接表的主副关系以及构建表和探测表与两个待连接表的归属关系,并根据主副关系和归属关系确定目标哈希连接算法;利用目标哈希连接算法对构建表和探测表进行连接,得到连接结果;每次对分区表进行连接时都根据构建表确定要素重新确定构建表和探测表,若其中的一个分区表满足预设条件,则
101.图2a为本技术实施例二提供的一种利用预设哈希右连接算法对分区表进行哈希连接的流程示意图。本技术实施例可以与上述一个或者多个实施例中各个可选方案结合。
103.步骤201、对探测表中的数据进行遍历,在遍历到任一条数据时,从构建表中查询是否存在与数据匹配的数据。
104.本步骤中,对探测表进行遍历,具体可以按照行依次进行遍历,具体可以参阅图2b,图2b为利用预设哈希右连接算法对分区表进行哈希连接的具体示意图。
105.如图2b所示,探测表为图示最左边的表,即包括“1a,4c,2b,5d”数据的表,构建表为中间的数据表。在遍历到探测表中的“1”时,从构建表中查询是否存在与“1”一致的数据。
106.步骤202、若存在,将构建表中匹配的数据与探测表中对应的数据进行连接,得到一条连接数据,并为构建表中匹配的数据添加匹配标识位。
107.本步骤中,可以是预先为构建表中的数据添加匹配标识位,匹配标识位的初始值设定为“false”,然后本步骤中将匹配到的数据对应的匹配标识位更新为“true”。
108.当然,也可以是不预先添加,只有对匹配到的数据添加,以对未匹配到的数据进行区分。
110.步骤203、直到遍历完探测表中的所有数据,将构建表中不存在匹配标识位的数据分别与预设字段连接,得到每条不存在匹配标识位的数据对应的连接数据。
111.本步骤中,是基于步骤202中提到的“也可以是不预先添加,只有对匹配到的数据添加,以对未匹配到的数据进行区分”方式进行的,也就是说,不存在匹配标识位的数据,即与探测表没有匹配的数据。
112.另外,若采用步骤202中提到的“预先为构建表中的数据添加匹配标识位,匹配标识位的初始值设定为“false”,然后本步骤中将匹配到的数据对应的匹配标识位更新为“true
方式,本步骤即可以是将构建表中匹配标识位为“false”的数据与预设字段连接。
114.步骤204、将得到的所有连接数据确定为构建表与探测表进行哈希连接的连接结果。
115.本实施例中,采用预设哈希右连接算法,仍然可以得到与主表为构建表,副表为探测表相一致的结果。
116.另外,在探测阶段,需要遍历探测表中的每一条数据,从构建表中获取相匹配的数据,这一过程通常会出现大量的函数调用,若探测表中存在倾斜数据,那么就可能会出现重复的函数调用。
117.针对倾斜数据的情况,本实施例在步骤201之前,可以先对倾斜数据进行连接,具体的,可以先确定探测表中的倾斜数据,并收集所有倾斜数据所在的行序号;从构建表中确定与倾斜数据匹配的数据,并将匹配的数据与收集的行序号对应的数据进行列式运算,得到收集到的各行序号的数据对应的连接数据;再对探测表中除倾斜数据之外的数据执行遍历的过程,即步骤201。
118.需要说明的是,对于倾斜数据的处理,会在后续的实施例中进行详细说明,此处不再赘述。
120.图3a为本技术实施例三提供的一种利用预设哈希右连接算法对分区表进行哈希连接的流程示意图。本技术实施例可以与上述一个或者多个实施例中各个可选方案结合。
122.步骤301、对探测表进行遍历,在遍历到任一条数据时,从构建表中查询是否存在与数据匹配的数据。
123.本步骤中,对探测表进行遍历,具体可以按照行依次进行遍历,具体可以参阅图3b,图3b为利用预设哈希左连接算法对分区表进行哈希连接的具体示意图。
124.如图3b所示,探测表为图示最左边的表,即包括“1,1,2,3”数据的表,构建表为中间的数据表。在遍历到探测表中的“1”时,从构建表中查询是否存在与“1”一致的数据。
125.步骤302、若存在,将构建表中匹配的数据与探测表中对应的数据进行连接,得到一条连接数据。
126.步骤303、在遍历完探测表的所有数据后,将得到的所有连接数据确定为构建表与探测表进行哈希连接的连接结果。
127.需要说明的是,本实施例中,对于探测表中的任一遍历数据,若构建表中不存在相应的匹配数据,则可以将探测表中未匹配到的数据与预设字段组成连接数据,其中,预设字段同样为“null”。
128.针对倾斜数据的情况,本实施例在步骤301之前,可以先对倾斜数据进行连接,具体的,可以先确定探测表中的倾斜数据,并收集所有倾斜数据所在的行序号;从构建表中确定与倾斜数据匹配的数据,并将匹配的数据与收集的行序号对应的数据进行列式运算,得到收集到的各行序号的数据对应的连接数据;对探测表中除倾斜数据之外的数据执行遍历的过程,即步骤301。
129.具体的,可以参阅图3c,图3c为本技术的实施例三提供的一种对于倾斜数据的连接示意图。
130.如图3c所示,现将表2中的倾斜数据确定出来,一般取数量最多的,即“1”,对应的行号为“0、1、2、3、4、5、6”,将其进行块存储,然后找到表3中与“1”一致的数据,即“1,15”,然后将块存储的数据与“1,15”进行向量运算(即列式运算),然后再判断是否符合连接条件,即图中所示的true和false,将true的连接数据输出即可。
131.需要说明的是,确定构建表中的倾斜数据,可以从构建表中进行采样,将采样的数据中相同数据的数量大于预设数量阈值的数据确定为倾斜数据。
133.图4为本技术实施例四提供的一种分区哈希连接装置的结构示意图。该装置可采用软件和/或硬件的方式实现,并一般可集成在计算机设备中。如图4所示,装置包括:要素获取模块401、比对模块402、算法确定模块403、连接模块404以及连接结果确定模块405。
134.其中,要素获取模块401,用于在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,获取各分区表的构建表确定要素;比对模块402,用于对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定
构建表,并将另一分区表确定为探测表;算法确定模块403,用于获取两个待连接表的主副关系以及构建表和探测表与两个待连接表的归属关系,并根据主副关系和归属关系确定目标哈希连接算法;连接模块404,用于利用目标哈希连接算法对构建表和探测表进行连接,得到连接结果;连接结果确定模块405,用于当完成所有对分区表的连接时,根据各对分区表对应的连接结果得到对两个待连接表进行哈希连接的连接结果。
135.本技术实施例提供了一种分区哈希连接装置,在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,通过获取各分区表的构建表确定要素;对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;获取两个待连接表的主副关系以及构建表和探测表与两个待连接表的归属关系,并根据主副关系和归属关系确定目标哈希连接算法;利用目标哈希连接算法对构建表和探测表进行连接,得到连接结果;每次对分区表进行连接时都根据构建表确定要素重新确定构建表和探测表,若其中的一个分区表满足预设条件,则可以将其确定为构建表,从而避免重新分区的可能性。
136.在上述各实施例的基础上,比对模块402可以包括:倾斜键数量确定单元,用于基于数据分布信息确定各分区表的倾斜键数量;比对单元,用于将倾斜键数量最少且数据量最小的分区表确定为构建表,并将另一分区表确定为探测表。
137.在上述各实施例的基础上,算法确定模块403可以包括:主副关系确定单元,用于将两个待连接表中数据量最小的待连接表确定为主表,另一待连接表确定为副表;
138.第一算法确定单元,用于若构建表归属于主表、探测表归属于副表,将预设哈希右连接算法确定为目标哈希连接算法;
139.第二散发确定单元,用于若构建表归属于副表,探测表归属于主表,将预设哈希左连接算法确定为目标哈希连接算法。
140.在上述各实施例的基础上,连接模块404可以包括:第一遍历单元,用于对探测表中的数据进行遍历,在遍历到任一条数据时,从构建表中查询是否存在与数据匹配的数据;
141.匹配标识位添加单元,用于若存在,将构建表中匹配的数据与探测表中对应的数据进行连接,得到一条连接数据,并为构建表中匹配的数据添加匹配标识位;
142.第一连接单元,用于直到遍历完探测表中的所有数据,将构建表中不存在匹配标识位的数据分别与预设字段连接,得到每条不存在匹配标识位的数据对应的连接数据;
143.第一连接结果确定单元,用于将得到的所有连接数据确定为构建表与探测表进行哈希连接的连接结果。
144.在上述各实施例的基础上,连接模块404还可以包括:第一倾斜数据确定单元,用于确定探测表中的倾斜数据,并收集所有倾斜数据所在的行序号;
145.第一匹配单元,用于从构建表中确定与倾斜数据匹配的数据,并将匹配的数据与收集的行序号对应的数据进行列式运算,得到收集到的各行序号的数据对应的连接数据;
146.第一执行单元,用于对探测表中除倾斜数据之外的数据执行遍历的过程。
147.在上述各实施例的基础上,连接模块404可以包括:第二遍历单元,用于对探测表表进行遍历,在遍历到任一条数据时,从构建表中查询是否存在与数据匹配的数据;
148.第二连接单元,用于若存在,将构建表中匹配的数据与探测表中对应的数据进行连接,得到一条连接数据;
149.第二连接结果确定单元,用于在遍历完探测表的所有数据后,将得到的所有连接数据确定为构建表与探测表进行哈希连接的连接结果。
150.在上述各实施例的基础上,连接模块404还可以包括:第二倾斜数据确定单元,用于确定探测表中的倾斜数据,并收集所有倾斜数据所在的行序号;
151.第二匹配单元,用于从构建表中确定与倾斜数据匹配的数据,并将匹配的数据与收集的行序号对应的数据进行列式运算,得到收集到的各行序号的数据对应的连接数据;
152.第二执行单元,用于对探测表中除倾斜数据之外的数据执行遍历的过程。
153.在上述各实施例的基础上,第二倾斜数据确定单元可以包括:倾斜数据确定子单元,用于从构建表中进行采样,将采样的数据中相同数据的数量大于预设数量阈值的数据确定为倾斜数据。
154.上述分区哈希连接装置可执行本技术任意实施例所提供的分区哈希连接方法,具备执行分区哈希连接方法相应的功能模块和有益效果。
156.图5为本技术实施例五提供的一种计算机设备的结构示意图。图5示出了适于用来实现本技术实施方式的示例性计算机设备包括处理器510、存储器520、输入装置530和输出装置540;计算机设备510的数量可以是一个或多个,图5中以一个处理器510为例;设备/终端/服务器中的处理器510、存储器520、输入装置530和输出装置540可以通过总线作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的分区哈希连接方法对应的程序指令/模块(例如,分区哈希连接装置中的要素获取模块401、比对模块402、算法确定模块403、连接模块404以及连接结果确定模块405)。处理器510通过运行存储在存储器520中的软件程序、指令以及模块,从而执行设备/终端/服务器的各种功能应用以及数据处理,即实现上述实施例的方法:
158.处理器510通过运行存储在存储器520中的指令,从而执行各种功能应用以及数据处理,例如执行以下操作:
159.在对两个待连接表进行分区哈希连接的情况下,对于分区得到的任一对分区表,获取各分区表的构建表确定要素;
160.对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表;
161.获取两个待连接表的主副关系以及构建表和探测表与两个待连接表的归属关系,并根据主副关系和归属关系确定目标哈希连接算法;
163.当完成所有对分区表的连接时,根据各对分区表对应的连接结果得到对两个待连接表进行哈希连接的连接结果。
164.在上述各实施例的基础上,构建表确定要素包括数据量和数据分布信息;处理器510是设置为通过以下方式确定构建表和探测表:
165.对各分区表的构建表确定要素进行比对,根据符合预设条件的构建表确定要素对应的分区表确定构建表,并将另一分区表确定为探测表,包括:
167.将倾斜键数量最少且数据量最小的分区表确定为构建表,并将另一分区表确定为探测表。
168.在上述各实施例的基础上,处理器510是设置为通过以下方式确定目标哈希连接算法:
169.将两个待连接表中数据量最小的待连接表确定为主表,另一待连接表确定为副表;
170.若构建表归属于主表、探测表归属于副表,将预设哈希右连接算法确定为目标哈希连接算法;
171.若构建表归属于副表,探测表归属于主表,将预设哈希左连接算法确定为目标哈希连接算法。
172.在上述各实施例的基础上,处理器510是设置为通过以下方式得到连接结果:
173.对探测表中的数据进行遍历,在遍历到任一条数据时,从构建表中查询是否存在与数据匹配的数据;
174.若存在,将构建表中匹配的数据与探测表中对应的数据进行连接,得到一条连接数据,并为构建表中匹配的数据添加匹配标识位;
175.直到遍历完探测表中的所有数据,将构建表中不存在匹配标识位的数据分别与预设字段连接,得到每条不存在匹配标识位的数据对应的连接数据;
176.将得到的所有连接数据确定为构建表与探测表进行哈希连接的连接结果。
177.在上述各实施例的基础上,处理器510是设置为通过以下方式对倾斜数据进行连接:
179.从构建表中确定与倾斜数据匹配的数据,并将匹配的数据与收集的行序号对应的数据进行列式运算,得到收集到的各行序号的数据对应的连接数据;
181.在上述各实施例的基础上,处理器510是设置为在对构建表进行遍历之前,通过以下方式对倾斜数据进行连接:
183.从探测表中确定与倾斜数据匹配的数据,并将匹配的数据与收集的行序号对应的数据进行列式运算,得到收集到的各行序号的数据对应的连接数据;
185.在上述各实施例的基础上,处理器510是设置为通过以下方式确定构建表中的倾斜数据:
186.从构建表中进行采样,将采样的数据中相同数据的数量大于预设数量阈值的数据确定为倾斜数据。
187.存储器520可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器520可进一步包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至设备/终
端/服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
188.输入装置530可用于接收输入的数字或字符信息,以及产生与设备/终端/服务器的用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。
190.本技术实施例六提供了一种计算机可读存储介质,存储介质用于存储指令,指令用于执行本技术任一实施例所提供的分区哈希连接方法。
191.可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
192.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
193.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。
194.可以以一种或多种程序设计语言或其组合来编写用于执行本技术操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
195.注意,上述仅为本技术的较佳实施例及所运用技术原理。本领域技术人员会理解,本技术不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本技术的保护范围。因此,虽然通过以上实施例对本技术进行了较为详细的说明,但是本技术不仅仅限于以上实施例,在不脱离本技术构思的情况下,还可以包括更多其他等效实施例,而本技术的范围由所附的权利要求范围决定。
1.计算机视觉 2.无线.计算机仿线.网络安全;物联网安全 、大数据安全 2.安全态势感知、舆情分析和控制 3.区块链及应用