CN112416933A - 一种基于片内片外内存的高性能散列表实现方法 - Google Patents
一种基于片内片外内存的高性能散列表实现方法 Download PDFInfo
- Publication number
- CN112416933A CN112416933A CN202011302177.9A CN202011302177A CN112416933A CN 112416933 A CN112416933 A CN 112416933A CN 202011302177 A CN202011302177 A CN 202011302177A CN 112416933 A CN112416933 A CN 112416933A
- Authority
- CN
- China
- Prior art keywords
- sub
- hash
- chip
- main
- data
- 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
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于片内片外内存的高性能散列表实现方法,属于数据存储以及检索领域。该方法在片外建立主表、副表以及最后的散列子表,主表和副表都划分成更小的子表,子表间通过Cuckoo的思想进行数据的插入,其发生冲突需要丢弃的数据由散列子表存入。为了查询的高效性,其主表存放主要的数据,副表和散列子表在片内内存上创建布隆过滤器。若需要扩展输入数据集合,则增加至待扩展副表,其结构与主表与副表一致。通过此发明扩展性强,能同时提高片内空间与片外空间的利用率,优化插入与查询数据的效率,能保证输入数据集合的完整性的高性能散列表。
Description
技术领域
本发明属于数据存储以及检索领域,涉及一种基于片内片外内存的高性能散列表实现方法。
背景技术
散列表,是一种可以通过关键码值直接进行内存定位的数据结构。通过相应的哈希函数,可以对选取的散列表空间进行映射,从而达到高效的插入以及查询的目的。
现在用到散列表的场合通常有以下特征:1、大量的输入数据集合需要庞大内存的散列结构进行存储,在通过哈希函数映射的过程中要尽可能的分散数据和尽量少的发生数据碰撞。2、片内片外内存的同时应用以确保数据插入和查询的高效性,同时要保证节省片内片外内存的开销。3、通过对内存的访问次数作为查询和更新是否高效的衡量标准。4、需要散列表有高效的空间利用率,对所占用空间的容积率要尽可能大。5、可以动态的调整散列表的容量大小以灵活应对不断变化的输入数据集合。
目前针对散列表已有大量的研究,但是尚未有方法能同时解决以上5个问题。传统的开放寻址的方法可以在发生冲突后寻找新的空位进行插入,数据量过大时插入和查询的代价较高,同时要求散列表的空间要足够大,也有插入失败的风险。
开散列表方法可以使用链表的方法解决数据经映射后的冲突问题,但是需要大量的指针,指针所占用的地址空间也会对内存空间造成浪费。
Cuckoo散列表通过两个独立的散列函数对输入数据集合的每个数据选择两个不同的位置,当插入数据产生冲突时则移动已占用为止的元素重新散列直到找到对应的为止,但是这个方法可能造成移动的元素过多甚至发生死循环的可能,有插入失败的风险。
除以上方法,还有利用片内内存的高速性先对片外的散列表数据进行定位,进一步查询散列表的系列方法,但无法同时解决存在的5个问题。
发明内容
有鉴于此,本发明的目的在于提供一种基于片内片外内存的高性能散列表实现方法。
为达到上述目的,本发明提供如下技术方案:
一种基于片内片外内存的高性能散列表实现方法,该方法包含以下步骤:
S1、在片外内存上建立主表hashm、副表hashd以及散列子表hashs;
S2、在片外内存上的主表hashm上执行插入操作;
S3、将片外内存上的主表hashm通过相应的hash函数把键码key值映射到片外内存上的主表中子表的不同位置;
S4、设片外内存上主表hashs的容积率达到设定的范围,则将剩余的元素插入到相应的子表中去,根据副表hashd的独立hash函数个数,得到容积率上限,为副表hashd设置相应的容积率范围;在插入键码key值前,先在片内内存上建立副表hashd元素的布隆过滤器,将相应的key值通过独立的hash函数映射到相应的区间,在副表中插入数据,插入过程与步骤S3上主表一致;
S5、在片外内存上的散列子表hashs的每个位置预留一个指针;
S6、对输入数据进行查询,先查询主表hashm中是否存在此数据,设存在则返回;设失败,则查询副表hashd与散列子表hashs的布隆过滤器;设定位到相应的表,再去进一步查询;
S7、检查输入数据集合是否有更新,首先查询主表hashm与副表hashd的容积率是否已满,设未满,则将更新后的输入数据集插入进主表hashm或副表hashd;设已满,则在片外内存动态开辟新的空间作为副表hashd的副表。
可选地,步骤S1具体为:
主表hashm存储主要的数据,由等长的子表构成,子表的个数与主表规划的独立hash函数个数保持一致;
副表hashd的结构与主表一致;
散列子表hashs的每个位置都有一个指针,用于接收主表与副表数据发生冲突后要丢弃的数据,并且子表间通过Cuckoo的思想进行数据的插入。
可选地,步骤S2具体为:在获得数据集合的键码key值后,片外内存上的主表hashm先执行插入操作,并且在片内不为主表建立布隆过滤器,并且根据片外内存上的主表中独立的hash函数个数,得到容积率上限,并为主表设置相应的容积率范围。
可选地,步骤S3具体为:
设位置不是全满状态,则随机找一个空位加入;设子表的位置全部被占用,先不踢出相应的元素,而是对冲突的位置使用广度优先搜索方法,从冲突的位置开始寻找一条完整的冲突元素踢出路径,找到路径中最短的一条,再把冲突路径的元素依次往后移动;设路径长度大于规定的冲突丢弃次数,则将该冲突元素丢弃到散列子表hashs中。
可选地,步骤S5具体为:设片外内存上的主表hashm与副表hashd有元素插入失败,则将插入失败的元素插入到散列子表hashs中,并且在插入数据前,为散列子表hashs在片内内存上建立一个布隆过滤器,将相应的键码key值映射到布隆过滤器的内存空间。
本发明的有益效果在于:该散列表结构可扩展性强,提高了片内空间与片外空间的利用率,优化了插入与查询数据的效率,可以保证输入数据集合的完整性,因此此散列表在数据存储领域有很好的应用前景。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
图1为散列表结构图;
图2为数据插入流程图;
图3为数据查询流程图;
图4为布隆过滤器示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
请参阅图1~图4,为一种一种基于片内片外内存的高性能散列表实现方法。
1、如图1散列表结构图所示,建立的散列表由主表hashm、副表hashd以及最后的散列子表hashs构成。主表hashm存储主要的数据,由等长的子表构成,子表的个数与主表规划的独立hash函数个数保持一致。副表hashd的结构与主表一致。散列子表hashs的每个位置都有一个指针,用于接收主表与副表数据发生冲突后要丢弃的数据。
2、如图2数据插入流程图所示,获得数据集合的key值后,由主表hashm先执行插入操作,在片内不为主表建立布隆过滤器。若主表设计容纳元素个数为n,容积率为%m,哈希函数个数为k1,则可以计算得出每个子表的长度为:100n/mk1,同时以主表中独立的hash函数个数,得到容积率上限,为主表设置相应的容积率范围。
3、如图2数据插入流程图所示,主表hashm通过相应的hash函数把key值映射到主表子表的不同位置,如果位置不是全满状态,则随机找一个空位加入。若子表的位置全部被占用,先不踢出相应的元素,而是对冲突的位置使用广度优先搜索算法,从冲突的位置开始寻找一条完整的冲突元素踢出路径,找到路径中最短的一条,再把冲突路径的元素依次往后移动。若路径长度大于规定的冲突丢弃次数,则将该冲突元素丢弃到散列子表hashs中。
4、如图2数据插入流程图与图4布隆过滤器示例图所示,当主表hashs的容积率达到设定的范围,则将剩余的元素插入到相应的子表中去。根据副表hashd的独立hash函数个数,得到容积率上限,为副表hashd设置相应的容积率范围。在插入key值前,先在片内内存上建立副表hashd元素的布隆过滤器,将相应的key值通过独立的hash函数映射到相应的区间。此操作结束后,在副表中插入数据,插入过程与主表一致。
5、如图2为数据插入流程图所示,散列子表hashs每个位置预留一个指针,当主表hashm与副表hashd有元素插入失败,将插入失败的元素则插入到散列子表hashs中,在插入数据前,为散列子表hashs建立一个布隆过滤器,将相应的key值映射到布隆过滤器的内存空间。
6、图3数据查询流程图查询过程,先查询主表hashm中是否存在此数据,若存在则返回,若失败,则查询副表hashd与散列子表hashs的布隆过滤器,若定位到相应的桶,再去进一步查询。
7、如图1散列表结构图所示,若输入数据集合有更新,查询主表hashm与副表hashd容积率是否已满,已满,则在片外内存动态开辟新的空间作为待扩展副表,其内部结构与副表hashd类似。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (5)
1.一种基于片内片外内存的高性能散列表实现方法,其特征在于:所述方法包含以下步骤:
S1、在片外内存上建立主表hashm、副表hashd以及散列子表hashs;
S2、在片外内存上的主表hashm上执行插入操作;
S3、将片外内存上的主表hashm通过相应的hash函数把键码key值映射到片外内存上的主表中子表的不同位置;
S4、设片外内存上主表hashs的容积率达到设定的范围,则将剩余的元素插入到相应的子表中去,根据副表hashd的独立hash函数个数,得到容积率上限,为副表hashd设置相应的容积率范围;在插入键码key值前,先在片内内存上建立副表hashd元素的布隆过滤器,将相应的key值通过独立的hash函数映射到相应的区间,在副表中插入数据,插入过程与步骤S3上主表一致;
S5、在片外内存上的散列子表hashs的每个位置预留一个指针;
S6、对输入数据进行查询,先查询主表hashm中是否存在此数据,设存在则返回;设失败,则查询副表hashd与散列子表hashs的布隆过滤器;设定位到相应的表,再去进一步查询;
S7、检查输入数据集合是否有更新,首先查询主表hashm与副表hashd的容积率是否已满,设未满,则将更新后的输入数据集插入进主表hashm或副表hashd;设已满,则在片外内存动态开辟新的空间作为副表hashd的副表。
2.根据权利要求1所述的一种基于片内片外内存的高性能散列表实现方法,其特征在于:所述步骤S1具体为:
所述主表hashm存储主要的数据,由等长的子表构成,子表的个数与主表规划的独立hash函数个数保持一致;
所述副表hashd的结构与主表一致;
所述散列子表hashs的每个位置都有一个指针,用于接收主表与副表数据发生冲突后要丢弃的数据,并且子表间通过Cuckoo的思想进行数据的插入。
3.根据权利要求1所述的一种基于片内片外内存的高性能散列表实现方法,其特征在于:所述步骤S2具体为:在获得数据集合的键码key值后,片外内存上的主表hashm先执行插入操作,并且在片内不为主表建立布隆过滤器,根据片外内存上的主表中独立的hash函数个数,得到容积率上限,并为主表设置相应的容积率范围。
4.根据权利要求1所述的一种基于片内片外内存的高性能散列表实现方法,其特征在于:所述步骤S3具体为:
设片外内存上的主表中子表的位置不是全满状态,则随机找一个空位加入;设子表的位置全部被占用,先不踢出相应的元素,而是对冲突的位置使用广度优先搜索方法,从冲突的位置开始寻找一条完整的冲突元素踢出路径,找到路径中最短的一条,再把冲突路径的元素依次往后移动;设路径长度大于规定的冲突丢弃次数,则将该冲突元素丢弃到散列子表hashs中。
5.根据权利要求1所述的一种基于片内片外内存的高性能散列表实现方法,其特征在于:所述步骤S5具体为:设片外内存上的主表hashm与副表hashd有元素插入失败,则将插入失败的元素插入到散列子表hashs中,并且在插入数据前,为散列子表hashs在片内内存上建立一个布隆过滤器,将相应的键码key值映射到布隆过滤器的内存空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011302177.9A CN112416933B (zh) | 2020-11-19 | 2020-11-19 | 一种基于片内片外内存的高性能散列表实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011302177.9A CN112416933B (zh) | 2020-11-19 | 2020-11-19 | 一种基于片内片外内存的高性能散列表实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112416933A true CN112416933A (zh) | 2021-02-26 |
CN112416933B CN112416933B (zh) | 2022-09-23 |
Family
ID=74774038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011302177.9A Active CN112416933B (zh) | 2020-11-19 | 2020-11-19 | 一种基于片内片外内存的高性能散列表实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112416933B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826107A (zh) * | 2010-04-02 | 2010-09-08 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN108287840A (zh) * | 2017-01-09 | 2018-07-17 | 北京大学 | 一种基于矩阵哈希的数据存储和查询方法 |
CN108647289A (zh) * | 2018-05-05 | 2018-10-12 | 中国人民解放军战略支援部队信息工程大学 | 基于布谷哈希和布隆过滤器的Hash建表方法 |
EP3678032A1 (en) * | 2019-01-07 | 2020-07-08 | QlikTech International AB | Computer implemented methods and systems for improved data retrieval |
-
2020
- 2020-11-19 CN CN202011302177.9A patent/CN112416933B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826107A (zh) * | 2010-04-02 | 2010-09-08 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN108287840A (zh) * | 2017-01-09 | 2018-07-17 | 北京大学 | 一种基于矩阵哈希的数据存储和查询方法 |
CN108647289A (zh) * | 2018-05-05 | 2018-10-12 | 中国人民解放军战略支援部队信息工程大学 | 基于布谷哈希和布隆过滤器的Hash建表方法 |
EP3678032A1 (en) * | 2019-01-07 | 2020-07-08 | QlikTech International AB | Computer implemented methods and systems for improved data retrieval |
Non-Patent Citations (1)
Title |
---|
蒋捷等: "DCuckoo:基于片内摘要的高性能散列表", 《计算机研究与发展》 * |
Also Published As
Publication number | Publication date |
---|---|
CN112416933B (zh) | 2022-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8856203B1 (en) | System and method for algorithmic TCAM packet classification | |
US7895211B2 (en) | Method and system for reinserting a chain in a hash table | |
CN105320775B (zh) | 数据的存取方法和装置 | |
US20070194957A1 (en) | Search apparatus and search management method for fixed-length data | |
US9871727B2 (en) | Routing lookup method and device and method for constructing B-tree structure | |
US6625612B1 (en) | Deterministic search algorithm | |
CN101458694A (zh) | 一种基于树形词库的中文分词方法 | |
WO2005101248A1 (en) | Binary search tree with hooked duplicates for memory allocation | |
AU2016230539B2 (en) | Retrieval device, retrieval method, program, and recording medium | |
WO2004036589A1 (en) | Virtual content addressable memory with high speed key insertion and deletion and pipelined key search | |
US20080133494A1 (en) | Method and apparatus for searching forwarding table | |
WO2015010508A1 (zh) | 一种基于一维线性空间实现Trie树的词典存储管理方法 | |
CN108572958A (zh) | 数据处理方法及装置 | |
CN109684325A (zh) | 一种高效的rdf数据存储查询系统 | |
CN115514707A (zh) | 一种报文匹配方法、装置、存储介质及电子装置 | |
CN110008289B (zh) | 一种关系数据库、电网模型数据存储及检索方法 | |
CN112416933B (zh) | 一种基于片内片外内存的高性能散列表实现方法 | |
CN100452732C (zh) | 路由查找方法及其系统 | |
CN116775695A (zh) | 一种基于索引的动态组合查询优化方法、装置和存储介质 | |
EP1107126A2 (en) | A fast, efficient, adaptive, hybrid tree | |
CN100476815C (zh) | 网页标识抓取方法 | |
CN112069088B (zh) | 一种地址映射管理方法及相关装置、设备 | |
CN112269784A (zh) | 一种基于硬件实现的哈希表结构以及插入、查询和删除方法 | |
CN111159175A (zh) | 基于索引的非完整数据库Skyline查询方法 | |
CN114338528B (zh) | 一种表项的查询方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |