CN102187642B - 在哈希表中添加、查找或删除键值的方法及装置 - Google Patents
在哈希表中添加、查找或删除键值的方法及装置 Download PDFInfo
- Publication number
- CN102187642B CN102187642B CN201180000266.0A CN201180000266A CN102187642B CN 102187642 B CN102187642 B CN 102187642B CN 201180000266 A CN201180000266 A CN 201180000266A CN 102187642 B CN102187642 B CN 102187642B
- Authority
- CN
- China
- Prior art keywords
- key assignments
- fingerprint
- hash
- key
- hash sublist
- 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.)
- Expired - Fee Related
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)
- Storage Device Security (AREA)
- Collating Specific Patterns (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种在哈希表中添加、查找或删除键值的方法及装置。其中,在哈希表中添加键值的方法包括:根据哈希函数计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;生成待添加键值对应于各个哈希子表的指纹,待添加键值对应于一个哈希子表的指纹包括:该哈希子表中待添加键值地址扩展、其它哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;判断没有冲突时,将待添加键值对应于所选取哈希子表的指纹存入所选取哈希子表中。本发明技术方案使每一个键值的指纹只可能与一个哈希子表中的一个指纹匹配,从而在查找键值时,最多只需要访问一次原始键值表,可以提高查找性能,简化查找流程。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种在哈希表中添加、查找或删除键值的方法及装置。
背景技术
哈希(hash)表由于具有较高的查找性能,在通信技术领域应用非常广泛。哈希表一般由一到多个哈希子表组成,哈希子表中的一个地址空间称为一个桶(bucket),每一个桶由多个分片(slot)组成,每一个分片中可以存储一个键值(key)。每个哈希子表对应一种哈希函数(hash function),将键值输入给哈希函数,输出的结果即是对应哈希子表中存储该键值的桶的地址。哈希表的利用率定义为:需要存储的键值的个数除以所有的哈希子表中分片的个数。如需要存储的键值的个数为8M(8388608)个,哈希表包括两个哈希子表,每一个哈希子表有4M个桶,每一个桶有3个分片,则该哈希表的利用率为8M/(4M*3*2)=1/3。
如果需要查找键值,首先将需要查找的键值输入给各个哈希子表对应的哈希函数,得到各个哈希子表中对应的桶的地址,然后将需要查找的键值和得到的各哈希子表的桶的各个分片中存储的键值比较,若有相同的键值,说明查找命中,否则,查找失败。如果需要添加一个新键值,需要根据各个哈希子表对应的哈希函数计算各个哈希子表中对应的桶的地址,检查各个哈希子表的对应桶中是否有空闲分片,若有则将新键值存储在该空闲分片中;但是,检查以后发现所有哈希子表对应的桶中的分片都已经占满,这时会产生溢出。
哈希表的溢出一般利用芯片内部的随机存储器(Random Access Memory,RAM)或者三态内容寻址存储器(Ternary Content Addressable Memory,TCAM)实现,要求哈希表的溢出足够少。为了保证哈希表的溢出足够少,哈希表的空间利用率会较低。同时,由于网络设备中应用的复杂化,比如下一代互联网协议(Internet Protocol Version 6,IPv6)的普及,哈希表需要处理的键值的长度越来越长。当键值较长时,如果在哈希表的桶中存储键值,由于空间利用率较低,需要很大的存储空间。并且,在查找过程中将查找的键值与桶中存储的键值比较时,需要读取多个较长的键值。
在改进的哈希表中,改为在桶的分片中存储键值的指纹(fingerprint)。指纹也由哈希函数产生:将键值输入给一种哈希函数,该哈希函数的输出就是指纹。指纹的长度远低于键值的长度,可以提高查找性能和空间利用率。采用指纹时,同时需要另外一个表,即原始键值表,其中存储与指纹对应的键值,这时哈希表也称为哈希索引表。哈希索引表的每一个分片上存储一个键值对应的指纹和一个索引(index),该索引是键值在原始键值表中的地址。
在采用指纹的哈希表中,指纹冲突是一个严重的问题。指纹冲突是指,一个键值对应的各个哈希子表中的桶中存储有不止一个和这个键值对应的指纹。其中,在不同的哈希子表中,产生指纹的函数和产生方式可能不同,这些互相冲突的指纹的值不一定相等。例如,键值1在子表1中对应于指纹1,在子表2中对应于指纹2,即便指纹1和指纹2不相等,但都对应于键值1,也是相冲突的。
在加入新的键值时,即便不和任一个哈希子表中已存储的指纹冲突,也可能产生查找某个键值时在两个哈希子表中都有指纹相对应即冲突的情况产生。例如:假设哈希表的子表1和子表2中的每一个桶都可以存放3个指纹,其中a0(x)表示键值x在子表1中的地址,Fp(x)表示键值x在子表1中的指纹。假设有7个键值,即x1、x2、x3、z1、z2、z3、y1需要加入哈希表,并在加入时遵循“和任一个子表中已存储的指纹冲突都放入冲突空间”的原则。假定在表1的a0(x1)处加入x1、x2、x3,a0(z1)处加入z1、z2、z3。假定y1和x1在子表1中对应的地址相同,但是现在子表1已满,只能将y1放入子表2。这样,就保证了x1,x2,x3和y1之间没有冲突,但是,却不能保证其它键值不和y1冲突,例如难以不能保证z2和y1不冲突。
在产生指纹冲突时,需要查找的键值就需要和所有冲突的指纹对应的索引指向的原始键值表中的键值比对,即需要多次访问原始键值表才能确认真正需要查找的键值。
发明内容
本发明实施例提供一种在哈希表中添加、查找或删除键值的方法及装置。
一种在哈希表中添加键值的方法,包括:
根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;
生成待添加键值对应于各个哈希子表的指纹,所述待添加键值对应于一个哈希子表的指纹包括:该哈希子表中所述待添加键值的地址扩展,其它哈希子表中与所述待添加键值对应的桶的地址,和其它哈希子表中所述待添加键值的地址扩展;
判断所述待添加键值对应于任一个哈希子表的指纹与该哈希子表中所述待添加键值对应的桶中已存放的指纹是否冲突,若没有冲突,选取一个哈希子表,将所述待添加键值的对应于所选取哈希子表的指纹存入所选取哈希子表中与所述待添加键值对应的桶的一个空闲分片中。
一种在哈希表中查找键值的方法,包括:
根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展;
生成待查找键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待查找键值的地址扩展,其它哈希子表中与所述待查找键值对应的桶的地址,和其它哈希子表中所述待查找键值的地址扩展;
将所述待查找键值对应于当前哈希子表的指纹与当前哈希子表中与所述待查找键值对应的桶中存放的指纹比较,判断是否有相同的指纹,若是,则返回查找命中消息,否则,继续在下一个哈希子表中查找所述待查找键值。
一种在哈希表中删除键值的方法,包括:
根据当前哈希子表对应的哈希函数,计算当前哈希子表中待删除键值对应的桶的地址和待删除键值的地址扩展;
生成待删除键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待删除键值对应的地址扩展,其它哈希子表中与所述待删除键值对应的桶的地址,和其它哈希子表中所述待删除键值的地址扩展;
将所述待删除键值对应于当前哈希子表的指纹与当前哈希子表中与所述待删除键值对应的桶的各个分片中存放的指纹比较,判断是否有相同的指纹,若是,则删除所述相同的指纹所在分片的内容,并返回删除成功消息,否则,继续在下一个哈希子表中查找并删除所述待删除键值。
一种在哈希表中添加键值的装置,包括:
地址单元,用于根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;
指纹单元,用于生成待添加键值对应于各个哈希子表的指纹,所述待添加键值对应于一个哈希子表的指纹包括:该哈希子表中所述待添加键值的地址扩展,其它哈希子表中与所述待添加键值对应的桶的地址,和其它哈希子表中所述待添加键值的地址扩展;
判断单元,用于将所述待添加键值对应于任一个哈希子表的指纹与该哈希子表中所述待添加键值对应的桶中已存放的指纹比较,判断是否有冲突;
添加单元,用于在所述判断单元判断若没有冲突时,选取一个哈希子表,将所述待添加键值的对应于所选取哈希子表的指纹存入所选取哈希子表中与所述待添加键值对应的桶的一个空闲分片中。
一种在哈希表中查找键值的装置,包括:
第二查找模块和处理模块,所述第二查找模块进一步包括地址单元和指纹单元以及判断单元;
所述地址单元,用于根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展;
所述指纹单元,用于生成待查找键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待查找键值的地址扩展,其它哈希子表中与所述待查找键值对应的桶的地址,和其它哈希子表中所述待查找键值的地址扩展;
所述判断单元,用于将所述待查找键值对应于当前哈希子表的指纹与当前哈希子表中与所述待查找键值对应的桶中存放的指纹比较,判断是否有相同的指纹;
所述处理模块,用于在所述第二查找模块的判断单元判断有相同的指纹时,返回查找命中消息。
一种在哈希表中删除键值的装置,包括:
第二查找模块和删除模块,所述第二查找模块进一步包括地址单元和指纹单元以及判断单元;
所述地址单元,用于根据当前哈希子表对应的哈希函数,计算当前哈希子表中待删除键值对应的桶的地址和待删除键值的地址扩展;
所述指纹单元,用于生成待删除键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待删除键值的地址扩展,其它哈希子表中与所述待删除键值对应的桶的地址,和其它哈希子表中所述待删除键值的地址扩展;
所述判断单元,用于将所述待删除键值对应于当前哈希子表的指纹与当前哈希子表中与所述待删除键值对应的桶的各个分片中存放的指纹比较,判断是否有相同的指纹;
所述删除模块,用于在所述第二查找模块的判断单元判断有相同的指纹时,删除所述相同的指纹所在分片的内容并返回删除成功消息。
本发明实施例采用根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展,进而生成待添加键值对应于各个哈希子表的指纹,待添加键值对应于一个哈希子表的指纹包括:该哈希子表中待添加键值的地址扩展、其它哈希子表中与待添加键值对应的桶的地址和其它哈希子表中待添加键值的地址扩展这三个部分,判断没有冲突时,选取一个哈希子表将待添加键值的指纹存入的技术方案,使得每一个键值的指纹只可能与一个哈希子表中的一个指纹匹配,从而在查找键值时,最多只需要访问一次原始键值表,相对于现有技术,查找性能得以提高,查找流程得以简化。
附图说明
图1是本发明实施例提供的在哈希表中添加键值的方法的流程图;
图2是本发明实施例提供的在哈希表中查找键值的方法的流程图;
图3是本发明实施例提供的在哈希表中删除键值的方法的流程图;
图4是本发明实施例生成指纹的示意图;
图5是本发明实施例提供的在哈希表中添加键值的装置的示意图;
图6是本发明实施例提供的在哈希表中查找键值的装置的示意图;
图7是本发明实施例提供的在哈希表中删除键值的装置的示意图。
具体实施方式
本发明实施例提供一种在哈希表中添加、查找或删除键值的方法及装置。以下结合附图分别进行详细说明。
请参考图1,本实施例提供一种在哈希表中添加键值的方法。
在描述本实施例方法之前,先对本实施例中哈希表的结构进行说明。本实施例的哈希表由以下几个部分构成:
至少两个哈希子表,用于存放于键值对应的指纹和索引,该索引是键值在原始键值表中的地址;
一个冲突处理空间,用于存放与哈希子表中已存储的键值存在冲突的键值;一个溢出处理空间,用于存放溢出的键值;需要说明的是,冲突处理空间和溢出处理空间可以合并为一个空间;
原始键值表,用于存放键值;
原始键值空闲链表,用于管理原始键值表中的空闲地址。
结合上述哈希表的结构,本实施例的在哈希表中添加键值的方法,包括:
101、根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展。
每个哈希子表对应有一个哈希函数,将键值作为该哈希函数的输入值,则输出值即为该哈希子表中键值对应的桶的地址。从而,只需要知道键值,即可通过哈希函数直接计算出相应的存储地址。
本实施例中,进一步提出地址扩展的概念。使每个哈希子表再对应另一种哈希函数,将键值作为该哈希函数的输入值,则输出值即为该哈希子表中键值的地址扩展。该地址扩展的作用在于生成键值的指纹。
一种实施方式中,一个哈希子表可以对应两个哈希函数,一个哈希函数用来计算键值对应的桶的地址,另一哈希函数则用来计算键值的地址扩展。在另一种实施方式中,一个哈希子表也可以仅对应一个哈希函数,以键值为输入值,将该哈希函数的输出值的一部分作为键值对应的桶的地址,另一部分则作为键值的地址扩展。
102、生成待添加键值对应于各个哈希子表的指纹,待添加键值对应于一个哈希子表的指纹包括:该哈希子表中待添加键值的地址扩展,所有其它哈希子表中与待添加键值对应的桶的地址,和所有其它哈希子表中待添加键值的地址扩展。
本实施例中定义一种指纹的结构,一个键值在一个哈希子表中的指纹由以下三个部分按照一定顺序组成:
a、该哈希子表中键值的地址扩展;
b、其它各个哈希子表中键值的地址扩展;
c、其它各个哈希子表中键值对应的桶的地址;
组成指纹的这三个部分的顺序可以随意,可以是a、b、c,也可以是b、a、c,或可以是c、b、a等任意的排序。但是,排序一旦确定,在所有哈希子表中该顺序应当保持一致。
在101中已得出各个哈希子表中待添加键值对应的桶的地址和待添加键值的地址扩展的基础上,即可以按照上述定义生成待添加键值对应于各个哈希子表的指纹。
下面结合图4所示的具体实例,对如何生成指纹的进一步说明。本实例中假定哈希表包括两个子表,即第一哈希子表和第二哈希子表。其中,第一哈希子表对应哈希函数(h0)和(h1),分别用于生成地址和地址扩展;第二哈希子表对应哈希函数(h3)和(h4),分别用于生成地址和地址扩展。将键值分别输入给上述四个哈希函数,可得出第一哈希子表中对应的地址a0和地址扩展f0,得出第二哈希子表中对应的地址a1和地址扩展f1。定义指纹的三个组成部分的顺序为a、b、c。则可以得出该键值在第一哈希子表中的指纹的指纹由f0、f1和a1顺序组成;在第二哈希子表中的的指纹由f1、f0和a0顺序组成。
103、判断待添加键值对应于任一个哈希子表的指纹与该哈希子表中待添加键值对应的桶中已存放的指纹是否冲突,若没有冲突,选取一个哈希子表,将待添加键值的对应于所选取哈希子表的指纹存入所选取哈希子表中与待添加键值对应的桶的一个空闲分片中。
在101和102中已得出了待添加键值对应于任一个哈希子表的地址和指纹的基础上,即可以添加该键值,具体可以包括:
103a、判断待添加键值对应于任一个哈希子表的指纹与该哈希子表中待添加键值对应的桶中已存放的指纹是否冲突。假设该哈希表包括第一哈希子表和第一哈希子表,每一个子表的每个桶有三个分片组成。则可以先判断第一哈希子表中与待添加键值对应的桶的三个分片中已存放的三个指纹(也可能有空闲分片,所存储的指纹不满三个)是否有相同的,如果有相同的,则说明存在冲突;再按照相同的方法判断第二哈希子表中是否存在冲突。若在任一个哈希子表中存在冲突,将待添加键值存入冲突处理空间。如果冲突处理空间已满,则可以将待添加键值存入溢出处理空间。然后返回添加成功消息。
103b、如果带添加键值在任一个哈希子表中都不存在冲突,则可以继续判断各个哈希子表中与待添加键值对应的桶是否有空闲分片。如果所有哈希子表中均没有空闲分片,则可以将待添加键值存入溢出处理空间,然后返回添加成功消息。如果溢出处理空间已满,则返回添加失败消息。
103c、如果待添加键值对应于所有哈希子表的指纹与相应的哈希子表中待添加键值对应的桶中已存放的指纹都没有冲突,且至少一个哈希子表中与待添加键值对应的桶中有空闲分片,则可以按照一定的策略,选取一个哈希子表的一个空闲分片,将待添加键值对应于该哈希子表的指纹存入该空闲分片中。然后,从原始键值空闲链表中申请一个空闲地址;将该空闲地址作为索引存入该空闲分片;将待添加键值存入原始键值表中该空闲地址表示的存储空间中。然后返回添加成功消息。
需要说明的是,在其它实施例中,也可以在发生冲突或者没有空闲分片时,直接返回失败添加消息,而不必将待添加键值存入冲突处理空间或溢出处理空间。
本实施例方法,采用上述定义的指纹结构,一个键值对应于任一个哈希子表的指纹都由上述的三个部分且按照一定顺序排列组成,增加了指纹长度,减少了指纹冲突,可以使用较少的存储空间实现哈希表,并使每一个键值的指纹只可能与一个哈希子表中的一个指纹匹配。在查找键值时,要么从冲突或溢出处理空间中查到键值,要么只能从一个哈希子表中查到匹配的指纹,从而,最多只需要访问一次原始键值表,就可以查到待查找的键值,相对于现有技术,查找性能得以提高,查找流程得以简化。
请参考图2,本实施例提供一种在哈希表中查找键值的方法,包括:
202a、根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展。
计算地址和地址扩展的方法参照上一实施例步骤101所述。
202b、生成待查找键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中待查找键值的地址扩展,所有其它哈希子表中与待查找键值对应的桶的地址,和所有其它哈希子表中待查找键值的地址扩展。
计算指纹的方法参照上一实施例步骤102所述。
202c、将待查找键值对应于当前哈希子表的指纹与当前哈希子表中与待查找键值对应的桶中存放的指纹比较,判断是否有相同的指纹,若是,则返回查找命中消息,否则,继续在下一个哈希子表中查找待查找键值。
假设该哈希表包括第一哈希子表和第二哈希子表,每一个子表的每个桶有三个分片组成。第一哈希子表为当前正在查找的哈希子表。则先将第一哈希子表中与待查找键值对应的桶的三个分片中已存放的三个指纹(也可能有空闲分片,所存储的指纹不满三个)是否有相同的,如果有相同的,则说明查找命中;再按照相同的方法在第二哈希子表中查找。若在所有哈希子表中均未查到待查找键值,返回查找失败消息。
另一个实施例中,在步骤202(将步骤202a-202c视为步骤202)之前还可以包括以下步骤:
201、将待查找键值与溢出处理空间及冲突处理空间中存储的键值比较,判断是否有相同的键值,若是,则返回查找命中消息。
本实施例中,先执行步骤201,若发现待查找键值与溢出处理空间及冲突处理空间中存储的键值没有相同的,才执行202,继续在哈希表的各个哈希子表中查找待查找键值。
溢出处理空间及冲突处理空间一般为芯片内部的存储空间,存储空间小,但是访问速度快。先在溢出处理空间及冲突处理空间中查找,可以提高查找速度。其中,冲突处理空间和溢出处理空间可以是合并的一个存储空间。
本实施例方法,通过采用上述定义的指纹结构,一个键值对应于任一个哈希子表的指纹都由上述的三个部分且按照一定顺序排列组成,每一个键值的指纹只可能与一个哈希子表中的一个指纹匹配,于是,在查找键值时,要么从冲突或溢出处理空间中查到键值,要么只能从一个哈希子表中查到匹配的指纹,从而,最多只需要访问一次原始键值表,就可以查到待查找的键值,相对于现有技术,查找性能得以提高,查找流程得以简化。
请参考图3,本实施例提供一种在哈希表中删除键值的方法,包括:
302a、根据当前哈希子表对应的哈希函数,计算当前哈希子表中待删除键值对应的桶的地址和待删除键值的地址扩展。
计算地址和地址扩展的方法参照上一实施例步骤101所述。
302b、生成待删除键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中待删除键值的地址扩展,所有其它哈希子表中与待删除键值对应的桶的地址,和所有其它哈希子表中待删除键值的地址扩展。
计算指纹的方法参照上一实施例步骤102所述。
302c、将待删除键值对应于当前哈希子表的指纹与当前哈希子表中与待删除键值对应的桶的各个分片中存放的指纹比较,判断是否有相同的指纹,若是,则删除所述相同的指纹所在分片的内容,并返回删除成功消息,否则,继续在下一个哈希子表中查找并删除待删除键值。
假设该哈希表包括第一哈希子表和第二哈希子表,每一个子表的每个桶有三个分片组成。第一哈希子表为当前正在查找的哈希子表。则先将第一哈希子表中与待查找键值对应的桶的三个分片中已存放的三个指纹(也可能有空闲分片,所存储的指纹不满三个)是否有相同的,如果有相同的,则说明查找命中,删除对应的指纹;否则再按照相同的方法在第二哈希子表中查找,如查找命中,删除对应的指纹。若在所有哈希子表中均未查到待查找键值,返回删除失败消息。
其中,302c中删除所述相同的指纹所在分片的内容进一步包括:获取所述相同的指纹所在分片中存储的索引;删除该索引指向的原始键值表的存储空间中存储的键值;删除所述相同的指纹所在分片中存储的指纹和索引。
另一个实施例中,在步骤302(将步骤302a-302c视为步骤302)之前还可以包括以下步骤:
301、将待删除键值与溢出处理空间及冲突处理空间中存放的键值比较,判断是否有相同的键值,若是,则删除所述相同的键值,返回删除成功消息。
本实施例中,先执行步骤301,若发现待删除键值与溢出处理空间及冲突处理空间中存储的键值没有相同的,才执行步骤302,继续在哈希表的各个哈希子表中查找并删除待删除键值。
溢出处理空间及冲突处理空间一般为芯片内部的存储空间,存储空间小,但是访问速度快。先在溢出处理空间及冲突处理空间中查找并删除待删除键值,可以提高速度。
本领域普通技术人员可以理解上述实施例各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机读取存储器、磁盘或光盘等。
请参考图5,本实施例提供一种在哈希表中添加键值的装置,包括:
地址单元501,用于根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;
指纹单元502,用于生成待添加键值对应于各个哈希子表的指纹,待添加键值对应于一个哈希子表的指纹包括:该哈希子表中待添加键值的地址扩展,其它哈希子表中与待添加键值对应的桶的地址,和其它哈希子表中待添加键值的地址扩展;
判断单元503,用于将待添加键值对应于任一个哈希子表的指纹与该哈希子表中待添加键值对应的桶中已存放的指纹比较,判断是否有冲突;
添加单元504,用于在判断单元503判断没有冲突时,选取一个哈希子表,将待添加键值的对应于所选取哈希子表的指纹存入所选取哈希子表中与待添加键值对应的桶的一个空闲分片中。
在一个实施例中,判断单元503,还用于判断各个哈希子表中与待添加键值对应的桶是否有空闲分片;添加单元504,具体用于在判断单元503判断若干哈希子表中对应的桶有空闲分片时,从中选取一个哈希子表,将待添加键值对应于所选取哈希子表的指纹存入所选取哈希子表中与待添加键值对应的桶的一个空闲分片中。
本实施例装置,采用上述定义的指纹结构,一个键值对应于任一个哈希子表的指纹都由上述的三个部分且按照一定顺序排列组成,增加了指纹长度,减少了指纹冲突,可以使用较少的存储空间实现哈希表,并使每一个键值的指纹只可能与一个哈希子表中的一个指纹匹配。在查找键值时,要么从冲突或溢出处理空间中查到键值,要么只能从一个哈希子表中查到匹配的指纹,从而,最多只需要访问一次原始键值表,就可以查到待查找的键值,相对于现有技术,查找性能得以提高,查找流程得以简化。
请参考图6,本实施例提供一种在哈希表中查找键值的装置,包括:第二查找模块602和处理模块603,第二查找模块602进一步包括:地址单元602a和指纹单元602b以及判断单元602c;
地址单元602a,用于根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展;
指纹单元602b,用于生成待查找键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中待查找键值的地址扩展,所有其它哈希子表中与待查找键值对应的桶的地址,和所有其它哈希子表中待查找键值的地址扩展;
判断单元602c,用于将待查找键值对应于当前哈希子表的指纹与当前哈希子表中与待查找键值对应的桶中存放的指纹比较,判断是否有相同的指纹;
处理模块603,用于在第二查找模块602的判断单元602c判断有相同的指纹时,返回查找命中消息。
另一个实施例中,本实施例的在哈希表中查找键值的装置还可以包括:
第一查找模块601,用于将待查找键值与溢出处理空间及冲突处理空间中存储的键值比较,判断是否有相同的键值。
处理模块603,还用于在第一查找模块601判断有相同的键值时,返回查找命中消息。
该实施例中,若第一查找模块601发现待查找键值与溢出处理空间及冲突处理空间中存储的键值没有相同的,第二查找模块602才开始在哈希表的各个哈希子表中查找待查找键值。
本实施例装置,通过采用上述定义的指纹结构,一个键值对应于任一个哈希子表的指纹都由上述的三个部分且按照一定顺序排列组成,每一个键值的指纹只可能与一个哈希子表中的一个指纹匹配,于是,在查找键值时,要么从冲突或溢出处理空间中查到键值,要么只能从一个哈希子表中查到匹配的指纹,从而,最多只需要访问一次原始键值表,就可以查到待查找的键值,相对于现有技术,查找性能得以提高,查找流程得以简化。
请参考图7,本实施例提供一种在哈希表中删除键值的装置,包括:第二查找模块702和删除模块703,第二查找模块702进一步包括:地址单元702a和指纹单元702b以及判断单元702c;
地址单元702a,用于根据当前哈希子表对应的哈希函数,计算当前哈希子表中待删除键值对应的桶的地址和待删除键值的地址扩展;
指纹单元702b,用于生成待删除键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中待删除键值的地址扩展,所有其它哈希子表中与待删除键值对应的桶的地址,和所有其它哈希子表中待删除键值的地址扩展;
判断单元702c,用于将待删除键值对应于当前哈希子表的指纹与当前哈希子表中与待删除键值对应的桶的各个分片中存放的指纹比较,判断是否有相同的指纹;
删除模块703,用于在第二查找模块702的判断单元702c判断有相同的指纹时,删除所述相同的指纹所在分片的内容并返回删除成功消息。
在一个实施例中,删除模块703进一步包括:
获取单元703a,用于获取所述相同的指纹所在分片中存储的索引;
第一删除单元703b,用于删除索引指向的原始键值表的存储空间中存储的键值;
第二删除单元703c,用于删除所述相同的指纹所在分片中存储的指纹和索引。
另一个实施例中,本实施例的在哈希表中删除键值的装置还可以包括:
第一查找模块701,用于将待删除键值与溢出处理空间及冲突处理空间中存放的键值比较,判断是否有相同的键值。
删除模块703,还用于在第一查找模块701判断有相同的键值时,删除所述相同的键值并返回删除成功消息。
该实施例中,若第一查找模块601发现待删除键值与溢出处理空间及冲突处理空间中存储的键值没有相同的,第二查找模块602才开始在哈希表的各个哈希子表中查找待删除键值。
以上对本发明实施例所提供的在哈希表中添加、查找或删除键值的方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。
Claims (8)
1.一种在哈希表中添加键值的方法,其特征在于,包括:
根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;
生成待添加键值对应于各个哈希子表的指纹,所述待添加键值对应于一个哈希子表的指纹包括:该哈希子表中所述待添加键值的地址扩展,其它哈希子表中与所述待添加键值对应的桶的地址,和其它哈希子表中所述待添加键值的地址扩展;
判断所述待添加键值对应于任一个哈希子表的指纹与该哈希子表中所述待添加键值对应的桶中已存放的指纹是否冲突,若没有冲突,选取一个哈希子表,将所述待添加键值的对应于所选取哈希子表的指纹存入所选取哈希子表中与所述待添加键值对应的桶的一个空闲分片中;以及,从原始键值空闲链表中申请一个空闲地址,将所述空闲地址作为索引存入所述空闲分片;将待添加键值存入原始键值表中所述空闲地址表示的存储空间中;
其中,所述选取一个哈希子表,将所述待添加键值的对应于所选取哈希子表的指纹存入所选取哈希子表中与所述待添加键值对应的桶的一个空闲分片中包括:
判断各个哈希子表中与所述待添加键值对应的桶是否有空闲分片;如果若干哈希子表中对应的桶有空闲分片,从中选取一个哈希子表,将所述待添加键值对应于所选取哈希子表的指纹存入所选取哈希子表中与所述待添加键值对应的桶的一个空闲分片中。
2.一种在哈希表中查找键值的方法,其特征在于,包括:
根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展;
生成待查找键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待查找键值的地址扩展,其它哈希子表中与所述待查找键值对应的桶的地址,和其它哈希子表中所述待查找键值的地址扩展;
将所述待查找键值对应于当前哈希子表的指纹与当前哈希子表中与所述待查找键值对应的桶中存放的指纹比较,判断是否有相同的指纹,若是,则返回查找命中消息,否则,继续在下一个哈希子表中查找所述待查找键值;
所述根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展之前还包括:
将待查找键值与溢出处理空间及冲突处理空间中存储的键值比较,判断是否有相同的键值,若是,则返回查找命中消息;其中,所述溢出处理空间及冲突处理空间为芯片内部的存储空间。
3.一种在哈希表中删除键值的方法,其特征在于,包括:
根据当前哈希子表对应的哈希函数,计算当前哈希子表中待删除键值对应的桶的地址和待删除键值的地址扩展;
生成待删除键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待删除键值对应的地址扩展,其它哈希子表中与所述待删除键值对应的桶的地址,和其它哈希子表中所述待删除键值的地址扩展;
将所述待删除键值对应于当前哈希子表的指纹与当前哈希子表中与所述待删除键值对应的桶的各个分片中存放的指纹比较,判断是否有相同的指纹,若是,则删除所述相同的指纹所在分片的内容,并返回删除成功消息,否则,继续在下一个哈希子表中查找并删除所述待删除键值;
所述根据当前哈希子表对应的哈希函数,计算当前哈希子表中所述待删除键值对应的桶的地址和待删除键值的地址扩展之前还包括:
将待删除键值与溢出处理空间及冲突处理空间中存放的键值比较,判断是否有相同的键值,若是,则删除所述相同的键值,返回删除成功消息;其中,所述溢出处理空间及冲突处理空间为芯片内部的存储空间。
4.根据权利要求3所述的方法,其特征在于,所述删除所述相同的指纹所在分片的内容包括:
获取所述相同的指纹所在分片中存储的索引;
删除该索引指向的原始键值表的存储空间中存储的键值;
删除所述相同的指纹所在分片中存储的指纹和索引。
5.一种在哈希表中添加键值的装置,其特征在于,包括:
地址单元,用于根据哈希表的各个哈希子表对应的哈希函数,计算各个哈希子表中与待添加键值对应的桶的地址和待添加键值的地址扩展;
指纹单元,用于生成待添加键值对应于各个哈希子表的指纹,所述待添加键值对应于一个哈希子表的指纹包括:该哈希子表中所述待添加键值的地址扩展,其它哈希子表中与所述待添加键值对应的桶的地址,和其它哈希子表中所述待添加键值的地址扩展;
判断单元,用于将所述待添加键值对应于任一个哈希子表的指纹与该哈希子表中所述待添加键值对应的桶中已存放的指纹比较,判断是否有冲突;若没有冲突,判断各个哈希子表中与所述待添加键值对应的桶是否有空闲分片;
添加单元,用于在所述判断单元判断若没有冲突且判断若干哈希子表中对应的桶有空闲分片时,从中选取一个哈希子表,将所述待添加键值对应于所选取哈希子表的指纹存入所选取哈希子表中与所述待添加键值对应的桶的一个空闲分片中;以及,从原始键值空闲链表中申请一个空闲地址,将所述空闲地址作为索引存入所述空闲分片;将待添加键值存入原始键值表中所述空闲地址表示的存储空间中。
6.一种在哈希表中查找键值的装置,其特征在于,包括:
第二查找模块和处理模块,所述第二查找模块进一步包括地址单元和指纹单元以及判断单元;
所述地址单元,用于根据当前哈希子表对应的哈希函数,计算当前哈希子表中待查找键值对应的桶的地址和待查找键值的地址扩展;
所述指纹单元,用于生成待查找键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待查找键值的地址扩展,其它哈希子表中与所述待查找键值对应的桶的地址,和其它哈希子表中所述待查找键值的地址扩展;
所述判断单元,用于将所述待查找键值对应于当前哈希子表的指纹与当前哈希子表中与所述待查找键值对应的桶中存放的指纹比较,判断是否有相同的指纹;
所述处理模块,用于在所述第二查找模块的判断单元判断有相同的指纹时,返回查找命中消息;
第一查找模块,用于将待查找键值与溢出处理空间及冲突处理空间中存储的键值比较,判断是否有相同的键值;其中,所述溢出处理空间及冲突处理空间为芯片内部的存储空间;
所述处理模块,还用于在所述第一查找模块判断有相同的键值时,返回查找命中消息。
7.一种在哈希表中删除键值的装置,其特征在于,包括:
第二查找模块和删除模块,所述第二查找模块进一步包括地址单元和指纹单元以及判断单元;
所述地址单元,用于根据当前哈希子表对应的哈希函数,计算当前哈希子表中待删除键值对应的桶的地址和待删除键值的地址扩展;
所述指纹单元,用于生成待删除键值对应于当前哈希子表的指纹,所述指纹包括:当前哈希子表中所述待删除键值的地址扩展,其它哈希子表中与所述待删除键值对应的桶的地址,和其它哈希子表中所述待删除键值的地址扩展;
所述判断单元,用于将所述待删除键值对应于当前哈希子表的指纹与当前哈希子表中与所述待删除键值对应的桶的各个分片中存放的指纹比较,判断是否有相同的指纹;
所述删除模块,用于在所述第二查找模块的判断单元判断有相同的指纹时,删除所述相同的指纹所在分片的内容并返回删除成功消息;
第一查找模块,用于将待删除键值与溢出处理空间及冲突处理空间中存放的键值比较,判断是否有相同的键值;其中,所述溢出处理空间及冲突处理空间为芯片内部的存储空间;
所述删除模块,还用于在所述第一查找模块判断有相同的键值时,删除所述相同的键值并返回删除成功消息。
8.根据权利要求7所述的装置,其特征在于,所述删除模块进一步包括:
获取单元,用于获取所述相同的指纹所在分片中存储的索引;
第一删除单元,用于删除所述索引指向的原始键值表的存储空间中存储的键值;
第二删除单元,用于删除所述相同的指纹所在分片中存储的指纹和索引。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/072785 WO2011100924A2 (zh) | 2011-04-14 | 2011-04-14 | 在哈希表中添加、查找或删除键值的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102187642A CN102187642A (zh) | 2011-09-14 |
CN102187642B true CN102187642B (zh) | 2015-01-07 |
Family
ID=44483394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180000266.0A Expired - Fee Related CN102187642B (zh) | 2011-04-14 | 2011-04-14 | 在哈希表中添加、查找或删除键值的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102187642B (zh) |
WO (1) | WO2011100924A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105589962A (zh) * | 2015-12-22 | 2016-05-18 | 北京奇虎科技有限公司 | 一种文本指纹信息的生成方法与装置 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104050180B (zh) * | 2013-03-13 | 2017-06-06 | 华为技术有限公司 | 文件指纹处理方法及装置 |
JP5954236B2 (ja) * | 2013-03-28 | 2016-07-20 | 日立金属株式会社 | ネットワーク中継装置 |
US9966152B2 (en) * | 2016-03-31 | 2018-05-08 | Samsung Electronics Co., Ltd. | Dedupe DRAM system algorithm architecture |
CN109582598B (zh) * | 2018-12-13 | 2023-05-02 | 武汉中元华电软件有限公司 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
CN110413617B (zh) * | 2019-07-30 | 2021-08-10 | 南京邮电大学 | 一种根据数据量的大小动态调节哈希表组的方法 |
CN113779320B (zh) * | 2021-08-18 | 2024-02-27 | 北京计算机技术及应用研究所 | 一种表项存储地址冲突的解决方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100470550C (zh) * | 2007-04-02 | 2009-03-18 | 华为技术有限公司 | 一种信息存储的方法、信息查找的方法及引擎装置 |
US8429143B2 (en) * | 2008-04-25 | 2013-04-23 | International Business Machines Corporation | Methods and systems for improving hash table performance |
US9280609B2 (en) * | 2009-09-08 | 2016-03-08 | Brocade Communications Systems, Inc. | Exact match lookup scheme |
CN101826107B (zh) * | 2010-04-02 | 2015-08-05 | 华为技术有限公司 | 哈希数据处理方法和装置 |
-
2011
- 2011-04-14 WO PCT/CN2011/072785 patent/WO2011100924A2/zh active Application Filing
- 2011-04-14 CN CN201180000266.0A patent/CN102187642B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105589962A (zh) * | 2015-12-22 | 2016-05-18 | 北京奇虎科技有限公司 | 一种文本指纹信息的生成方法与装置 |
CN105589962B (zh) * | 2015-12-22 | 2018-11-02 | 北京奇虎科技有限公司 | 一种文本指纹信息的生成方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102187642A (zh) | 2011-09-14 |
WO2011100924A3 (zh) | 2012-04-05 |
WO2011100924A2 (zh) | 2011-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102187642B (zh) | 在哈希表中添加、查找或删除键值的方法及装置 | |
CN108153757B (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 | |
CN102880628B (zh) | 哈希数据存储方法和装置 | |
CN113961514B (zh) | 数据查询方法及装置 | |
US20130159347A1 (en) | Automatic and dynamic design of cache groups | |
CN106326309A (zh) | 一种数据查询方法和装置 | |
CN108134739B (zh) | 一种基于索引特里树的路由查找方法及装置 | |
CN103226591B (zh) | 一种支持多关键字快速访问方法和装置 | |
CN112148738B (zh) | 哈希冲突处理方法及系统 | |
CN106599091A (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN109271394B (zh) | 一种基于id缓存的数据批量插入更新实现方法 | |
CN104598652B (zh) | 一种数据库查询方法及装置 | |
US20200134265A1 (en) | Ontology Management Method and M2M Platform | |
CN104166649B (zh) | 一种用于搜索引擎的缓存方法和设备 | |
CN110618883A (zh) | 一种用于共享内存链表的方法、装置、设备及存储介质 | |
CN111259062B (zh) | 一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置 | |
CN101136765A (zh) | 一种快速访问信息模型的方法 | |
CN111090653A (zh) | 一种数据缓存方法、装置及相关产品 | |
WO2023030461A1 (zh) | 一种分布式数据库检测方法及装置 | |
CN112148739B (zh) | 独立于加密数据库的密文索引方法及系统 | |
CN115510161A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN106293530B (zh) | 一种数据写入方法和装置 | |
CN115114289A (zh) | 一种数据查询方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150107 Termination date: 20190414 |