CN109582598A - 一种基于外部存储实现高效查找哈希表的预处理方法 - Google Patents
一种基于外部存储实现高效查找哈希表的预处理方法 Download PDFInfo
- Publication number
- CN109582598A CN109582598A CN201811526840.6A CN201811526840A CN109582598A CN 109582598 A CN109582598 A CN 109582598A CN 201811526840 A CN201811526840 A CN 201811526840A CN 109582598 A CN109582598 A CN 109582598A
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- hash
- address
- collision
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0864—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于外部存储实现高效查找哈希表的预处理方法,哈希表采用两级缓存:一级缓存放在CPU内部存储哈希表头部数据;二级缓存放在外部存储器中存储完整哈希表;建表地址维护模块将哈希值相同数据存放在同一片缓存空间内,每一片缓存空间大小根据应用场景来配,同时并统计每一片缓存空间已用大小,将这个信息输出给查表地址维护模块,方便后者进行查表长度请求;查表地址维护模块收到查表请求后,根据建表地址维护模块发来的冲突表长度信息决定是从一级缓存还是二级缓存读取数据,当冲突表长度小于一级缓存的深度时,从一级缓存内读取数据,否则从二级缓存读取数据。本发明数据存储结构大大简化,不需要链表指针的维护,操作简单不易出错。
Description
技术领域:
本发明涉及一种基于外部存储实现高效查找哈希表的预处理方法,应用于所有使用哈希表进行数据存储、查找的领域。
背景技术:
传统哈希表最大的缺点是:它是基于数组的,数组被创建后难于扩展,程序必须要知道表中将要存储多少数据,如果缓存开辟得太小,则很容易被高冲突率数据填满,需要定期地把数据转移到更大的哈希表中,这是个费时的过程;如果缓存开辟得太大,远远大于最后实际存储的记录个数,则会浪费大量的内存空间,这是一个矛盾的存在。同时当过多的冲突发生在同一位置时,传统哈希表需要逐级访问这个位置的元素,直到找出符合需要的那个元素,所需要的时间非常长。
发明内容:
本发明为了解决上述问题,提出一种基于外部存储实现高效查找哈希表的预处理方法,为每一组哈希值相同的数据分配一块足够大的存储空间,存入外部存储器中,这样既不用担心缓存太小导致性能下降的问题,又不会浪费CPU的内存空间;而且本发明在访问同一位置的元素时,可以预先将该组哈希值相同的数据全部读取出来,同时在CPU中可以开辟一块缓存,将部分头部哈希表数据存在其中,这样查找时间就会大大缩短,解决了传统哈希表在处理高冲突率时效率不高的问题。
本发明采用的技术方案为:
一种基于外部存储实现高效查找哈希表的预处理方法,其特征在于:哈希表采用两级缓存的存储结构,其中一级缓存放在CPU内部,用于存储哈希表的头部数据,该片缓存大小有限,但访问速度极快,用于快速查找低冲突率的数据;二级缓存放在外部存储器中,用于存储完整的哈希表,该片缓存大小足够存下整个冲突表,查表时可一次性将整个冲突表完整读出,不占用查找时间;并按以下步骤进行:
步骤一,建表地址维护模块负责将哈希值相同的数据存放在同一片缓存空间内,每一片缓存空间的大小根据应用场景来配,同时并统计每一片缓存空间的已用大小,即每一个冲突表的长度,将这个信息输出给查表地址维护模块,方便后者进行查表长度请求;
步骤二,查表地址维护模块收到查表请求后,根据建表地址维护模块发来的冲突表长度信息决定是从一级缓存还是二级缓存读取数据,当冲突表长度小于一级缓存的深度时,从一级缓存内读取数据,否则从二级缓存读取数据。
本发明的具体步骤为:
一、建表过程,以一个哈希地址的建表为例:
(1)输入当前数据单元的哈希值即哈希地址;
(2)读取对应哈希值为地址的存储空间,记录下其已经存储数据的最后一个地址,该地址即为需存入冲突表的地址;同时统计该存储空间已经存入冲突表的长度,并将此长度输出给查表地址维护模块;
(3)将当前数据单元的存储地址和特征值组成冲突表的写请求信号,控制缓存写操作;
二、查表过程,以一个哈希地址的查表为例:
(1)输入待查找数据单元的哈希值即哈希地址;
(2)查表地址维护模块找出该哈希值对应的存储基地址;
(3)获取该哈希值冲突表的长度;
(4)如果冲突表长度小于一级缓存深度,则向一级缓存发起读命令,否则向二级缓存发起读命令;
(5)读返回所有冲突表的数据,根据冲突表特征值找出查找结果。
本发明的数据存储结构大大简化,不需要链表指针的维护,操作简单不易出错。
实施本发明的优势:1.采用外部存储模块存储哈希表,节约内存资源;2.采用预处理方式查找哈希表,提高查表速度。
附图说明:
图1为本发明的哈希表采用两级缓存的存储结构示意图。
图2为传统的哈希表采用链地址法存储示意图。
图3为本发明的哈希表采用分块顺序地址法的一级缓存存储示意图。
图4为本发明的哈希表采用分块顺序地址法的二级缓存存储示意图。
图5为本发明一个哈希地址的建表过程示意图。
图6为本发明一个哈希地址的查表过程示意图。
具体实施方式:
结合附图对本发明作进一步描述。
如图1所示,一种基于外部存储实现高效查找哈希表的预处理方法,其特征在于:哈希表采用两级缓存的存储结构,其中一级缓存放在CPU内部,用于存储哈希表的头部数据,该片缓存大小有限,但访问速度极快,用于快速查找低冲突率的数据;二级缓存放在外部存储器中,用于存储完整的哈希表,该片缓存大小足够存下整个冲突表,查表时可一次性将整个冲突表完整读出,不占用查找时间;并按以下步骤进行:
步骤一,建表地址维护模块负责将哈希值相同的数据存放在同一片缓存空间内,每一片缓存空间的大小根据应用场景来配,同时并统计每一片缓存空间的已用大小,即每一个冲突表的长度,将这个信息输出给查表地址维护模块,方便后者进行查表长度请求;
步骤二,查表地址维护模块收到查表请求后,根据建表地址维护模块发来的冲突表长度信息决定是从一级缓存还是二级缓存读取数据,当冲突表长度小于一级缓存的深度时,从一级缓存内读取数据,否则从二级缓存读取数据。
传统的哈希表采用链地址法存储,即所有哈希地址相同的数据都被映射到同一个链表中,哈希地址不相同的数据映射到不同的链表中。数据在缓存中的存储格式为如图2所示。
本发明采用分块顺序地址法存储,即所有哈希地址相同的数据顺序存储到同一片存储空间中,哈希地址不相同的数据存储到不同的数据块中,数据在缓冲中的存储格式为如图3、图4所示。
由图3、图4可知,本发明的数据存储结构大大简化,不需要链表指针的维护,操作简单不易出错。
本发明具体步骤如图5、图6所示,
一、建表过程(以一个哈希地址的建表为例),如图5所示:
(1)输入当前数据单元的哈希值即哈希地址;
(2)读取对应哈希值为地址的存储空间,记录下其已经存储数据的最后一个地址,该地址即为需存入冲突表的地址;同时统计该存储空间已经存入冲突表的长度,并将此长度输出给查表地址维护模块;
(3)将当前数据单元的存储地址和特征值组成冲突表的写请求信号,控制缓存写操作;
二、查表过程(以一个哈希地址的查表为例),如图6所示:
(1)输入待查找数据单元的哈希值即哈希地址;
(2)查表地址维护模块找出该哈希值对应的存储基地址;
(3)获取该哈希值冲突表的长度;
(4)如果冲突表长度小于一级缓存深度,则向一级缓存发起读命令,否则向二级缓存发起读命令;
(5)读返回所有冲突表的数据,根据冲突表特征值找出查找结果。
Claims (2)
1.一种基于外部存储实现高效查找哈希表的预处理方法,其特征在于:哈希表采用两级缓存的存储结构,其中一级缓存放在CPU内部,用于存储哈希表的头部数据;二级缓存放在外部存储器中,用于存储完整的哈希表;并按以下步骤进行:
步骤一,建表地址维护模块负责将哈希值相同的数据存放在同一片缓存空间内,每一片缓存空间的大小根据应用场景来配,同时并统计每一片缓存空间的已用大小,即每一个冲突表的长度,将这个信息输出给查表地址维护模块,方便后者进行查表长度请求;
步骤二,查表地址维护模块收到查表请求后,根据建表地址维护模块发来的冲突表长度信息决定是从一级缓存还是二级缓存读取数据,当冲突表长度小于一级缓存的深度时,从一级缓存内读取数据,否则从二级缓存读取数据。
2.根据权利要求1所述的基于外部存储实现高效查找哈希表的预处理方法,其特征在于具体步骤为:
一、建表过程,以一个哈希地址的建表为例:
(1)输入当前数据单元的哈希值即哈希地址;
(2)读取对应哈希值为地址的存储空间,记录下其已经存储数据的最后一个地址,该地址即为需存入冲突表的地址;同时统计该存储空间已经存入冲突表的长度,并将此长度输出给查表地址维护模块;
(3)将当前数据单元的存储地址和特征值组成冲突表的写请求信号,控制缓存写操作;
二、查表过程,以一个哈希地址的查表为例:
(1)输入待查找数据单元的哈希值即哈希地址;
(2)查表地址维护模块找出该哈希值对应的存储基地址;
(3)获取该哈希值冲突表的长度;
(4)如果冲突表长度小于一级缓存深度,则向一级缓存发起读命令,否则向二级缓存发起读命令;
(5)读返回所有冲突表的数据,根据冲突表特征值找出查找结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811526840.6A CN109582598B (zh) | 2018-12-13 | 2018-12-13 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811526840.6A CN109582598B (zh) | 2018-12-13 | 2018-12-13 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109582598A true CN109582598A (zh) | 2019-04-05 |
CN109582598B CN109582598B (zh) | 2023-05-02 |
Family
ID=65928391
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811526840.6A Active CN109582598B (zh) | 2018-12-13 | 2018-12-13 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109582598B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124312A (zh) * | 2019-12-23 | 2020-05-08 | 第四范式(北京)技术有限公司 | 数据去重的方法及其装置 |
CN111309772A (zh) * | 2020-03-23 | 2020-06-19 | 优刻得科技股份有限公司 | 数据操作的管理方法及硬件处理模块 |
CN112181312A (zh) * | 2020-10-23 | 2021-01-05 | 北京安石科技有限公司 | 硬盘数据的快速读取方法及*** |
CN112269784A (zh) * | 2020-10-28 | 2021-01-26 | 中科驭数(北京)科技有限公司 | 一种基于硬件实现的哈希表结构以及***、查询和删除方法 |
CN113407462A (zh) * | 2021-06-16 | 2021-09-17 | 新华三信息安全技术有限公司 | 一种数据处理的方法、装置、电子设备及介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4972316A (en) * | 1987-03-30 | 1990-11-20 | International Business Machines Corporation | Method of handling disk sector errors in DASD cache |
US20080052488A1 (en) * | 2006-05-10 | 2008-02-28 | International Business Machines Corporation | Method for a Hash Table Lookup and Processor Cache |
CN101582082A (zh) * | 2009-06-16 | 2009-11-18 | 深圳市茁壮网络股份有限公司 | 一种哈希表动态适应数据的方法及装置 |
CN101827137A (zh) * | 2010-04-13 | 2010-09-08 | 西安邮电学院 | 一种基于哈希表和扩展存储器的高性能IPv6地址查找方法 |
CN102123090A (zh) * | 2011-02-23 | 2011-07-13 | 中国人民解放军国防科学技术大学 | 基于两级表存储和查询传输层信息的ip分片处理方法 |
CN102187642A (zh) * | 2011-04-14 | 2011-09-14 | 华为技术有限公司 | 在哈希表中添加、查找或删除键值的方法及装置 |
US20120198121A1 (en) * | 2011-01-28 | 2012-08-02 | International Business Machines Corporation | Method and apparatus for minimizing cache conflict misses |
CN103117931A (zh) * | 2013-02-21 | 2013-05-22 | 烽火通信科技股份有限公司 | 基于哈希表和tcam表的mac地址硬件学习方法及*** |
CN103678172A (zh) * | 2013-12-25 | 2014-03-26 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
CN106326475A (zh) * | 2016-08-31 | 2017-01-11 | 中国科学院信息工程研究所 | 一种高效的静态哈希表实现方法及*** |
CN107169097A (zh) * | 2017-05-15 | 2017-09-15 | 郑州云海信息技术有限公司 | 一种Spark Broadcasthashjoin操作的改进方法 |
CN107330047A (zh) * | 2017-06-28 | 2017-11-07 | 华信塞姆(成都)科技有限公司 | 一种基于完美哈希算法的fpga训练及查询电路实现方法 |
US20190243778A1 (en) * | 2016-11-29 | 2019-08-08 | Arm Limited | Memory address translation |
-
2018
- 2018-12-13 CN CN201811526840.6A patent/CN109582598B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4972316A (en) * | 1987-03-30 | 1990-11-20 | International Business Machines Corporation | Method of handling disk sector errors in DASD cache |
US20080052488A1 (en) * | 2006-05-10 | 2008-02-28 | International Business Machines Corporation | Method for a Hash Table Lookup and Processor Cache |
CN101582082A (zh) * | 2009-06-16 | 2009-11-18 | 深圳市茁壮网络股份有限公司 | 一种哈希表动态适应数据的方法及装置 |
CN101827137A (zh) * | 2010-04-13 | 2010-09-08 | 西安邮电学院 | 一种基于哈希表和扩展存储器的高性能IPv6地址查找方法 |
US20120198121A1 (en) * | 2011-01-28 | 2012-08-02 | International Business Machines Corporation | Method and apparatus for minimizing cache conflict misses |
CN102123090A (zh) * | 2011-02-23 | 2011-07-13 | 中国人民解放军国防科学技术大学 | 基于两级表存储和查询传输层信息的ip分片处理方法 |
CN102187642A (zh) * | 2011-04-14 | 2011-09-14 | 华为技术有限公司 | 在哈希表中添加、查找或删除键值的方法及装置 |
CN103117931A (zh) * | 2013-02-21 | 2013-05-22 | 烽火通信科技股份有限公司 | 基于哈希表和tcam表的mac地址硬件学习方法及*** |
CN103678172A (zh) * | 2013-12-25 | 2014-03-26 | Tcl集团股份有限公司 | 一种本地数据缓存管理方法及装置 |
CN106326475A (zh) * | 2016-08-31 | 2017-01-11 | 中国科学院信息工程研究所 | 一种高效的静态哈希表实现方法及*** |
US20190243778A1 (en) * | 2016-11-29 | 2019-08-08 | Arm Limited | Memory address translation |
CN107169097A (zh) * | 2017-05-15 | 2017-09-15 | 郑州云海信息技术有限公司 | 一种Spark Broadcasthashjoin操作的改进方法 |
CN107330047A (zh) * | 2017-06-28 | 2017-11-07 | 华信塞姆(成都)科技有限公司 | 一种基于完美哈希算法的fpga训练及查询电路实现方法 |
Non-Patent Citations (1)
Title |
---|
马如林等: "一种哈希表快速查找的改进方法", 《计算机工程与科学》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124312A (zh) * | 2019-12-23 | 2020-05-08 | 第四范式(北京)技术有限公司 | 数据去重的方法及其装置 |
CN111124312B (zh) * | 2019-12-23 | 2023-10-31 | 第四范式(北京)技术有限公司 | 数据去重的方法及其装置 |
CN111309772A (zh) * | 2020-03-23 | 2020-06-19 | 优刻得科技股份有限公司 | 数据操作的管理方法及硬件处理模块 |
CN112181312A (zh) * | 2020-10-23 | 2021-01-05 | 北京安石科技有限公司 | 硬盘数据的快速读取方法及*** |
CN112269784A (zh) * | 2020-10-28 | 2021-01-26 | 中科驭数(北京)科技有限公司 | 一种基于硬件实现的哈希表结构以及***、查询和删除方法 |
CN113407462A (zh) * | 2021-06-16 | 2021-09-17 | 新华三信息安全技术有限公司 | 一种数据处理的方法、装置、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109582598B (zh) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109582598A (zh) | 一种基于外部存储实现高效查找哈希表的预处理方法 | |
US9983821B2 (en) | Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application | |
TWI683217B (zh) | 使用去重複dram系統演算法架構的去重複記憶體模組及其方法 | |
US9262500B2 (en) | Memory system including key-value store | |
KR102584018B1 (ko) | 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법 | |
CN102541927B (zh) | 一种实现数据缓存的方法和装置 | |
US10496523B2 (en) | Sequential access storage and data de-duplication | |
CN109085997A (zh) | 用于非易失性存储器的存储器高效持续键值储存 | |
US20160294693A1 (en) | Routing Lookup Method and Device, and Construction Method for B-tree Structure | |
US9507705B2 (en) | Write cache sorting | |
EP2735978A1 (en) | Storage system and management method used for metadata of cluster file system | |
KR20130005305A (ko) | 휘발성 및 비휘발성 메모리를 갖는 하이브리드 고체 메모리 시스템 | |
CN113821171B (zh) | 一种基于哈希表与lsm树的键值存储方法 | |
WO2013152678A1 (zh) | 元数据查询方法和装置 | |
CN108153682B (zh) | 一种利用闪存内部并行性进行闪存转换层地址映射的方法 | |
TW201629774A (zh) | 使用資料壓縮的快取技術 | |
TW201942751A (zh) | 資料儲存系統之控制單元以及邏輯至物理映射表更新方法 | |
TWI761419B (zh) | 最大化可去重複記憶體的方法、記憶體系統和產品 | |
CN103229164A (zh) | 数据访问方法和装置 | |
KR101226600B1 (ko) | 메모리 시스템 및 그의 메모리 맵핑 방법 | |
US8601200B2 (en) | Controller for solid state disk which controls access to memory bank | |
CN108427648B (zh) | 存储***页内脏数据索引方法和装置 | |
CN111813709B (zh) | 一种基于fpga存算一体架构的高速并行存储方法 | |
CN102629914A (zh) | 一种以太网数据包缓存方法和装置 | |
KR101876574B1 (ko) | 데이터 입출력 컨트롤러 및 이를 포함하는 시스템 |
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 |