CN110334251A - 一种有效解决rehash冲突的元素序列生成方法 - Google Patents
一种有效解决rehash冲突的元素序列生成方法 Download PDFInfo
- Publication number
- CN110334251A CN110334251A CN201910583482.0A CN201910583482A CN110334251A CN 110334251 A CN110334251 A CN 110334251A CN 201910583482 A CN201910583482 A CN 201910583482A CN 110334251 A CN110334251 A CN 110334251A
- Authority
- CN
- China
- Prior art keywords
- conflict
- hash table
- hash
- sequence
- rehash
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种有效解决rehash冲突的元素序列生成方法,该方法包括:生成初始元素序列;按初始元素序列中各元素的排列顺序将各元素插入一或多张哈希表中的一张哈希表中,若当前待插入元素因哈希冲突无法成功插入某一哈希表,通过回溯操作更改已插入的元素的插入位置,以使当前待插入元素成功插入哈希表中;根据元素的身份信息和最终插入位置信息得到有效元素序列。本发明能够充分利用GPU高速并行计算性能来解决rehash过程中数据插入时的冲突问题。
Description
技术领域
本发明涉及一种元素序列生成方法,尤其涉及一种有效解决rehash冲突的元素序列生成方法。
背景技术
随着因特网的发展,高吞吐量和低延迟的性能需求越来越重要,而哈希(hash)表作为一种高效性的键-值存储结构,能够较快的进行查找、查询、插入及删除,具有非常好的性能优势,因而被广泛应用于数据包分类与管理、网络监控等大数据流处理,然而,在当今大数据时代,庞大的数据量处理必然会发生hash碰撞,解决冲突的一个经典算法就是采用链地址法,可以想象,当冲突的链的长度越来越长或者冲突过度集中,访问存储器的次数越多,查询速率必然会减慢,影响了性能,为了优化大数据查询效率和提高内存利用率,需要进行rehash过程,即将hash表进行扩容后将原表中的数据map到新表中,此时需要重新根据hash函数进行计算,而在大规模数据下,rehash过程仍会发生冲突。
现有的解决hash冲突的有效方法是建立“Cuckoo hash table”,利用多哈希的随机性优于单哈希,构建多个哈希函数,将元素插入到多个桶数组中,此算法已经被证明在实践中性能很好的存储结构,但是“Cuckoo hash”只对中小负载因子有很好的效果,这仍不能解决rehash冲突问题。“Cuckoo hash”的原理是:根据事先设定的多个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数组中记录的元素的相关信息,逆序取出哈希表中已插入的元素至再次取出记录在已更新的FailIndex中的冲突元素等等)。
举个例子,假设root序列中有100个数据元素,需要插入3张哈希表中。当插入到第50个元素时发现3张哈希表的对应位置均被冲突元素占据。如此,则从第50个元素开始回溯操作,即在FailIndex中记录第50个元素的3个冲突元素的信息,并从第50个元素起逆序取出已插入的元素,直到发现第27个元素为已记录在FailIndex的冲突元素。如果经过判断,第27个元素在3张哈希表中均被冲突元素占据,则又进行下一轮回溯,包括更新FailIndex中的元素相关信息,即清除第50个元素的冲突元素并记录第27个元素的3个冲突元素的信息,再从第27个元素起逆序取出已插入的元素,直到发现第23个元素为已记录在FailIndex的冲突元素。判断发现第23个元素可以更换至别的哈希表,则进行更换,并将第24至第50个元素重新插入3张哈希表中,并继续插入后续元素,直至root中的元素全部插入完成。
可见,通过回溯操作可以动态调整各元素在hash表中的位置,最终Result栈可以得到一组能够成功插入hash表的有效序列。算法伪代码描述如下:
上述伪代码中,LocalElement数组即为root数组。
图2是本发明的算法数据结构图,主要有Element数组、root数组及Result栈、Temporary栈。其中,Element数组是由CPU产生的,用于存储转移至GPU的只读数据,它包含的每一数据元素包括元素关键字(例如但不限于,某个人的身份证号,姓名,年龄,出生年月等等)、元素值、根据各哈希表的hash函数计算出的多个hash值。root数组是基于Element中的数据元素根据随机算法在GPU核中生成,且root数组在每个GPU线程中各不相同,它与当前GPU线程中所需要用到的信息相关。具体说来,GPU线程在启动时会根据当前GPU的thread-id(线程id)生成一个随机序列即root数组,同时GPU需要保证所有线程中的随机序列的开头各不相同。root数组中的单个数据元素包括元素的关键字以及元素在Element数组中的索引。Result栈存储最终有效序列,Temporary栈存储由Back()函数产生的数据。Temporary和Result这两个数据结构中存放的每个数据元素的相关信息包括:元素在Element中的索引、所处哈希表的序号、哈希表中的元素信息(即该数据元素在哈希表中的序号、关键字)。此外,FailIndex数组中存放的数据元素的相关信息包括元素在Element中的索引。通过这些数据结构,在大量的插入、取出元素的过程中能够使每次操作的数据量大大减小,比如说,若是每次插入、取出操作的单位是Element数组中的元素,则每次操作都会传送一些无用信息(除关键字外的元素信息,如元素值、该数据元素对应的多个哈希表中的hash值等),这样造成了资源的极大浪费。但是若是以root中的小型元素为单位,就可以保证每次操作的都是关键信息,这样能够极大提高数据元素的存取效率。
图3是根据本发明的算法实施例结构图,采用的是树形结构,由树的根节点到每个叶子结点代表一个GPU线程,每个节点代表插入成功的数据元素。
本发明的优点是充分利用GPU高速并行计算性能来解决rehash过程中数据插入时的冲突问题。
以上仅为本发明的一个示例,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。
Claims (5)
1.一种有效解决rehash冲突的元素序列生成方法,其特征在于,包括以下步骤:
(1)生成初始元素序列;
(2)按初始元素序列中各元素的排列顺序将各元素插入多张哈希表中的一张哈希表中;其中,各元素在各哈希表中的插入位置是根据各个哈希表对应的哈希函数确定的;每个待插入元素的插入过程包括:从第一张哈希表开始尝试插入,如果第一张哈希表中的位置被已插入的冲突元素占据,则尝试插入第二张哈希表,依此类推,直至能够成功插入一张哈希表,记录当前待插入元素的相关信息;如果待插入元素在所有哈希表中的对应位置都被冲突元素占据,则将所述待插入元素作为回溯节点进行回溯操作,以更改已插入元素的插入位置,以使当前待插入元素能够成功插入一张哈希表中,并记录当前待插入元素和更改后的已插入元素的相关信息;
(3)当初始元素序列中的所有元素全部插入所述多张哈希表后,根据记录的每一元素的相关信息得到有效元素序列。
2.根据权利要求1所述的有效解决rehash冲突的元素序列生成方法,其特征在于,步骤(2)中,所述回溯操作具体包括:
(21)记录当前回溯节点在各哈希表中占据对应位置的冲突元素的相关信息;
(22)将已插入的元素按照与插入时相反的顺序取出,直到首次取出冲突元素;
(23)判断首次取出的冲突元素是否可以插入到其所在哈希表的后续哈希表中,若不可以,则以所述首次取出的冲突元素作为当前回溯节点进行下一轮回溯操作;若可以,则将首次取出的冲突元素插入后续可插入的哈希表中,将步骤(22)中取出的其他已插入元素重新插入所述多张哈希表中,如果在重新插入的过程中出现某个待重新插入的元素在所有哈希表中的对应位置都被冲突元素占据的情况,则以所述待重新插入的元素作为当前回溯节点进行下一轮回溯操作。
3.根据权利要求2所述的有效解决rehash冲突的元素序列生成方法,其特征在于,步骤(1)中,所述初始元素序列中的各数据元素是在GPU核中基于CPU中生成的数组通过随机算法生成的,将CPU中生成的所述数组记为Element,Element用于存储转移至GPU的只读数据;所述初始元素序列中各数据元素包括元素的关键字以及元素在Element中的索引。
4.根据权利要求3所述的有效解决rehash冲突的元素序列生成方法,其特征在于,步骤(21)中,冲突元素的相关信息包括冲突元素在Element中的索引。
5.根据权利要求3所述的有效解决rehash冲突的元素序列生成方法,其特征在于,步骤(23)中,回溯时取出的已插入元素的相关信息存放在第一栈结构中;成功插入的元素的相关信息存放在第二栈结构中;第一栈结构和第二栈结构中存放的每一数据元素的相关信息包括:元素在Element中的索引、所处哈希表的序号、元素在哈希表中的序号、元素的关键字。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910583482.0A CN110334251B (zh) | 2019-07-01 | 2019-07-01 | 一种有效解决rehash冲突的元素序列生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910583482.0A CN110334251B (zh) | 2019-07-01 | 2019-07-01 | 一种有效解决rehash冲突的元素序列生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110334251A true CN110334251A (zh) | 2019-10-15 |
CN110334251B CN110334251B (zh) | 2021-10-19 |
Family
ID=68144631
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910583482.0A Active CN110334251B (zh) | 2019-07-01 | 2019-07-01 | 一种有效解决rehash冲突的元素序列生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110334251B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1437357A (zh) * | 2002-02-07 | 2003-08-20 | 华为技术有限公司 | 多哈希函数的虚通道标识/虚通路标识的查找方法 |
CN102682116A (zh) * | 2012-05-14 | 2012-09-19 | 中兴通讯股份有限公司 | 基于哈希表的表项处理方法及其装置 |
EP3098730A1 (en) * | 2015-05-29 | 2016-11-30 | Sap Se | Aggregating database entries by hashing |
CN108874941A (zh) * | 2018-06-04 | 2018-11-23 | 成都知道创宇信息技术有限公司 | 基于卷积特征和多重哈希映射的大数据url去重方法 |
CN109828966A (zh) * | 2019-01-17 | 2019-05-31 | 平安科技(深圳)有限公司 | 渐进式重哈希方法、装置、计算机设备及存储介质 |
-
2019
- 2019-07-01 CN CN201910583482.0A patent/CN110334251B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1437357A (zh) * | 2002-02-07 | 2003-08-20 | 华为技术有限公司 | 多哈希函数的虚通道标识/虚通路标识的查找方法 |
CN102682116A (zh) * | 2012-05-14 | 2012-09-19 | 中兴通讯股份有限公司 | 基于哈希表的表项处理方法及其装置 |
EP3098730A1 (en) * | 2015-05-29 | 2016-11-30 | Sap Se | Aggregating database entries by hashing |
CN108874941A (zh) * | 2018-06-04 | 2018-11-23 | 成都知道创宇信息技术有限公司 | 基于卷积特征和多重哈希映射的大数据url去重方法 |
CN109828966A (zh) * | 2019-01-17 | 2019-05-31 | 平安科技(深圳)有限公司 | 渐进式重哈希方法、装置、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
HYACINTH-DY: "《哈希(hash)冲突的处理方法》", 《CSDN》 * |
方瑞英 等: "基于线性探测再散列的哈希表查找效率浅析", 《电脑知识与技术》 * |
Also Published As
Publication number | Publication date |
---|---|
CN110334251B (zh) | 2021-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109683811B (zh) | 一种混合内存键值对存储系统的请求处理方法 | |
US7895211B2 (en) | Method and system for reinserting a chain in a hash table | |
US9871727B2 (en) | Routing lookup method and device and method for constructing B-tree structure | |
US8224861B2 (en) | Coupled node tree splitting/conjoining method and program | |
US20120137060A1 (en) | Multi-stage TCAM search | |
CN106649401A (zh) | 分布式文件系统中的数据写入方法和装置 | |
CN103365992B (zh) | 一种基于一维线性空间实现Trie树的词典检索方法 | |
US8086641B1 (en) | Integrated search engine devices that utilize SPM-linked bit maps to reduce handle memory duplication and methods of operating same | |
CN103051543A (zh) | 一种路由前缀的处理、查找、增加及删除方法 | |
CN107153707A (zh) | 一种针对非易失内存的哈希表构建方法及系统 | |
CN108134739B (zh) | 一种基于索引特里树的路由查找方法及装置 | |
CN114064984B (zh) | 一种基于稀疏数组链表的世界状态增量更新方法及装置 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN102333036A (zh) | 一种实现高速路由查找的方法和系统 | |
WO2015010508A1 (zh) | 一种基于一维线性空间实现Trie树的词典存储管理方法 | |
CN110597852A (zh) | 数据处理方法、装置、终端及存储介质 | |
Pei et al. | An efficient query scheme for hybrid storage blockchains based on merkle semantic trie | |
Zhang et al. | SUMMA: subgraph matching in massive graphs | |
US7987205B1 (en) | Integrated search engine devices having pipelined node maintenance sub-engines therein that support database flush operations | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 | |
CN103425694B (zh) | 关系型数据的搜索方法和装置 | |
US7953721B1 (en) | Integrated search engine devices that support database key dumping and methods of operating same | |
CN105005621A (zh) | 一种大数据分布式存储及并行索引系统的构建方法 | |
CN101211346A (zh) | 一种优化存储器性能的方法 | |
CN110334251A (zh) | 一种有效解决rehash冲突的元素序列生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 210023 9 Wen Yuan Road, Qixia District, Nanjing, Jiangsu. Applicant after: NANJING University OF POSTS AND TELECOMMUNICATIONS Address before: No. 186, software Avenue, Yuhuatai District, Nanjing, Jiangsu Province, 210023 Applicant before: NANJING University OF POSTS AND TELECOMMUNICATIONS |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |