一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于散列表的系统和方法以及使用该系统和方法的数据存储和访问与流程

2022-10-26 22:52:27 来源:中国专利 TAG:
用于散列表的系统和方法以及使用该系统和方法的数据存储和访问1.相关申请的交叉引用2.本技术要求于2020年2月10日提交的美国临时申请号为63/205,633的申请的优先权,其全部内容通过引用合并在此。
技术领域
:3.本教导一般涉及计算机存储。更具体地说,本教导涉及存储管理。
背景技术
::4.如今,计算机或计算设备无处不在。随着计算机或计算设备的广泛使用,已经开发出用于各种任务的各种应用程序。这些应用程序收集数据、处理数据和呈现数据。因此,在不同类型的存储器上存储、访问和更新各种类型的数据的需求不断增加。尽管也相应地开发了内存、存储设备及其管理方法以满足需求,但无论这些存储操作是在本地、云中、分布式还是集中执行,仍然存在影响存储操作性能并在一定程度上成为在不同类型的计算机或计算设备上运行的各种应用程序的瓶颈的问题。5.存储管理中使用的基本技术之一是散列化(hashing),散列化在计算机行业中已经使用了几十年,以实现数据与存储数据或检索数据的内存位置之间的映射。一般来说,散列化的工作方式如下。给定要进行存储操作(存储或检索)的数据,根据数据的内容计算密钥以生成可用于定位指向数据的内存或存储地址的索引信息的散列码。散列表(hashtable,ht)是存储将不同的数据映射到内存或存储器中不同位置的此类索引信息的集合的地方。6.传统上使用不同类型的散列表。图1a示出了示例性开放散列表100。开放散列表可以对应于开放散列化的最简单形式。如图所示,在所示的开放散列表100中有多个条目,该表的每一个条目中的第二列110定义了链表的开头。例如,图1a中示出了两个链表,即120和130。散列化(hashed)到散列表100的特定条目的所有数据记录都放在与该条目相关联的链表上。散列化到散列表中同一条目的数据记录越多,与该条目关联的链表越长。由于使用链表存储实际记录,因此存在多个随机(至少两个)内存或存储访问以便到达数据记录。在该示例中,为了访问值为9530的数据记录,需要基于链表120进行两次随机内存或存储访问;而为了访问值为1057的数据记录,需要基于链表130进行三次随机内存或存储访问。一般来说,需要的随机访问次数越多,访问速度越慢,延迟越长。7.图1b示出了示例性封闭散列表140,该示例性封闭散列表140具有两列,每一列具有固定大小,如图所示。该示例性封闭散列表中的每一个记录具有两个域,对应于表中的数据。具有键值的每一个记录具有与封闭散列表中的条目相对应的基位置(homeposition)。基于底层散列函数确定基位置。表中的每一个条目只能存储一个值。当发生冲突(即,将另一条记录散列化到一条其它记录先前已被散列化或存储的基位置)时,冲突的解决方案是,必须根据所采用的冲突解决方案将先前记录或新记录存储在其他位置。在检索数据记录时也执行相同的过程。由于表中可用于存储数据记录的空间有限,因此可以想象,很大一部分存储请求不得不通过冲突解决方案来解决,这会导致较慢的速度和更高的延迟。此外,在这种封闭散列表结构中,用于存储数据记录的空间对于所有记录而言大小相等,从而导致无法存储可变长度记录或内存空间的严重浪费。8.除了速度或延迟问题外,传统散列表解决方案还有其他缺点。每当散列表以其先前创建的形式不再合适时,需要对散列表进行再散列化(rehashed),因为,例如,在尝试向散列表添加新记录期间,散列表耗尽了空间。许多散列表实现使用“大爆炸(big-bang)”类型的再散列化,这意味着当再散列化发生时,它将应用于整个散列表。这会在添加记录时,特别是当散列表包含数十亿条记录时,导致长时间的再散列化延迟。9.此外,为动态随机存取存储器(dynamicrandomaccessmemory,dram)优化的散列表的数据结构通常依赖于指针,如果内存映射稍后具有不同的基址,指针将变得无效。即使在同一程序的不同运行期间,情况也往往如此,因为现代操作系统通常以任意方式分配内存地址。除此之外,散列表数据通常在内存中并不紧凑,而是存储在由例如内存分配器等确定的任意地址的多个位置。此类散列表需要在启动时被反序列化,并在退出时被序列化回存储器,这进一步需要大量编程工作以及显著的启动和关闭延迟。与传统散列表解决方案相关的这些问题已在数据访问随时随地以及计算机和计算设备的用户期望即时数据访问的当今社会成为障碍。10.因此,需要一种可操作的散列表设计以及处理该设计的方法和系统,其允许更有效的解决方案来解决传统方法的缺点和挑战。技术实现要素:11.本文公开的教导涉及用于信息管理的方法、系统和编程。更具体地说,本教导涉及与散列表相关的方法、系统和编程以及使用所述与散列表相关的方法、系统和编程的存储管理。12.在一个示例中,公开了一种在具有至少一个处理器、存储器以及能够连接到网络进行存储管理的通信平台的机器上实现的方法。构建具有索引文件的散列表,该索引文件具有一个或更多个槽,每一个槽包括一个或更多个桶。每一个桶存储包括直接记录、间接记录和转发记录的一种或更多种记录类型。直接记录将数据直接存储在索引文件的槽的桶中。当接收到与某些相关数据相关的存储请求时,根据构建的散列表处理该请求。13.在另一个示例中,公开了用于支持存储管理的散列表。散列表包括具有一个或更多个槽的索引文件,每一个槽包括一个或更多个桶。索引文件的槽中的每一个桶存储包括直接记录、间接记录和转发记录的一种或更多种记录类型。当数据满足第一条件时,直接记录将数据作为直接数据直接存储在索引文件中的槽的桶中。14.其他概念涉及用于实施本教导的软件。根据该概念,软件产品包括至少一种机器可读非暂时性介质和该介质所携带的信息。介质携带的信息可以是可执行程序代码数据、与可执行程序代码相关联的参数和/或与用户、请求、内容或其他附加信息相关的信息。15.另一个示例是记录有用于存储管理的信息的机器可读、非暂时性且有形的介质。所述信息在被机器读取时,使所述机器执行以下步骤。构建具有索引文件的散列表,所述索引文件具有一个或更多个槽,每一个槽包括一个或更多个桶。每一个桶存储包括直接记录、间接记录和转发记录的一种或更多种记录类型。直接记录将数据直接存储在索引文件的槽的桶中。当接收到与某些相关数据相关的存储请求时,根据构建的散列表处理该请求。16.附加的优点和新颖的特征将在下面的描述中部分阐述,并且在检查以下和附图后将对于本领域的技术人员部分显而易见,或者可以通过产生或操作示例来获悉。本教导的优点可以通过实践或使用下面讨论的详细示例中所阐述的方法、工具和组合的各个方面来实现和获得。附图说明17.本文描述的方法、系统和/或编程根据示例性实施例进一步描述。参考附图详细描述这些示例性实施例。这些实施例是非限制性示例性实施例,其中贯穿附图的若干视图,相同的附图标记表示相同的结构,并且其中:18.图1a(现有技术)描绘了传统的开放散列表;19.图1b(现有技术)描绘了传统的封闭散列表;20.图2描绘了根据本教导的示例性实施例的3次未命中(3-misses,3-m)散列表的示例性结构;21.图3描绘了根据本教导的示例性实施例的3-m散列表中的槽的示例性结构;22.图4示出了根据本教导的示例性实施例的3-m散列表中的槽的桶中的示例性记录类型;23.图5描绘了根据本教导的示例性实施例的3-m散列表的槽中的包含记录的桶的示例性结构;24.图6a描绘了根据本教导的示例性实施例的3-m散列表中的槽的桶中的直接记录的示例性结构;25.图6b提供了根据本教导的示例性实施例的3-m散列表中的槽的桶中的示例性直接记录;26.图7a描绘了根据本教导的示例性实施例的3-m散列表中的槽的桶中的短间接记录的示例性结构;27.图7b提供了根据本教导的示例性实施例的3-m散列表中的槽的桶中指向溢出文件中的块的示例性短间接记录;28.图8a描绘了根据本教导的示例性实施例的3-m散列表中溢出文件的块中的短间接数据的示例性结构;29.图8b提供了根据本教导的示例性实施例的3-m散列表中溢出文件的块中的示例性短间接数据;30.图9a描绘了根据本教导的示例性实施例的3-m散列表中的槽的桶中的长间接记录的示例性结构;31.图9b提供了根据本教导的示例性实施例的3-m散列表中的槽的桶中指向溢出文件中的块的示例性长间接记录;32.图10a描绘了根据本教导的示例性实施例的3-m散列表中溢出文件的块中的长间接数据的示例性结构;33.图10b提供了根据本教导的示例性实施例的3-m散列表中的示例性长间接数据;34.图11a描绘了根据本教导的实施例的、在所有桶中具有指向再散列化槽的转发记录的基槽;35.图11b描绘了根据本教导的示例性实施例的3-m散列表中的基槽的转发记录的示例性结构;36.图11c描绘了根据本教导的示例性实施例的3-m散列表中具有填充有指向再散列化槽的转发记录的桶的基槽;37.图11d提供了根据本教导的示例性实施例的3-m散列表中的具有提供有指向相应再散列化槽的转发信息的一些桶的示例性槽;38.图11e描绘了根据本教导的示例性实施例的基槽和在不同时间创建的多个再散列化槽之间的示例性关系;39.图12描绘了根据本教导的示例性实施例的由3-m散列表促进的存储管理系统的示例性高级系统图;40.图13a示出了根据本教导的示例性实施例的用于构建3-m散列表的示例性参数类型;41.图13b示出了根据本教导的示例性实施例的与再散列化3-m散列表的槽相关的所使用的示例性配置条件类型;42.图14是根据本教导的示例性实施例的经由3-m散列表操作的存储管理系统的示例性过程的流程图;43.图15是根据本教导的示例性实施例的基于3-m散列表的再散列化单元的示例性过程的流程图;44.图16是根据本教导的示例性实施例的基于3-m散列表的数据存储单元的示例性过程的流程图;45.图17是根据本教导的示例性实施例的基于3-m散列表的数据检索单元的示例性过程的流程图;46.图18是根据各种实施例的可用于实现执行本教导的专用系统的示例性移动设备架构的说明图;以及47.图19是根据各种实施例的可用于实现执行本教导的专用系统的示例性计算设备架构的说明图。具体实施方式48.在以下详细说明中,通过示例阐述了许多具体细节,以便于深入理解相关教导。然而,本领域技术人员应当清楚的是,可以在没有这些细节的情况下实践本教导。在其他情况下,公知的方法、过程、部件和/或系统已经在相对较高的层次上描述,而没有详细说明,以避免不必要地模糊本教导的各方面。49.本教导旨在通过改进的3-misses或3-m散列表及其管理来解决数据存储管理当前状态的缺陷,以通过减少缓存恶意访问的数量、消除启动和退出期间散列表的序列化/反序列化、以及避免由于一次对整个散列表进行再散列化而导致的存储访问中断的方式提高性能。这些方面的性能增强可加快启动速度,最大限度地减少数据处理延迟,并实现存储管理操作的连续性。下面通过各种实施例公开了3-m散列表的不同方面。应当理解,描述这种公开的实施例是为了说明而不是限制。50.图2描绘了根据本教导的示例性实施例的3-misses(3-m)散列表200的示例性结构。3-m散列表200包括索引文件210和溢出文件240。索引文件210还包括一个或更多个基槽220和可选的一个或更多个再散列化槽(rhs)230。基槽区域220中的所有槽可以具有相同的大小,以便可以基于第一基槽s0的起始地址和基槽的大小来确定任何槽的起始地址。230中的每一个再散列化槽对应于220中的基槽,并且在再散列化基槽时创建。通常,再散列化槽的大小大于相应基槽的大小,例如,是其相应基槽大小的两倍。例如,如图所示,可以再散列化220中的基槽s1,以在230中创建再散列化槽rhs1,使得基槽s2中的信息现在指向再散列化槽rhs1。类似地,在需要时,可以再散列化基槽s2,使得可以在230中生成再散列化槽rhsk,并且基槽s2中的信息现在指向rhsk。51.索引文件210中的每一个槽(无论是基槽还是再散列化槽)都由一个或更多个桶组织而成,但是再散列化槽与其相应的基槽相比可以包括更多的桶。图3中示出了一个示例,其描绘了根据本教导的示例性实施例的3-m散列表中的槽的示例性结构。如图所示,示例性槽i310的大小为l,且具有n个桶320,包括b1320-1、b2320-2、…、bi320-i、…、bn320-n。槽中的桶也可以大小相等,并且它们一起可以占用一定数量的物理内存或存储块。如图3所示,示例性槽i310占用k个物理内存或存储块,从块1330-1、…、块2330-2、…、到块k330-k,总长度l=k*b,其中b是块大小。通过槽的这种组织,可以基于第一槽的起始地址和已知槽大小来确定每一个槽的起始地址。例如,示例性槽i310的起始地址ai可以确定为(i-1)*l 3-m散列表的索引文件的起始地址。52.对于再散列化槽,可以在再散列化期间根据索引文件的现有大小和可用容量确定起始地址,例如,如果索引文件的足够大的连续区域可用于包含再散列化槽的数据,则可以在该区域内为再散列化槽分配起始地址,并且可以在存储管理器中将与该槽对应的块标记为已分配。否则,如果没有足够大的连续可用区域来容纳再散列化槽,则可以扩展索引文件以使该区域可用。53.槽中的每一个桶可以构造为存储信息。在3-m散列表中,可以根据具体情况使用桶存储不同类型的信息。图4示出了根据本教导的示例性实施例的3-m散列表中的槽的桶中的示例性记录类型。桶可以存储正常记录或转发记录。转发记录是一种指示桶所在的槽已被再散列化,并提供指向再散列化槽的信息的记录。桶中的正常记录提供与要访问的数据相关的信息。正常记录也可以是不同类型。如图4所示,正常桶记录可以是直接记录类型或包含数据的记录,即,数据直接存储在3-m散列表的索引文件220中的槽的桶中。在这种情况下,可以直接从索引文件中存储或检索数据。与传统散列表相比,这减少了缓存恶意访问的数量。54.正常桶记录也可以是间接类型,表示数据不在索引文件中,桶中存储的内容可用于指向可以找到数据的位置。也就是说,间接记录是指向数据存储位置的指针。间接记录还有其他不同的类型,即短间接记录和长间接记录。短间接记录是指向可存储在一个存储块中的数据的位置的记录。长间接记录是指向占用内存或存储空间的多于一个块的数据的位置的记录。通过不同类型的间接记录,可以高效地对大范围可变长度的数据进行索引。下面将参考图5-11c提供关于桶中不同记录类型的组织或结构的细节55.如本文所述,3-m散列表中桶中的直接记录是直接存储数据的记录,因此可以直接在索引文件210中完成对存储在直接记录中的数据的访问,而无需另一个缓存恶意访问,与使用传统散列表所需的数量相比,减少了此类缓存恶意访问的数量。图5描绘了根据本教导的示例性实施例的3-m散列表的槽中的包含记录的桶的示例性结构。具有各种记录的桶从桶位移(bucketdisplacement,bd)域510开始,以数据结束(endofdata,eod)域530结束,中间有一个或更多个记录520,例如第一记录r1520-1、第二记录r2520-2、…、和第m记录rm520-m。桶中的记录可以是直接记录或间接记录,而间接记录又可以是短间接记录或长间接记录。在一些实施例中,不同记录的长度根据记录的性质可以是不同的。用于存储直接数据的记录的长度可以根据记录的各种组成部分(例如可变长度键和可变长度值)的长度而变化。只要数据可以放入一个桶中,数据就可以直接存储在索引文件210中的桶中。对于间接记录,由于目的是将存储在其中的实际数据重定向到溢出文件240中的某个位置,因此桶中特定类型的间接记录的长度可以是固定大小,如下所述。图5所示的包含记录的桶中的每一个记录可以具有不同的大小,从而允许在索引文件中高效地存储可变长度的记录。在桶中的无论是直接记录还是间接记录的每一个记录中,存储在其中的信息都按照一定的结构进行组织,如下面详细讨论。56.图6a描绘了根据本教导的示例性实施例的3-m散列表中的槽的桶中的直接记录的示例性结构。如图所示,存储在桶中的直接记录包括至少4个域,包括键长度(keylength,kl)域610、值长度(valuelength,vl)域620、键域630和值域640。如图所述,kl域610中的值指的是存储在键域630中的键的长度,而vl域620的值指示值域640的长度。根据本教导的示例性实施例,图6b中提供了直接记录的一个示例。在此示例中,直接存储在桶中的数据包括键域630中的键(“hnx”)和值域640中的值(“q085”),因此kl域610的值为3,表示所存储的键的长度,vl域620的值为4,表示存储在记录中的值的长度。可以看出,使用直接记录的结构,可以根据指定的长度存储、检索和管理可变长度的直接数据。57.图7a描绘了根据本教导的示例性实施例的3-m散列表中的槽的桶中的短间接记录的示例性结构。如本文所述,短间接记录用于指向溢出文件240中可存储在单个物理内存块中的数据的位置。短间接记录引用的数据可以是任何长度(只要它比一个物理块短),因此它可以存储在块中具有起始位置的块中。如图7a所示,短间接记录可以用多个域组织而成,该多个域被提供为指向块,指示块内的起始位置以及用于存储数据的内存或存储器的长度。在此示例性结构中,短间接记录包括记录类型(recordtype,rt)域710、桶选择器散列(bucketselectorhash,bsh)域720、块号(blocknumber,bn)域730、长度域740和偏移域750。rt域710指示记录类型为短间接记录,bn域730提供存储数据的块的块号。长度740指示数据占用的块中的长度。偏移域750指向数据开始的块内的偏移位置。58.此处可包括bsh域720,以便于更高效的搜索。如果没有这样的bsh域,在按键搜索记录期间遇到的每一个间接记录将需要额外的缓存恶意访问,以将正在搜索的键与该间接记录的键进行比较。在短间接记录中包含bsh域的情况下,仅当为正在搜索的键计算出的bsh与间接记录中的bsh域相同时,才需要这种缓存恶意访问。例如,对于32位bsh域,正在搜索的键的bsh将在大约40亿个记录引用中平均仅与间接记录的bsh域匹配一次,而不是每一个记录匹配一次。59.通过图7a所示的这种短间接记录中的内容,可以识别块和其中存储数据的位置。图7b提供了根据本教导的示例性实施例的3-m散列表中的槽的桶中指向存储数据的溢出块的示例性短间接记录。在该示例中,rt域710具有值“si”,指示它是短间接记录。bn域730中的值为3084,指向溢出文件240中块号为3084的物理块。偏移域750中的值9指示从数据开始的块3084开始的起始位置偏移,而长度域740中的数值150提供从偏移位置开始数据在块中占用的内存长度。可以看出,使用短间接记录中的信息,可以精确定位数据。此外,如此引用的数据可以是任何长度,只要它比一个块短即可。尽管如图7a-7b所示的示例性实施例在短间接记录中包括五个域(710-750),但这仅用于说明,并不旨在限制短间接记录可以包括的内容。若根据应用的需要,还可以引入附加域。60.如图7a-7b所描绘的短间接记录从索引文件210指向溢出文件240中的块中的特定位置。存储在溢出文件240的指向块中的数据可以包括键和值,并且它们以需要进一步定义的特定数据结构存储。图8a描绘了根据本教导的示例性实施例的存储在3-m散列表中的短间接数据的示例性结构。可以看到,存储在溢出文件240的块中的数据结构(如图7a-7b所示,由索引文件210中的槽的桶中的短间接记录引用)与直接数据的结构(如图6a所示)类似。有4个示例性域,包括键长度(kl)域810、值长度(vl)域820、键域830和值域840。kl域810中的值定义了存储在键域830中的键的长度,而vl域820中的值定义了存储在值域840中的数据值的长度。图8b示出了根据本教导的示例性实施例的存储在3-m散列表200的溢出文件的块中的示例短间接数据。可以看出,通过这种方式,可变长度的数据可以通过3-m散列表200灵活地存储和精确地引用。61.尽管如图8a-8b所呈现的示例性实施例或示例在短间接数据中包括四个域(810-840),但这仅用于说明,并不旨在限制短间接数据可以包括的内容。所呈现的短间接数据结构支持并促进可变长度数据存储和检索,如果需要,可以包括更多域,而不影响其存储和检索可变长度的短间接数据的能力。例如,可以以这种附加域的已知大小引入附加域。只要在总长度740中考虑与这些附加域相关的附加大小,由于四个域(810-840)提供了支持可变长度数据所需的信息,因此可以灵活地添加附加域。62.如本文所述,一些数据可以直接存储在索引文件210中,而存储在溢出文件240中的一些数据可以通过存储在索引文件210中的槽的桶中的间接记录来指向。对于可以存储在单个块中的短数据,短间接记录(如图7a-7b所示)可以存储在索引文件210的桶中,以便直接访问溢出文件240中的块,然后,可以根据图8a-8b所示的结构进一步访问短数据的键和值。如本文所述,对于定义为不能存储在单个块中的数据的长间接数据,长间接记录可以存储在索引文件中,用于指向溢出文件240中存储长数据的位置。图9a描绘了根据本教导的示例性实施例的3-m散列表中的槽的桶中的长间接记录的示例性结构。如图所示,长间接记录可以包括多个域,包括记录类型(rt)域910、桶选择器散列(bsh)域920和起始块号(startingblocknumber,sbn)域930。rt域910具有指示该记录类型的值。如上所述,提供bsh域920以促进更有效的搜索。sbn域930提供块号,该块号指向指示溢出文件中存储长数据的区域的开始的块。63.图9b提供了根据本教导的示例性实施例的3-m散列表中的槽的桶中指向溢出文件中的块的示例性长间接记录。如图所示,在示例中,索引文件中的长间接记录在rt域910中指示记录类型为长间接(longindirect,li),并且桶选择器散列码为314159。sbn域930中提供了块号2415,其指向溢出文件240中的块2415,这是所讨论的长数据开始的位置。与关于短间接记录的讨论类似,尽管如图9a–9b所示的示例性实施例在长间接记录中包括三个域(910-930),但这仅用于说明,并不限制长间接记录可以包括的内容。若根据应用的需要,还可以引入附加域,而不影响由图9a-9b所公开的三个域提供的功能。64.从溢出文件240中的一个块开始并通过一个长间接记录指向,占用多于一个块的长数据也可以按照在其中提供信息以便于存储和检索的方式进行构造。长数据可以包括键和值,每一个键和值可以以各自的长度单独存储。图10a描绘了根据本教导的示例性实施例的3-m散列表200中的溢出文件240中的长间接数据的示例性结构。与直接数据和短期间接数据类似,长期数据被构造为包括多个域。在图10a所示的示例性实施例中,长间接数据可以包括键长度(kl)域1010、值长度(vl)域1020、然后是键1030和值1040,其中kl域1010的值指定长数据的键1030的长度,vl域1020的值提供长数据的值1040的长度。图10b示出了根据本教导的示例性实施例的存储在3-m散列表200中的示例长间接数据。在本示例中,键的长度为100,长数据的值的长度为5000。然后,按照指定,此类访问控制信息后面是长度为100的实际键“ghqourr…”和长度为5000的值“bua,hh…”。65.尽管如图10a–10b所呈现的示例性实施例或示例在长间接数据中包括四个域(1010-1040),但这仅用于说明,而不是限制长间接数据可以包括的内容。所呈现的长间接数据结构支持并促进可变长度数据存储和检索,并可在需要时包括更多域,而不影响其实现长间接数据的可变长度存储和检索的能力。只要在长间接数据中以自包含的方式提供必要的信息,就可以引入额外的域,以从每一个域的位置和大小方面指定存储在其中的不同数据类型,以便于所需的存储管理。66.参考图4,3-m散列表200的槽中的桶可以是正常记录或转发记录。如本文所述,正常记录可以是直接、短间接或长间接记录,其中直接记录将数据直接存储在桶中,而间接记录(短或长)提供指向存储实际数据的溢出文件240的索引信息。可以放入桶中的数据可以作为索引文件210中的直接记录直接存储在桶中。与能够高效存储可变长度数据的现有技术散列表相比,通过将数据直接存储在索引文件210减少了缓存恶意访问。存储在索引文件210中的直接数据可以具有在每一个直接记录中指定的不同长度(见图6a-6b)。如本文还讨论的,不能放入索引文件210的桶中的数据可以存储在溢出文件240中,然后相应的索引记录可以存储在索引文件210的指向存储相应数据的溢出文件位置的桶中。根据数据的长度(其是否能够放入一个块中),间接数据的索引记录可以是短间接记录,也可以是长间接记录。本文讨论的直接、短间接和长间接记录或数据的结构都有助于可变长度数据的存储和检索。因此,通过正常记录,可以减少恶意存储访问的数量,并且可以通过本文所述的3-m散列表实现可变长度数据存储。67.如图4所示,3-m散列表200中一个槽的桶中的记录也可以是转发记录,用于在(基)槽已被再散列化的情况下将访问重定向到再散列化槽。根据本教导的一个实施例,可以单独评估3-m散列表200中的每一个单独的槽,以确定它何时应被再散列化。用于评估槽何时需要再散列化的一个或更多个标准可以基于例如应用需求(诸如查找槽内的空间所需的搜索时间或者槽中仍然可用的空间下降到某个水平以下)来定义。还可以基于表的总体统计信息而不是仅仅在槽级别确定要再散列化的槽,例如,每次添加一定数量的元素时再散列化一小部分的槽。当3-m散列表中的槽可以单独再散列化时,与在添加记录期间可能需要再散列化整个散列表的情况相比,添加记录所需的时间长度可以更紧密地限定。这使得3-m散列表200甚至在整个再散列化操作期间也可以继续响应记录插入请求。一般来说,再散列化槽的大小大于基槽的大小。可基于应用需求来确定再散列化槽的大小相比于其基槽的增加。例如,再散列化槽可以是其基槽的两倍大。其他增量也是可能的。68.在本教导的一些实施例中,当3-m散列表200中的基槽被再散列化时,基槽的所有桶提供指向再散列化槽的转发信息。图11a描绘了根据本教导的一个实施例的、在所有桶中包括指向对应再散列化槽的转发记录的示例性基槽,例如槽i1100。如图所示,基槽i有n个桶,b11100-0、b11100-1、…bn1100-n,每一个桶中都存储了转发记录。图11b描绘了根据本教导的示例性实施例的存储在3-m散列表200中的基槽的桶中的转发记录的示例性结构。如该示例性结构中所示,转发记录包括三个域,即用于重定向标记rm1110指示这是转发记录的域、提供起始块号sb#1120的域以及指示再散列化槽占用的多个块上的块计数(blockcount,bc)1130的域。如图11c所示,包括rm、sb#和bc的这种转发记录被提供在已被再散列化的基槽的所有桶中,其中每一个转发记录中的rm、sb#、和bc通过经由sb#指向rhs1160的起始块1170并通过块计数1120指示再散列化槽1160的长度而指向再散列化槽rhs1170。69.图11d提供了根据本教导的示例性实施例的索引文件210的快照,该索引文件210具有不同的基槽,这些基槽具有填充有用于指向其各自的再散列化槽的转发记录的桶。在所示示例中,有两个槽,即槽si和槽sk,其分别被再散列化为rhsi和rhsk。因此,这两个基槽中的桶被分别提供有用于指向其相应再散列化槽的转发记录。具体而言,槽si中转发记录中的sb#域的值234指向再散列化槽rhsi的起始块234。槽sk中转发记录中的sb#域具有值419,指向再散列化槽rhsk的起始块419。在此示例中,基槽si中的块计数域bc为2,表示再散列化槽rhsi占用两个块,而基槽sk中的块计数域bc为4,表示其再散列化槽rhsk占用4个块。在替代的实施例中,再散列化槽的大小可以均匀地增加,而不是可变增长。可以根据应用需求做出这样的决定。70.图11d中所示对应于将基槽再散列化为再散列化槽。根据本教导,基槽是在最初创建3-m散列表200时创建的槽,而再散列化槽是在再散列化操作期间创建的。再散列化槽也可以被再次再散列化,例如,当再散列化槽中的可用空间降至某个低水平时。这在图11e中示出,其中槽i1100是基槽,并且被示出为已经在创建了第一再散列化槽1170、第二再散列化槽1180、…、和第k再散列化槽1190的连续轮再散列化中再散列化。每轮再散列化可以产生更大的再散列化槽。虽然被再散列化的每一个槽(其可以是基槽i1100、第一再散列化槽1170、…)中的记录总是复制到再散列化槽中,但转发记录总是存储在基槽中。这是为了确保最大未命中次数保持在三次。这在图11e中示出,其中总是基槽存储指向当前(最近)再散列化槽的转发记录。71.因此,当对非基槽的槽进行再散列化时,在其中存储的记录被复制到新再散列化槽后,从中复制记录的槽不再存储任何有用信息。在这种情况下,槽占用的空间将返回存储管理器以供再利用。这在图11e中示出,例如,在对基槽1110进行再散列化时,创建第一再散列化槽1170,并将转发记录插入基槽1100。在对再散列化槽1170进行再散列化时,创建新再散列化槽1180,并且将指向新再散列化槽1180的转发记录存储回基槽1110中,并且将再散列化槽1170占用的空间返回到存储器以供再利用等等。以这种方式,重定向到足够大的槽总是构成仅一次未命中。72.如本文所述,以本文所述的方式构造和操作的具有索引文件210和溢出文件240的3-m散列表200可减少缓存恶意访问、可变长度数据存储和检索,并在连续操作的情况下再散列化,而不会因基于槽的再散列化方案而出现大量停机时间。对于3-m散列表200,存储操作被限制为最多3次未命中(缓存恶意访问)。当计算出散列码时,散列码用于定位索引文件210的槽中的桶,从而使其对应于第一次未命中。如果桶中的记录存储了直接记录,则没有进一步的未命中,并且该操作以一次未命中完成。如果桶中的记录是间接记录,则这对应于第二次未命中,因为间接记录中的内容不包含实际数据,而是包含将访问重定向到溢出文件240以获取实际数据的信息。无论是短间接记录还是长间接记录,短间接数据或长间接数据都可以在两次未命中的情况下访问。73.发生第三次未命中的唯一情况是使用散列码识别的槽已被再散列化时。槽的桶中的转发记录指向再散列化槽,这构成了第二次未命中。如果再散列化槽的桶内的记录是直接记录或包含数据的记录,则存储操作将以两次未命中完成。然而,如果再散列化槽的桶中的记录是间接记录,无论是短间接记录还是长间接记录,它都对应于第三次未命中,因为间接记录指向溢出文件240以获取实际数据。因此,给定3-m散列表200的机制,最大未命中数为3。由于3-m散列表200能够具有可变长度,因此任何数据长度的任何数据请求都可以以最多三次未命中来完成。74.与3-m散列表相关的附加特性可实现更高效的存储管理操作。例如,由于索引文件210和溢出文件240中的槽都是使用相对于3-m散列表的起始块的偏移块号寻址的,因此一旦知道3-m散列表中的起始块,所有其他槽都可以有效地寻址,从而使操作更高效。此外,3-m散列表200中的记录和数据可以以应用或程序直接可用的格式存储,因此在启动和关闭期间不需要序列化或反序列化操作,从而与确实需要序列化和反序列化的散列表相比,减少了启动和关闭所需的时间。75.图12描绘了根据本教导的示例性实施例的使用3-m散列表200的存储管理系统1200的示例性高级系统图。在该图示实施例中,3-m散列表200包括索引文件210和溢出文件240,其中索引文件中的间接记录指向溢出文件240中存储间接数据的位置。存储管理系统1200包括两个操作部分,包括用于创建和维护3-m散列表200的第一部分和用于基于3-m散列表200处理数据存储请求的第二部分。第一部分包括3-m散列表构建器1250和3-m散列表槽再散列化单元1270。第二部分对应于存储管理操作,并包括基于3-m散列表的数据存储单元1220、存储管理单元1230和基于3-m散列表的数据检索单元1240。76.提供3-m散列表构建器1250是为了根据1260中存储的3-m散列表构建参数创建3-m散列表200。通过这种安排,3-m散列表构建器1250可以以通用形式提供,并且其进行操作以根据1260存档的参数创建任何特性的3-m散列表。图13a示出了根据本教导的示例性实施例的在构建3-m散列表200时使用的示例性参数类型,其可以包括例如索引文件210中的槽数量、每一个槽占用的块数量、每一个槽中的桶数量及其组织(未示出)、每一个桶的大小、桶的内部组织、…、以及块大小。可以基于应用需求来指定这些参数。77.如本文所述,每一个槽一旦在索引文件210中被创建,就可以在例如满足某些条件时被再散列化。在如图12所示的存储管理系统1200的所示实施例中,可以由3-m散列表再散列化单元1270基于1280中存储的3-m散列表再散列化配置来执行再散列化操作。这种3-m散列表再散列化配置可以指定适当地执行再散列化所需的各种操作参数。例如,可以定义槽要被再散列化的条件,还可以表征如何进行再散列化等。图13b示出了根据本教导的示例性实施例的与再散列化3-m散列表200的槽相关的配置条件/参数的示例性类型。如图所示,存储在1280中的配置可以包括为使槽被再散列化而要满足的针对该槽的标准、与基槽相比应用于再散列化槽的大小增加、…、以及将放置在转发记录中的信息类型的规范。再散列化标准也可以是不同类型的。在一些实施例中,可以指定为启发式。在所示实施例中,可以提供空间相关标准和/或时间相关标准来控制何时再散列化槽。78.空间相关标准可以例如与槽中仍然可用的空间百分比有关,因为剩余可用空间越小,找到此类可用空间所需的时间就越长,从而导致性能下降。发生这种情况时,可能需要再散列化以提高效率。另一方面,可以从不同角度使用时间相关标准来控制再散列化决策的定时。例如,时间标准可以定义搜索槽中可用空间所需的时间限制。当所需时间超过一定水平时,可以表明需要再散列化以提高效率。在一些应用中,还可以基于时间表定义时间相关标准,即以固定间隔定期对槽进行再散列化,该固定间隔可以基于例如针对从过去操作中学习到的所需再散列化观察到的平均时间来确定。这样的学习间隔也可以是槽大小和程序或应用的性质的函数。79.在一些实施例中,3-m散列表槽再散列化单元1270可以基于配置1280中定义的标准来监测对再散列化的需要。在对照再散列化标准进行监测时,与性能相关联的相关信息,诸如剩余可用空间的百分比或用于搜索可用空间的时间等,可以从存储管理操作中收集。这种信息可以从处理存储访问请求的不同单元收集,例如基于3-m散列表的数据存储单元1220。80.图14是根据本教导的示例性实施例的存储管理系统1200的示例性高级过程的流程图。在操作中,3-m散列表构建器1250在1410处基于例如1260中的参数构建3-m散列表200。利用构建的3-m散列表200,存储管理系统1200的操作可以在两个并行轨道中执行。第一操作轨道涉及基于动态维护的3-m散列表200来处理数据访问请求。第二操作轨道涉及再散列化操作,包括例如动态监测针对3-m散列表200中各个槽的再散列化需求、在需要时再散列化基槽、并在创建再散列化槽后将转发记录填充在基槽中。81.在第一操作轨道中,当在1420处接收到请求时,在1430处确定请求的性质。如果请求用于在存储器中存储某些数据,则在1440处调用基于3-mha的数据存储单元1220,以通过3-m散列表200将数据存储在存储器中。如果请求是用于检索存储器中存储的数据,则在1450处调用基于3-m散列表的数据检索单元1240,以基于3-m散列表200从存储器检索所请求的数据。第一操作轨道的过程重复步骤1420-1450。82.在第二操作轨道中,3-m散列表槽再散列化单元1270根据1280中规定的条件/标准,在1460处监测3-m散列表200中的槽,以在1470处确定是否需要再散列化3-m散列表200中的各个槽。根据本教导的实施例,针对每一个单独的槽进行是否需要再散列化的评估,以便针对每一个单独的槽执行再散列化。在一些实施例中,可以同时监测多于一个槽,以便可以针对一组槽做出再散列化决策,并且可以在相同的再散列化操作中对多个槽执行再散列化。如果不需要再散列化任何槽,则过程重复步骤1460-1470。如果需要再散列化3-m散列表200中的任何槽,则3m散列表槽再散列化单元1270在1480处再散列化需要被再散列化的任意槽。在某些情况下,正被再散列化的槽可以对应于基槽。在某些情况下,正被再散列化的槽可以不是基槽。例如,正被再散列化的槽本身可以是再散列化槽。如本文关于图11e所讨论的,当正被再散列化的槽是基槽时,转发记录插入到基槽中。当正被再散列化的槽不是基槽时,转发记录仍插入到正被再散列化的槽的基槽中,并且正被再散列化的槽占用的存储稍后被释放回存储管理器1230,以便可以再利用。重要的是,总是将转发记录插入基槽与确保使用3-m散列表200的数据访问中的最大未命中数为3有关。虽然该流程图在较高层次上代表了存储管理系统1200的过程,但以下提供了用于再散列化以及数据存储和检索的更详细的过程。83.图15是根据本教导的示例性实施例的基于3-m散列表的再散列化单元1270的示例性过程的流程图。如本文所述,每当对槽(无论是基槽、非基槽还是再散列化槽)再散列化时,正被再散列化的槽中的记录都会移动到新再散列化槽。无论正被再散列化的槽是否对应于基槽,转发记录都会插入到基槽中的相应记录中,以便指向再散列化槽。如图15所示,为了再散列化,首先在1500处从存储器1280中检索用于再散列化操作的参数。这些参数可以包括本轮再散列化中的再散列化槽的适当大小。例如,如果对大小为a的基槽进行再散列化以在第一轮中创建再散列化槽,则第一轮中的再散列化槽可以具有原始大小的两倍,即2a。如果在第一轮中创建的再散列化槽需要再次被再散列化,则在第二轮中再散列化槽的大小可以仍然是正被再散列化的槽的两倍,即4a。但由于这是第二轮,因此与基槽的大小相比,第二轮中再散列化槽的大小将是基槽大小的四倍。84.在1510处,基于3-m散列表的再散列化单元1270使用检索到的再散列化参数请求存储管理单元1230为适当大小的新再散列化槽分配空间。一旦分配了新再散列化槽,基于3-m散列表的再散列化单元1270首先通过在1520处识别正被再散列化的槽中的下一个记录、在1530处将正被再散列化的槽中所识别的记录的内容复制到新再散列化槽内的对应记录中、然后在1540处将转发记录插入到基槽(正被再散列化的槽或正被再散列化的槽的基槽)中的记录中使其指向新再散列化槽,来将存储在正被再散列化的槽中的记录移动到新再散列化槽中。该过程继续,直到在1550处确定正被再散列化的槽中的所有记录都被复制到新再散列化槽为止。如果在1560处确定正被再散列化的槽是基槽,则再散列化过程在1580结束。否则,由于转发记录保存在基槽中,在这种情况下,正被再散列化的槽不存储任何对未来数据访问有用的内容,因此在1580处处理结束之前,正被再散列化的槽占用的空间返回到存储管理单元1230。85.图16是根据本教导的示例性实施例的用于经由3-m散列表200将数据存储到存储器中的基于3-m散列表的数据存储单元的示例性过程的流程图。如图14所示,在接收到存储数据的请求时,调用基于3-m散列表的数据存储单元1220以在1600处基于要存储的数据计算散列码。使用散列码,在1610处识别3-m散列表200中的槽和桶,并从那里执行搜索以定位用于存储数据的空间。如果在1620处确定未找到可用空间,则基于3-m散列表的数据存储单元1250可在1630处调用3-m散列表槽再散列化单元1270以再散列化槽。当创建再散列化槽时,在1640处访问存储在基槽中的转发记录,并将转发记录链接到再散列化槽。在一些实施例中,如果在1650确定正被再散列化的槽是基槽,则再散列化操作完成,因为基槽包含将访问重定向到再散列化槽的转发记录(如步骤1490所示)。然而,如果正被再散列化的槽不是基槽,则在再散列化之后不再需要用于正被再散列化槽的先前存储,因为基槽是存储转发记录的位置(如步骤1490所示)。因此,一旦此类非基槽再散列化,可以在1660中将它的先前存储返回到存储管理器。然后,基于3-m散列表的数据存储单元1220继续处理关于再散列化槽的数据存储请求。86.当在槽中,无论是在基槽(在1620处确定)还是在再散列化槽(根据步骤1660)中发现用于处理数据存储请求的空间时,在1670处进一步确定数据是否可以作为直接记录直接存储在槽中的桶中。如本文所述,在一些实施例中,如果数据可以放入一个桶中,则该数据可以作为直接记录保存在桶中。在这种情况下,在1680处,数据作为直接记录直接存储在索引文件210(基槽或再散列化槽中)的桶中。如果数据不能放入一个桶中,则在步骤1690处,基于3-m散列表的数据存储单元1220将数据保存在溢出文件240中,然后将间接记录插入索引文件的桶中以提供指针。如果数据长度小于一个块,则将数据作为短间接数据保存在溢出文件240中,并且基于数据长度以及关于溢出文件240中存储短数据的特定位置(块号和偏移)的信息,构建短间接记录并将其存储在索引文件210的桶中。如果数据的长度大于一个块,则将数据作为长间接数据保存在溢出文件240中,并且基于关于存储长间接数据的起始块的信息构建长间接记录并存储在索引文件210的桶中。87.图17是根据本教导的示例性实施例的用于从经由3-m散列表200管理的存储器检索数据的基于3-m散列表的数据检索单元的示例性过程的流程图。如图14所示,当存储管理系统1200接收到数据检索请求时,它调用基于3-m散列表的数据检索单元1240。当在1700处接收到表示要检索的数据的散列码时,基于3-m散列表的数据检索单元1240在1710处识别由散列码映射到的槽和桶。如果在1720处确定槽的桶存储转发记录,即基槽已被再散列化,则在1730处,基于3-m散列表的数据检索单元1240根据转发记录中的内容确定其中的再散列化槽和桶。如果槽没有被再散列化,则根据存储在基于散列码识别的槽/桶中的记录处理数据检索请求。88.当确定槽和桶时,无论是在基槽还是在再散列化槽中,在1740处获得存储在其中的索引记录中的信息,并用于确定要检索的数据的位置。如果在1750处确定存储在桶中的索引记录指示是直接记录,即要检索的数据直接存储在槽的桶中,则在1760处返回存储在直接记录中的数据值,作为对数据检索请求的响应。89.如果桶中的索引记录是间接记录,则意味着要检索的数据位于溢出文件240中,并且在1770处访问间接记录的内容,并在1780处用于确定溢出文件240内存储数据的位置。利用溢出文件240中的映射位置,基于3-m散列表的数据检索单元1240然后在1790处返回存储在映射位置处的数据值。90.图18是根据各种实施例的可用于实现执行本教导的专用系统的示例性移动设备架构的说明图。在该示例中,可执行本教导的用户设备对应于移动设备1800,包括但不限于智能手机、平板电脑、音乐播放器、手持游戏控制台、全球定位系统(globalpositioningsystem,gps)接收器和可穿戴计算设备,或者任何其他形式。移动设备1800可以包括一个或更多个中央处理单元(centralprocessingunits,“cpu”)1840、一个或更多个图形处理单元(graphicprocessingunits,“gpu”)1830、显示器1820、内存1860、通信平台1810(例如无线通信模块)、存储器1890和一个或更多个输入/输出(input/output,i/o)设备1850。移动设备1800中还可以包括任何其他合适部件,包括但不限于系统总线或控制器(未示出)。如图18所示,移动操作系统1870(例如,ios、android、windowsphone等)和一个或更多个应用1880可以从存储器1890加载到内存1860中,以便由cpu1840执行。应用1880可包括移动设备1800上的用于根据本教导的信息管理的浏览器或任何其他合适的移动应用。用户交互(如果存在的话)可通过i/o设备1850实现,并提供给通过网络连接的各种部件。91.为了实现本公开中描述的各种模块、单元及其功能,可以使用计算机硬件平台作为本文描述的一个或更多个元件的硬件平台。这种计算机的硬件元件、操作系统和编程语言在属性上是常规的,并且假定本领域技术人员对其足够熟悉以使这些技术适应本文所述的适当设置。具有用户接口元件的计算机可用于实现个人计算机(personalcomputer,pc)或其他类型的工作站或终端设备,但如果适当编程,计算机也可充当服务器。相信本领域技术人员熟悉这种计算机设备的结构、编程和一般操作,因此附图应当是无需解释的。92.图19是根据各种实施例的可用于实现执行本教导的专用系统的示例性计算设备架构的说明图。结合本教导的这种专用系统具有包括用户接口元件的硬件平台的功能框图说明。计算机可以是通用计算机或专用计算机。两者都可以用于实现用于本教导的专用系统。该计算机1900可用于实现本文所公开的框架的任何组成部分或方面。例如,本文公开的存储管理系统可以通过其硬件、软件程序、固件或其组合在计算机(如计算机1900)上实现。尽管仅示出了一台这样的计算机,但为了方便起见,与本文描述的本教导相关的计算机功能可以在多个类似平台上以分布式方式实现,以分配处理负载。93.计算机1900例如包括连接到或连接自与计算机1900相连的网络的串行通信(clustercommunication,com)端口1950,以便于数据通信。计算机1900还包括一个或更多个处理器形式的中央处理单元(cpu)1920,用于执行程序指令。示例性计算机平台包括内部通信总线1910、用于计算机1900所要处理和/或通信的各种数据文件的不同形式的程序存储和数据存储(例如磁盘1970、只读存储器(readonlymemory,rom)1930或随机存取存储器(randomaccessmemory,ram)1940)、以及cpu1920所要执行的可能程序指令。计算机1900还包括i/o部件1960,支持计算机与其中的其他部件(如用户接口元件1980)之间的输入/输出流。计算机1900还可以通过网络通信接收编程和数据。94.因此,如上所述,对话管理方法和/或其他过程的各个方面可以体现在编程中。该技术的程序方面可以被认为是通常以可执行代码和/或相关数据的形式的“产品”或“制造品”,所述可执行代码或相关数据被携带或体现在一种类型的机器可读介质中。有形非暂时性“存储”型介质包括可随时为软件编程提供存储的用于计算机、处理器等或其相关模块的任何或所有内存或其他存储器,诸如各种半导体存储器、磁带驱动器、磁盘驱动器等。95.软件的全部或部分有时可以通过网络(如互联网或各种其他电信网络)进行通信。例如,这种通信可以例如结合会话管理实现将软件从一台计算机或处理器加载到另一台计算机或处理器中。因此,可以承载软件元素的另一种类型的介质包括光波、电波和电磁波,例如通过有线和光纤陆线网络以及在各种空中链路上跨本地设备之间的物理接口使用。诸如有线或无线链路、光链路等携带这种波的物理元素也可以被视为承载软件的介质。如本文所用,除非限于有形“存储”介质,否则诸如计算机或机器“可读介质”等的术语是指参与向处理器提供指令以供执行的任何介质。96.因此,机器可读介质可以采用多种形式,包括但不限于有形存储介质、载波介质或物理传输介质。非易失性存储介质例如包括可用于实现如图所示的系统或其任何部件的诸如任何计算机等中的任何存储设备等的光盘或磁盘。易失性存储介质包括动态存储器,诸如这种计算机平台的主存储器。有形传输介质包括同轴电缆;铜线和光纤,包括在计算机系统中形成总线的线。载波传输介质可以采取电信号或电磁信号的形式,或者诸如在射频(radiofrequency,rf)和红外(infrared,ir)数据通信期间产生的声波或光波的形式。因此,计算机可读介质的常见形式包括,例如:软盘、软磁盘、硬盘、磁带、任何其他磁性介质、只读光盘(compactdiscread-onlymemory,cd-rom)、数字视频光盘(digitalvideodisc,dvd)或只读数字视频光盘(dvd-rom)、任何其他光学介质、穿孔卡纸带、任何其他有孔型物理存储介质、ram、可编程只读存储器(programmableread-onlymemory,prom)和电可编程只读存储器(electricalprogrammablereadonlymemory,eprom)、快速擦写存储器(flash-eprom)、任何其它存储芯片或盒式磁带存储器、传输数据或指令的载波、传输这种载波的电缆或链路、或计算机可以从中读取编程代码和/或数据的任何其他介质。这些形式的计算机可读介质中的许多介质可以涉及将一条或更多条指令的一个或更多个序列携带到物理处理器以供执行。97.本领域技术人员将认识到,本教导适用于各种修改和/或增强。例如,尽管上述各种部件的实现可以体现在硬件设备中,但也可以实现为仅软件解决方案,例如在现有服务器上的安装。此外,本文公开的技术可以实现为固件、固件/软件组合、固件/硬件组合或硬件/固件/软件组合。98.虽然上文描述了被视为构成本教导和/或其他示例的内容,但应理解,可以对以上内容进行各种修改,本文公开的主题可以以各种形式和示例实现,并且这些教导可以应用于许多应用中,本文仅描述了其中的一些应用。以下权利要求旨在要求属于本教导真正范围内的任何和所有应用、修改和变化。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献