用于管理哈希表的方法、设备和计算机程序产品与流程

文档序号:18409699发布日期:2019-08-10 00:52阅读:171来源:国知局
用于管理哈希表的方法、设备和计算机程序产品与流程

本公开的实施例涉及数据存储领域,并且更具体地,涉及用于管理哈希表的方法、设备及计算机程序产品。



背景技术:

随着信息时代的来临,需要存储的数据指数级增长。消除冗余技术也越来越被广泛地利用,以减少存储开销并提高存储效率。消除冗余技术是指通过判断需要插入的数据已经被存储于存储装置中,而不再插入新的冗余数据。

目前,通常在存储器中管理哈希表,以使得能够快速地判断数据是否冗余,从而避免数据被重复写入。然而当后端存储器的容量很大时,哈希表的规模将受限于存储器的容量。因而,如何有效地管理哈希表将成为一个关注焦点。



技术实现要素:

有鉴于此,本公开的实施例提供了一种用于管理哈希表的方案。

根据本公开的第一方面,提出了一种用于管理哈希表的方法。该方法包括:响应于接收到写入请求,确定与该写入请求相关联的第一哈希值是否存储于哈希表集合中,该哈希表集合包括至少第一哈希表和第二哈希表,该第一哈希表为第一存储设备中当前有效的哈希表,该第二哈希表存储于第二存储设备中,该第一存储设备的访问速度快于该第二存储设备;响应于确定该第一哈希值未存储于该哈希表集合中并且哈希该第一哈希表已满,将该第一存储设备中预分配的第三哈希表作为该第一存储设备中当前有效的哈希表;向该第三哈希表中写入第一条目,其包括该第一哈希值;以及将该第一哈希表中的哈希值与该第二哈希表中的哈希值进行合并以便存储到该第二存储设备中。

根据本公开的第二方面,提出了一种用于管理哈希表的设备。该设备包括:至少一个处理单元;至少一个存储器,该至少一个存储器被耦合到该至少一个处理单元并且存储用于由该至少一个处理单元执行的指令,该指令当由该至少一个处理单元执行时,使得该设备执行动作,该动作包括:响应于接收到写入请求,确定与该写入请求相关联的第一哈希值是否存储于哈希表集合中,该哈希表集合包括至少第一哈希表和第二哈希表,该第一哈希表为第一存储设备中当前有效的哈希表,该第二哈希表存储于第二存储设备中,该第一存储设备的访问速度快于该第二存储设备;响应于确定该第一哈希值未存储于该哈希表集合中并且哈希该第一哈希表已满,将该第一存储设备中预分配的第三哈希表作为该第一存储设备中当前有效的哈希表;向该第三哈希表中写入第一条目,其包括该第一哈希值;以及将该第一哈希表中的哈希值与该第二哈希表中的哈希值进行合并以便存储到该第二存储设备中。

在本公开的第三方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在计算机可读介质上并且包括机器可执行指令,该机器可执行指令在被执行时使机器执行根据本公开的第一方面所描述的方法的任意步骤。

附图说明

通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。

图1示出了根据本公开的实施例的哈希表存储架构的示意图;

图2示出了根据本公开的实施例的用于管理哈希表的方法的流程图;

图3示出了根据本公开实施例的确定哈希值是否存储于哈希表集合中的方法的流程图;

图4示出了根据本公开的实施例的另一管理哈希表的方法的流程图;

图5示出了根据本公开实施例的删除哈希值的方法的流程图;以及

图6示出了可以用来实施本公开内容的实施例的示例设备的示意性框图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

如上文所述,传统的哈希表管理方案在存储器中管理哈希表,然而随着主存储设备的容量急剧增大时,用于该主存储设备的哈希表的大小将难以被保持在存储器中。例如,对于200tb的数据,将需要1tb左右的空间来存储所有数据的哈希条目,这对存储器而言是难以接受的数据规模。

为了至少部分地解决上述问题以及其他潜在问题,本公开的实施例提供了一种用于管理哈希表的方案。根据本公开的各种示例实施例,构建了一种二级哈希表存储结构,其中第一级哈希表可以被保持于快速存储设备(例如,存储器)中,第二级哈希表可以被保持于次快速存储设备(例如,固态硬盘ssd)中,这样能够解决存储器中空间有限的缺陷,而利用ssd中存储空间大,访问速度较快的优点。此外,仅在第一级哈希表已满时,才将第一哈希表中的值合并到第二级哈希表中,基于这样的方式,传统技术中针对第二存储设备的随机写入操作将被转换为连续的写入操作,从而提高第二存储设备的使用寿命。

下面将参考图1-图5详细描述根据本公开的哈希表管理的方法。图1示出了根据本公开的实施例的哈希表存储架构100的示意图。

如图1所示,存储架构100包括第一存储设备120和第二存储设备160。在一些实施例中,第一存储设备120的访问速度快于第二存储设备160的访问速度。在一些实施例中,例如,第一存储设备120可以为随机存取存储器,第二存储设备160可以为ssd。

在一些实施例中,在第一存储设备120中,设置有一个或多个桶(bucket)122、124、126和128,使得能够根据哈希值的特定位数将每一个i/o相关的哈希值的操作分配到不同桶中进行,从而实现多个哈希值的并发操作,提高哈希表管理的并行度。

在一些实施例中,在第一存储设备120中,设置有至少一个哈希表130,其具有多个条目,其中每个条目包括与i/o请求相关联的哈希值。在一些实施例中,在第一存储设备120中,还设置有另一个哈希表132,其与哈希表130配合工作,在哈希表130已满时,哈希值将被写入到哈希表132中,而哈希表130将被标记为仅读。类似地,当哈希表132已满时,哈希表130可以被设置为第一存储设备120中当前有效的哈希表以存储i/o请求相关的哈希值。

在一些实施例中,在第二存储设备160,设置有至少一个哈希表162,其用于实现将第一存储设备120中已满的哈希表130中的条目转移到第二存储设备160中。在一些实施例中,在第二存储设备160中,还设置有哈希表164,其用于在哈希表162已满时,将哈希表130和哈希表162中的条目转移到哈希表164中。

在一些实施例中,在第一存储设备120中,还设置有与第二存储设备160中的哈希表162和164相关联的索引项134和136,以用于快速实现第二存储设备160中的哈希表162和164中的哈希值的快速查找。在一些实施例中,索引项134可以包括头部138、布隆过滤器(bloomfilter)140和页面索引142,其中头部138存储哈希表162的校验和、容量、页面数目、条目数目等;如下文将详细描述的,布隆过滤器140用于快速确定某个哈希值是否存储于哈希表162中;页面索引142存储每个哈希表中的多个页的起始地址和偏移量。

以下将结合图2描述根据本公开实施例的管理哈希表的方法200的流程图。在框202中,接收写入请求。在框204中,确定与写入请求相关联的哈希值(为了方便描述,下文称为第一哈希值)是否存储于哈希表集合中。

在一些实施例中,每个哈希值可以被发送到如图1中所示的不同的桶中。由于哈希值本身具有良好的随机性,因此可以基于该哈希值中特定位的值来确定其将被发送到哪个桶中。例如,如果该架构中设置有128个桶,则可以根据该哈希值的前6位来确定与该哈希值相关联的桶,例如,如果前6位值为000010,则该哈希值将被发送到第2个桶。通过这样的方式,可以并行地对多个哈希值进行操作,而不发生冲突。应当理解,每个桶122、124、126和128中有着同样的多级哈希表结构,并且其操作是一致的。

因此,为了方便描述,下文将以其中一个桶中的操作作为示例进行描述,例如,如图1所示,第一哈希值与桶122相关联,从而可以确定其对应的哈希表集合包括哈希表130(为了方便描述,下文称为第一哈希表)、哈希表162(为了方便描述,下文称为第二哈希表)和哈希表134(为了方便描述,下文称为第四哈希表),其中,第一哈希表为第一存储设备120中当前有效的哈希表。应当理解,上文中所述的哈希表的具体数目仅是示例性的。

以下将结合图3描述框204的具体实现,图3示出了根据本公开实施例的确定哈希值是否存储于哈希表集合中的方法的示例实施方式300。

在框302中,在第一哈希表130中查找第一哈希值,并在框304确定其是否存储于第一哈希表130中,如果在第一哈希表130中查找到第一哈希值,则代表该数据已经被存储,因此不需要再被写入。如果在第一哈希表130中未查找第一哈希值,则方法300进行到框306。

在框306中,使用于第二哈希表相关联的布隆过滤器将第一哈希值映射到多个位,并在框308中确定多个位中是否存在零位。布隆过滤器是用于判断一个元素是否在某个集合中的数据结构,一个空的布隆过滤器是一个有m个位的位数组,每一个位都初始化为0,并且定义有多个不同的哈希函数,每个哈希函数都将集合中的元素哈希到m个不同位置中的一个,并将该多个位的值置1。

在一些实施例中,如上文所述,布隆过滤器134位于第一存储设备120中,而非第二存储设备160中,从而能够利用访问速度更快的第一存储设备120便能够确定某些哈希值不存在于第二哈希表162中,而不用访问第二存储设备160,从而能够极大地提高查找效率。

如图1所示,在查询第一哈希值时,使用与第二哈希表162相关联布隆过滤器142中的多个哈希函数将第一哈希值映射到多个位,如果在框308中确定多个位中存在零位,则方法300进行到框310,即确定第一哈希值未存储于第二哈希表162中。此时,可以针对哈希表集合中的下一个哈希表(例如,第四哈希表164)继续进行查询,其方法与针对第二哈希表162的查询方法类似,因此不再详述。

如果在框308中确定多个位中不存在零位,则表示第一哈希值可能存在于第二哈希表162中,则方法300进行到框312,即基于页面索引142确定与第一哈希值相关联的页面。在一些实施例中,如上文所述,页面索引142存储了第二哈希表中各个页面的起始哈希值及偏移量,从而能够快速地定位第一哈希值所对应的哈希表页面。并在框314中,从该对应的页面中查找第一哈希值。在一些实施例中,如图1所示,页面索引142可以被存储于第一存储设备120中。

继续参考图2,若在框204中确定第一哈希值未存储于哈希表集合中,则方法进行到框206,即判断第一哈希表130是否已满。若第一哈希表130未满,则方法200进行到框208,即向第一哈希表130写入第一条目,该第一条目包括第一哈希值。

在一些实施例中,还可以在nvram(非易失性随机访问存储器)中设置日志缓冲区,用于在向哈希表进行写入时也将该条目写入到日志中,并且在缓冲区满时,将其中的条目添加到位于第二存储设备160中的哈希表日志中。通过添加日志管理机制,可以有效地避免突发断电、数据丢失等风险,并且支持数据的恢复,提高数据存储的安全性。

若在框206中确定第一哈希表已满,则方法200进行到框210。在框210中,将第三哈希表132作为第一存储设备120中当前有效的哈希表。在一些实施例中,第三哈希表132可以为第一存储设备120中预分配的存储区域。在一些实施例中,也可以临时申请预定大小的存储区域,以作为第三哈希表132。

在框212中,向第三哈希表132写入第一条目,其包括第一哈希值。以及,在框215中,将第一哈希表130中的条目与第二哈希表162中的条目进行合并。

在一些实施例中,首先确定第一哈希表130中的条目数目与第二哈希表162中的条目数目的和是否达到了预定阈值,该预定阈值可以为第二哈希表162可以存储的条目的最大数目。当该和小于该预定阈值时,表示第二哈希表162中剩余的空间足够容纳第一哈希表130中的条目,此时可以将第一哈希表130中的条目和第二哈希表162中的条目,例如按照哈希值从小到大的顺序,重新写入到第二哈希表162中,并更新与第二哈希表相关联的索引项134。

在一些实施例中,当该和达到预定阈值时,表示第二哈希表162中剩余的空间不足以容纳第一哈希表130中的条目,此时需要将条目值合并到新的第四哈希表164中,此时可以将第一哈希表130中的条目和第二哈希表162中的条目,例如按照哈希值从小到大的顺序,写入到第四哈希表164中,并且更新与第四哈希表相关联的索引项136。在一些实施例中,可以在第二存储设备160中预分配第四哈希表164。在一些实施例中,还可以临时在第二存储设备160中申请预定大小的存储空间,以用作第四哈希表164。在一些实施例中,在完成合并后,可以经第二哈希表162设置为可写入状态,使得其可以被再次使用。在一些实施例中,在完成合并后,还可以直接释放第二哈希表162。

在一些实施例中,在完成第一哈希表130中的条目与第二哈希表162中的条目的合并后,可以将第一哈希表130设置为可写入状态,以使得其可以被再次使用。在一些实施例中,还可以直接释放第一哈希表130。

根据本公开的实施例,第一哈希表130和第二哈希表162的合并是异步进行的,并通过在第一存储器120中使用双哈希表的方式,而不用对第一存储器120中的哈希表进行锁定,从而能够保证新来写入请求被及时地响应,并且将连续地、离散的小数据写入通过合并的方式转为连续的大数据写入,进而能够提高第二存储设备160的使用寿命。

在一些实施例中,如果第二存储设备160中只设计了一层哈希结构,例如第二哈希表162,例如,第二哈希表162的容量可以是足够大的。假定第二哈希表162的容量为第一哈希表130的n倍,并假定第一哈希表130的容量相当于第二哈希表162中一个页面的容量相同。由于当第一存储设备110中的哈希表满时,其需要与第二哈希表162进行合并,在每次合并的过程中都需要读取第二哈希表162中的全部条目,并合将并后的条目重新写入到第二哈希表中。因此,若写入n个页面的数据,需要进行n次合并,其中进行了n*n*页面的i/o操作,这个量级的i/o效率相对较低,难以接受。

优选地,在一些实施例中,可以在第二存储设备160中设置多层级的哈希表,例如可以设置m层哈希表,此外为了方便合并操作,常将下一层的哈希表的容量设置为上一层哈希表容量的n倍,其中第二哈希表162的容量可以为第一哈希表容量130的n倍,同样假定第一哈希表130的容量大小为第二哈希表162中的一个页面。此时,例如,写入nm个页面的数据需要进行的i/o操作的量为:nm*((n-1)*m+1),其中nm=nm,即为第m层中页面数目。

以写入64个页面的数据为例,若采用单层的方式,将需要进行64*64*页面的i/o操作。若采用分层(例如,3层)的方式,其中下一层为上一层的4倍容量,则写入64个页面的数据,只需要64*((4-1)*3+1)=64*10页面的数据。由此可见,基于多层次设计的哈希表结构能够极大地减少合并中所产生的i/o操作量,从而显著地提高哈希表操作的效率。

以下将参考图4描述根据本公开的实施例的另一管理哈希表的方法400。在框402中,接收删除请求,以及在框404中,确定第一存储设备120中的当前有效的第三哈希表132是否已满。

若在框404中确定第三哈希表132未满,则方法400进行到框414,即向第三哈希表132写入第二条目,该第二条目包括与删除请求相关联的第二哈希值,并且在框416,在第三哈希表中对第二条目进行标记以指示第二哈希值将要被删除。

若在框404中确定第三哈希表132已满,则方法400进行到框406,选择第一哈希表130作为第一存储设备120中当前有效的哈希表。在一些实施例中,也可以临时从第一存储设备120中申请新的哈希表,以作为当前有效的哈希表。

在框408中,向第一哈希表130写入第二条目,以及在框410,在第一哈希表中对第二条目进行标记以指示第二哈希值将要被删除。以及在框412中,将第三哈希表132中的条目与第二哈希表162中的条目进行合并。

如上文所述,待删除的哈希值仅是在哈希表中被标记为待删除状态,其并非被实时地删除,而是在合并的过程被删除。以下将结合图5描述根据本公开实施例的删除哈希值的方法500的流程图。

在框502中,从第一哈希表中确定经标记的第二条目,该第二条目包括第二哈希值。在框504中,确定第一哈希表和第二哈希表中是否存在未被标记的第三条目,第三条目也包括第二哈希值。如果第三哈希表或第二哈希表中存在第三条目,则方法500进行到框506,即从第一哈希表或第二哈希表中删除第二条目和第三条目。在一些实施例,当第三条目被删除时,还可以从存储装置中释放与第二哈希值相关联的存储空间。

如果在框504中确定第一哈希表和第二哈希表中都不存在第三条目,则方法500进行到框508,即可以按照上文所述的方法对第一哈希表和第二哈希表进行合并,并在合并的结果中保留第二条目及其标记状态。

基于上文所描述的方式,哈希值删除操作可以与哈希值插入操作一起先被写入到第一存储设备120中的哈希表中,并等到哈希表满时才会与第二存储设备160中的哈希表进行合并,这样能够将单个的、随机的小写入/删除操作转换为连续的大的写入/删除操作,提高了哈希表的操作效率,并延长了第二存储设备160的寿命。

图6示出了可以用来实施本公开内容的实施例的示例设备600的示意性框图。如图所示,设备600包括中央处理单元(cpu)601,其可以根据存储在只读存储器(rom)602中的计算机程序指令或者从存储单元608加载到随机访问存储器(ram)603中的计算机程序指令,来执行各种适当的动作和处理。在ram603中,还可存储设备600和/或设备600操作所需的各种程序和数据。cpu601、rom602以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。

设备600中的多个部件连接至i/o接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

上文所描述的各个过程和处理,例如方法200、300、400和/或500,可由处理单元601执行。例如,在一些实施例中,方法200、300、400和/或500可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由rom602和/或通信单元606而被载入和/或安装到设备600上。当计算机程序被加载到ram603并由cpu601执行时,可以执行上文描述的方法200、300、400和/或500的一个或多个动作。

本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本公开的各实施方式,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施方式。在不偏离所说明的各实施方式的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施方式的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1