一种有效解决rehash冲突的元素序列生成方法技术

技术编号:22308349 阅读:29 留言:0更新日期:2019-10-16 08:26
本发明专利技术公开了一种有效解决rehash冲突的元素序列生成方法,该方法包括:生成初始元素序列;按初始元素序列中各元素的排列顺序将各元素插入一或多张哈希表中的一张哈希表中,若当前待插入元素因哈希冲突无法成功插入某一哈希表,通过回溯操作更改已插入的元素的插入位置,以使当前待插入元素成功插入哈希表中;根据元素的身份信息和最终插入位置信息得到有效元素序列。本发明专利技术能够充分利用GPU高速并行计算性能来解决rehash过程中数据插入时的冲突问题。

An effective method of generating element sequence to resolve rehash conflict

【技术实现步骤摘要】
一种有效解决rehash冲突的元素序列生成方法
本专利技术涉及一种元素序列生成方法,尤其涉及一种有效解决rehash冲突的元素序列生成方法。
技术介绍
随着因特网的发展,高吞吐量和低延迟的性能需求越来越重要,而哈希(hash)表作为一种高效性的键-值存储结构,能够较快的进行查找、查询、插入及删除,具有非常好的性能优势,因而被广泛应用于数据包分类与管理、网络监控等大数据流处理,然而,在当今大数据时代,庞大的数据量处理必然会发生hash碰撞,解决冲突的一个经典算法就是采用链地址法,可以想象,当冲突的链的长度越来越长或者冲突过度集中,访问存储器的次数越多,查询速率必然会减慢,影响了性能,为了优化大数据查询效率和提高内存利用率,需要进行rehash过程,即将hash表进行扩容后将原表中的数据map到新表中,此时需要重新根据hash函数进行计算,而在大规模数据下,rehash过程仍会发生冲突。现有的解决hash冲突的有效方法是建立“Cuckoohashtable”,利用多哈希的随机性优于单哈希,构建多个哈希函数,将元素插入到多个桶数组中,此算法已经被证明在实践中性能很好的存储结构,但是“Cuckoohash”只对中小负载因子有很好的效果,这仍不能解决rehash冲突问题。“Cuckoohash”的原理是:根据事先设定的多个hash函数计算出hash值(即在hash表中的位置),在插入过程中,如果当前插入元素的可插入位置中有某一个为空,则直接将元素插入空位。如果没有一个为空,则任选一个占据其可插入位置的元素,将其“踢出”,自己占据所选位置,被“踢出”的元素,再根据上述插入原理正常插入。但“Cuckoohash”的一种可能插入情况是:插入的元素(记为元素0)踢出一个元素,记为元素1,元素1踢出元素2……依次踢出,最终最后一张表的元素(记为元素n)被踢出后,根据插入原理,元素n需要在第一张hash表中插入,于是元素n可能将元素0踢出。这时就回到了插入过程开始时的状态,即元素0不能插入hash表中,即产生了rehash冲突。
技术实现思路
专利技术目的:为克服现有技术的缺陷,本专利技术提出了一种有效解决rehash冲突的元素序列生成方法。技术方案:本专利技术的有效解决rehash冲突的元素序列生成方法包括以下步骤:(1)生成初始元素序列;(2)按初始元素序列中各元素的排列顺序将各元素插入多张哈希表中的一张哈希表中;其中,各元素在各哈希表中的插入位置是根据各个哈希表对应的哈希函数确定的;每个待插入元素的插入过程包括:从第一张哈希表开始尝试插入,如果第一张哈希表中的位置被已插入的冲突元素占据,则尝试插入第二张哈希表,依此类推,直至能够成功插入一张哈希表,记录当前待插入元素的相关信息;如果待插入元素在所有哈希表中的对应位置都被冲突元素占据,则将所述待插入元素作为回溯节点进行回溯操作,以更改已插入元素的插入位置,以使当前待插入元素能够成功插入一张哈希表中,并记录当前待插入元素和更改后的已插入元素的相关信息;(3)当初始元素序列中的所有元素全部插入所述多张哈希表后,根据记录的每一元素的相关信息得到有效元素序列。步骤(2)中,所述回溯操作具体包括:(21)记录当前回溯节点在各哈希表中占据对应位置的冲突元素的相关信息;(22)将已插入的元素按照与插入时相反的顺序取出,直到首次取出冲突元素;(23)判断首次取出的冲突元素是否可以插入到其所在哈希表的后续哈希表中,若不可以,则以所述首次取出的冲突元素作为当前回溯节点进行下一轮回溯操作;若可以,则将首次取出的冲突元素插入后续可插入的哈希表中,将步骤(22)中取出的其他已插入元素重新插入所述多张哈希表中,如果在重新插入的过程中出现某个待重新插入的元素在所有哈希表中的对应位置都被冲突元素占据的情况,则以所述待重新插入的元素作为当前回溯节点进行下一轮回溯操作。步骤(1)中,所述初始元素序列中的各数据元素是在GPU核中基于CPU中生成的数组通过随机算法生成的,将CPU中生成的所述数组记为Element,Element用于存储转移至GPU的只读数据;所述初始元素序列中各数据元素包括元素的关键字以及元素在Element中的索引。步骤(21)中,冲突元素的相关信息包括冲突元素在Element中的索引。步骤(23)中,回溯时取出的已插入元素的相关信息存放在第一栈结构中;成功插入的元素的相关信息存放在第二栈结构中;第一栈结构和第二栈结构中存放的每一数据元素的相关信息包括:元素在Element中的索引、所处哈希表的序号、元素在哈希表中的序号、元素的关键字。有益效果:与现有技术相比,本专利技术具有以下优点:1、在分析过程中采用层次树形结构,其中每一个节点代表一个元素,在插入元素过程中建立FailIndex数组用于存放冲突元素的身份信息,建立Temporary堆栈用于存放回溯时的沿途节点,能够确保rehash过程一定成功;2、通过充分利用GPU高速并行计算性能和合理使用数据结构进行数据传输,极大提高数据元素的存取效率。附图说明图1是本专利技术有效解决rehash冲突的元素序列生成方法的一个实施例的流程图;图2是本专利技术有效解决rehash冲突的元素序列生成方法涉及的算法数数据结构示意图;图3是本专利技术的回溯操作示意图。具体实施方式以下结合附图对本专利技术进行详细说明。图1是根据本专利技术解决Rehash冲突问题的一个实施例的示意性流程图。root序列是由计算机根据GPU核id生成的序列,是待插入的一组元素序列;Temporary栈是用来存储由Back()函数回溯得到的元素,记录了该元素的身份相关信息;变量element是一存储元素相关信息的特殊结构体,代表待插入哈希表中的数据元素;Result栈存储最终有效序列。本实施例是基于树形结构来进行的,首先,假设以三个hash表为例(分别为T1,T2,T3),root序列有n个待插入元素,根据新定义的hash函数能够得到三个表中该元素的对应值,对于每个待插入元素,插入表中的顺序优先为T1,若该元素在T1中位置已被其他元素占有,则根据其在T2中位置插入T2中,T3同理。然后,当出现第k(0<k<n-1)个元素要插入的三个表中相应位置均被存有其他元素,则说明该元素不能插入,此时开始调用Back()函数开始向上回溯,回溯操作包括将三张表中对应位置的冲突元素的相关信息存入FailIndex数组,并将沿途节点(即数据元素)取出存入Temporary栈中,直至首次取出冲突元素(即,相关信息存在于FailIndex数组中的元素),判断此首次取出的冲突元素是否可以更换hash表,即是否可以插入至当前所处hash表的后续hash表中。若可以更换,则判断此时Temporary栈是否为空,若为空,则将root序列当前指向元素放入Temporary中,否则,依次弹出Temporary栈中元素重新插入多张hash表中,插入成功的元素将被记录于Result栈中。如果在重新插入的过程中又出现某个元素在所有哈希表中的对应位置被冲突元素占据的情形,则以该需重新插入的元素作为当前回溯节点,进行下一轮回溯。若不能更换,则将首次取出的冲突元素作为当前回溯节点,继续向上回溯(即进行下一轮回溯,包括更新FailIndex数组中记本文档来自技高网
...

【技术保护点】
1.一种有效解决rehash冲突的元素序列生成方法,其特征在于,包括以下步骤:(1)生成初始元素序列;(2)按初始元素序列中各元素的排列顺序将各元素插入多张哈希表中的一张哈希表中;其中,各元素在各哈希表中的插入位置是根据各个哈希表对应的哈希函数确定的;每个待插入元素的插入过程包括:从第一张哈希表开始尝试插入,如果第一张哈希表中的位置被已插入的冲突元素占据,则尝试插入第二张哈希表,依此类推,直至能够成功插入一张哈希表,记录当前待插入元素的相关信息;如果待插入元素在所有哈希表中的对应位置都被冲突元素占据,则将所述待插入元素作为回溯节点进行回溯操作,以更改已插入元素的插入位置,以使当前待插入元素能够成功插入一张哈希表中,并记录当前待插入元素和更改后的已插入元素的相关信息;(3)当初始元素序列中的所有元素全部插入所述多张哈希表后,根据记录的每一元素的相关信息得到有效元素序列。

【技术特征摘要】
1.一种有效解决rehash冲突的元素序列生成方法,其特征在于,包括以下步骤:(1)生成初始元素序列;(2)按初始元素序列中各元素的排列顺序将各元素插入多张哈希表中的一张哈希表中;其中,各元素在各哈希表中的插入位置是根据各个哈希表对应的哈希函数确定的;每个待插入元素的插入过程包括:从第一张哈希表开始尝试插入,如果第一张哈希表中的位置被已插入的冲突元素占据,则尝试插入第二张哈希表,依此类推,直至能够成功插入一张哈希表,记录当前待插入元素的相关信息;如果待插入元素在所有哈希表中的对应位置都被冲突元素占据,则将所述待插入元素作为回溯节点进行回溯操作,以更改已插入元素的插入位置,以使当前待插入元素能够成功插入一张哈希表中,并记录当前待插入元素和更改后的已插入元素的相关信息;(3)当初始元素序列中的所有元素全部插入所述多张哈希表后,根据记录的每一元素的相关信息得到有效元素序列。2.根据权利要求1所述的有效解决rehash冲突的元素序列生成方法,其特征在于,步骤(2)中,所述回溯操作具体包括:(21)记录当前回溯节点在各哈希表中占据对应位置的冲突元素的相关信息;(22)将已插入的元素按照与插入时相反的顺序取出,直到首次取出冲突元素;(23)判断首次取出的冲突元素是否可以插入到其所在哈希表的后续哈希表中,若不可以,则以所述首次取出的冲突元...

【专利技术属性】
技术研发人员:刘威王俊昌薛凌妍厉小虎
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1