本发明涉及数据库查询操作的硬件加速领域,特别涉及哈希连接方法、装置、设备及介质。
背景技术:
1、数据库查询操作中,哈希连接算法是数据库中应用最为广泛的连接算法之一,可实现低时间复杂度和低功耗的连接计算。哈希连接算法分为构建和探测两个阶段,在构建阶段所有数据计算完成后,再进行探测阶段的数据计算。
2、常用的基于fpga(field programmable gate array,即现场可编程逻辑门阵列)的哈希连接加速方式,主要通过解决哈希冲突的实现方式来实现更优的加速方式,但是这些方式都无法实现探测阶段的大量数据的并行处理。现有探测阶段的并行数据处理,仅能通过划分哈希连接实现,计算复杂,且并行度和可扩展性较差,因此哈希连接速度较低。
3、综上可见,如何提高哈希连接的速度是本领域有待解决的问题。
技术实现思路
1、有鉴于此,本发明的目的在于提供一种哈希连接方法、装置、设备及介质,能够提高哈希连接的速度。其具体方案如下:
2、第一方面,本技术公开了一种哈希连接方法,包括:
3、获取第一待连接数据元组的第一数据和第二待连接数据元组的第二数据,并利用布谷鸟算法中第一哈希函数和第二哈希函数分别对所述第一数据和所述第二数据进行计算,以得到所述第一数据的哈希结果以及所述第二数据的哈希结果;
4、确定出与所述第一数据的哈希结果对应的第一目标哈希表以及与所述第二数据的哈希结果对应的第二目标哈希表;
5、分别将所述第一数据和所述第二数据分成若干组第一子数据和第二子数据,并分别存储所述第一子数据和所述第二子数据至所述第一目标哈希表和所述第二目标哈希表;
6、从所述第一哈目标希表和所述第二目标哈希表中读取所述第一子数据和所述第二子数据,并将满足等值条件的所述第一子数据和所述第二子数据进行归并连接,以得到连接后数据。
7、可选的,所述获取第一待连接数据元组的第一数据和第二待连接数据元组的第二数据,包括:
8、读取外部存储器中第一待连接数据元组和第二待连接数据元组,以得到所述第一待连接数据元组的第一数据和所述第二待连接数据元组的第二数据;其中,所述外部存储器为双倍速率同步动态随机存储器、同步动态随机存取存储器中的任意一种存储器。
9、可选的,所述利用布谷鸟算法中第一哈希函数和第二哈希函数分别对所述第一数据和所述第二数据进行计算,以得到所述第一数据的哈希结果以及所述第二数据的哈希结果,包括:
10、利用布谷鸟算法中第一哈希函数和第二哈希函数分别对所述第一数据和所述第二数据进行计算,以得到所述第一数据的第一哈希结果和第二哈希结果以及所述第二数据的第一哈希结果和第二哈希结果;
11、相应的,所述确定出与所述第一数据的哈希结果对应的第一目标哈希表以及与所述第二数据的哈希结果对应的第二目标哈希表,包括:
12、确定出与所述第一数据的第一哈希结果和第二哈希结果分别对应的第一哈希表地址、第二哈希表地址以及与所述第二数据的第一哈希结果和第二哈希结果分别对应的第三哈希表地址、第四哈希表地址;
13、从所述第一哈希表地址、所述第二哈希表地址中确定出第一目标哈希表地址,并从所述第三哈希表地址、所述第四哈希表地址中确定出第二目标哈希表地址;
14、可选的,所述分别存储所述第一子数据和所述第二子数据至所述第一目标哈希表和所述第二目标哈希表,包括:
15、存储所述第一子数据至与所述第一目标哈希表地址对应的哈希表内,并存储所述第二子数据至与所述第二目标哈希表地址对应的哈希表内。
16、可选的,所述从所述第一哈希表地址、所述第二哈希表地址中确定出第一目标哈希表地址,并从所述第三哈希表地址、所述第四哈希表地址中确定出第二目标哈希表地址,包括:
17、判断与所述第一哈希表地址、所述第二哈希表地址分别对应的哈希表中是否存在空闲哈希桶,若存在则将与所述第一哈希表地址、所述第二哈希表地址分别对应的哈希表中存在空闲哈希桶数量最大的哈希表的地址确定为第一目标哈希表地址,将另一哈希表的地址确定为第一目标哈希表备用地址;
18、判断与所述第三哈希表地址、所述第四哈希表地址分别对应的哈希表中是否存在空闲哈希桶,若存在则将与所述第三哈希表地址、所述第四哈希表地址分别对应的哈希表中存在空闲哈希桶数量最大的哈希表确定为第二目标哈希表地址,将另一哈希表的地址确定为第二目标哈希表备用地址;
19、相应的,所述分别存储所述第一子数据和所述第二子数据至所述第一目标哈希表和所述第二目标哈希表,包括:
20、将所述第一子数据和第一目标哈希表备用地址存储至所述第一目标哈希表的空闲哈希桶中,并将所述第二子数据和第二目标哈希表备用地址存储至所述第二目标哈希表的空闲哈希桶中。
21、可选的,所述判断与所述第一哈希表地址、所述第二哈希表地址分别对应的哈希表中是否存在空闲哈希桶之后,还包括:
22、若不存在,则查找与所述第一哈希表地址、所述第二哈希表地址分别对应的哈希表中哈希桶内存储数据的备用地址,基于所述备用地址判断是否存在满足预设条件的哈希桶;
23、若存在,将满足预设条件的哈希桶内存储的数据转存至与所述备用地址对应的哈希表中的哈希桶内,以便将所述第一子数据存储到满足预设条件的哈希桶;若不存在,将第一子数据存储到所述第一目标哈希表对应的链表中。
24、可选的,所述分别存储所述第一子数据和所述第二子数据至所述第一目标哈希表和所述第二目标哈希表之后,还包括:
25、记录所述第一目标哈希表和所述第二目标哈希表中存储的数据的总量。
26、第二方面,本技术公开了一种哈希连接装置,包括:
27、哈希结果获取模块,用于获取第一待连接数据元组的第一数据和第二待连接数据元组的第二数据,并利用布谷鸟算法中第一哈希函数和第二哈希函数分别对所述第一数据和所述第二数据进行计算,以得到所述第一数据的哈希结果以及所述第二数据的哈希结果;
28、哈希表确定模块,用于确定出与所述第一数据的哈希结果对应的第一目标哈希表以及与所述第二数据的哈希结果对应的第二目标哈希表;
29、存储模块,用于分别将所述第一数据和所述第二数据分成若干组第一子数据和第二子数据,并分别存储所述第一子数据和所述第二子数据至所述第一目标哈希表和所述第二目标哈希表;
30、归并连接模块,用于从所述第一哈目标希表和所述第二目标哈希表中读取所述第一子数据和所述第二子数据,并将满足等值条件的所述第一子数据和所述第二子数据进行归并连接,以得到连接后数据。
31、第三方面,本技术公开了一种电子设备,包括:
32、存储器,用于保存计算机程序;
33、处理器,用于执行所述计算机程序,以实现前述公开的哈希连接方法的步骤。
34、第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的哈希连接方法的步骤。
35、可见,本技术获取第一待连接数据元组的第一数据和第二待连接数据元组的第二数据,并利用布谷鸟算法中第一哈希函数和第二哈希函数分别对所述第一数据和所述第二数据进行计算,以得到所述第一数据的哈希结果以及所述第二数据的哈希结果;确定出与所述第一数据的哈希结果对应的第一目标哈希表以及与所述第二数据的哈希结果对应的第二目标哈希表;分别将所述第一数据和所述第二数据分成若干组第一子数据和第二子数据,并分别存储所述第一子数据和所述第二子数据至所述第一目标哈希表和所述第二目标哈希表;从所述第一哈目标希表和所述第二目标哈希表中读取所述第一子数据和所述第二子数据,并将满足等值条件的所述第一子数据和所述第二子数据进行归并连接,以得到连接后数据。由此可见,本技术在构建阶段实现对第一待连接数据元组的第一数据和第二待连接数据元组的第二数据进行哈希计算与存储,以便后续可以将满足等值条件的第一子数据和第二子数据进行归并连接,以得到连接后数据,消除了探测阶段每次只能处理一个数据元组连接的限制,即可以实现并行哈希计算、存储以及归并连接,因此提高了哈希连接的速度。