本发明涉及计算机,特别涉及一种哈希表处理方法、装置、设备、介质、控制器及固态硬盘。
背景技术:
1、哈希表,又叫散列表,是依据key值直接获取数据的存储结构,利用哈希函数在key值与存储位置之间建立一个映射关系来快速获取存储数据。理想情况下,哈希查找算法在时间复杂度方面能达到o(1),因此具有广泛的应用场景。传统的哈希查找实现方法主要在软件层面实现,目前单一的哈希函数无法有效平衡哈希冲突与空间利用率,而多哈希函数又需要频繁的访问内存空间,查找效率低下。随着技术的发展,对存储数据响应的要求越来越高,需要更高效率的哈希查找来满足数据存取响应的高性能要求。因此,现有通过硬件实现哈希表能有效降低内存访问频率,提升哈希查找效率。但是,由于哈希冲突存在,哈希表内数据元素较多后,新的数据元素要加入哈希表中往往需要进行rehash重新计算新的哈希值来寻找空闲的存储位置,这就增加了建表过程的时间开销,在性能方面存在一定的瓶颈。
2、哈希冲突是哈希表的建立过程中无法避免的问题,常用的解决方法主要有散列法和链地址法。散列法,又分为开放寻址法和再散列法两种。开放寻址法在发生哈希冲突时通过h(key)=(h(key)+d)%m(其中m为哈希表的表长,d为一个增量)计算出新的哈希地址,直到发现空闲存储位置后将key写入哈希表;再散列法在发生哈希冲突时使用另一个哈希函数来重新计算,直到冲突不再发生。链地址法在发生哈希冲突时将产生冲突的key存储在对应位置的链表中,因此需要额外一张表来存放这些线性表指针。
3、综上,现有技术中存在以下问题:(1)散列法下的哈希表存在程序效率低,性能差等问题;(2)链地址法下的哈希表又存在内存空间利用率低,性能波动大的问题;(3)多哈希函数下的哈希表在建表过程的时间开销大,性能存在瓶颈。以上是本领域技术人员需要解决的问题。
技术实现思路
1、有鉴于此,本发明的目的在于提供一种哈希表处理方法、装置、设备、介质、控制器及固态硬盘,以提高哈希表性能,提升内存空间利用率,减少性能波动,提高qos(servicequality,服务质量)。其具体方案如下:
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、第五方面,本发明提供了一种控制器,包括:
36、哈希计算电路,用于根据目标数据在内存中的目标指示信息计算得到目标哈希值;
37、偏移计算电路,用于根据所述目标哈希值计算得到目标偏移量;
38、扩展信息计算电路,用于对所述目标哈希值和所述目标偏移量进行计算,得到多个目标扩展信息;
39、存储电路,用于将所述多个目标扩展信息作为多个可选位置标记,并在哈希表中查询所述多个可选位置标记对应的多个可选桶;若所述多个可选桶中存在包括空闲单元的目标桶,则在所述目标桶中选择空闲的目标单元,将所述目标指示信息存储至所述目标单元后,将所述目标单元标记为非空闲。
40、可选地,还包括:
41、接收电路,用于接收主机端发送的所述目标指示信息;
42、响应电路,用于返回存储成功消息或存储失败消息至所述主机端;
43、迁移控制电路,用于控制溢出表中存储的指示信息从所述溢出表被迁移至所述哈希表的过程;
44、表监控模块,用于监控所述溢出表和所述哈希表。
45、第六方面,本发明提供了一种固态硬盘,包括前文所述的控制器。
46、通过以上方案可知,本发明提供了一种哈希表处理方法,包括:根据目标数据在内存中的目标指示信息计算得到目标哈希值;根据所述目标哈希值计算得到目标偏移量;对所述目标哈希值和所述目标偏移量进行计算,得到多个目标扩展信息;将所述多个目标扩展信息作为多个可选位置标记,并在哈希表中查询所述多个可选位置标记对应的多个可选桶;若所述多个可选桶中存在包括空闲单元的目标桶,则在所述目标桶中选择空闲的目标单元,将所述目标指示信息存储至所述目标单元后,将所述目标单元标记为非空闲。
47、可见,本发明的有益效果为:在根据目标数据在内存中的目标指示信息计算得到目标哈希值后,先根据目标哈希值进一步计算得到目标偏移量,然后对目标哈希值和目标偏移量进行计算,可得到多个目标扩展信息,之后将多个目标扩展信息作为多个可选位置标记,并在哈希表中查询多个可选位置标记对应的多个可选桶,若多个可选桶中存在包括空闲单元的目标桶,则在目标桶中选择空闲的目标单元,将目标指示信息存储至目标单元后,将目标单元标记为非空闲。由此能在哈希表中存储更多指示信息,降低了cpu负载、内存访问频率及哈希表操作响应延时,提高了内存空间利用率及qos。
48、相应地,本发明提供的一种哈希表处理装置、设备、介质、控制器及固态硬盘,也同样具有上述技术效果。