利用了数据段的相似度的高效数据存储的制作方法

文档序号:6375451阅读:118来源:国知局
专利名称:利用了数据段的相似度的高效数据存储的制作方法
利用了数据段的相似度的高效数据存储
背景技术
一种高效地存储数据的方法是防止对于在备份之间保持不变的数据的冗余拷贝。这种高效的存储是通过把来自各数据源的数据流分成段(segment)并且把所述段以及所述段的标识符的索引存储在存储设备上来实现的。在后续的备份操作期间,再次对所述数据流进行分段,并且在所述索引中查找所述段以便确定某一数据段先前是否已被存储过。如果找到完全相同的段,则不再存储该数据段;否则就存储所述新的数据段和新的索引标识符。遗憾的是,随着将要备份的数据量的增加,所述段的数目(如果所述段的尺寸近似的话)以及所述索引条目的数目也会增加。所述段和索引条目的数目的增加会导致存取性能的降低对于写入,必须把到来的段索引与所述索引中的所有条目进行比较;以及对于读取,必须从较大数目的段当中检索与某一文件相关联的段。如果增大所述段的尺寸,则会减少所述段的数目,从而所述索引条目的数目也会减少,性能也可以得到保持;然而,由于出现较长的完全相同的段的几率没有那么高,因此存储效率会降低。如果可以在不牺牲存储效率的情况下保持存取性能,则将是有益的。附图简述在下面的详细描述和附图中公开了本发明的各种实施例。

图1是示出利用数据段的相似度进行高效存储的系统的一个实施例的方框图。图2是示出利用数据段的相似度进行高效存储的处理的一个实施例的方框图。图3是示出写入期间的内容存储过程的一个实施例的流程图。图4是示出用于生成逻辑段以及计算概要特征集合的过程的一个实施例的流程图。图5是示出读取期间的内容存储过程的一个实施例的流程图。图6是示出写入期间的段存储过程的一个实施例的流程图。图7是示出相似度确定过程的一个实施例的流程图。图8是示出针对读取的段存储过程的一个实施例的流程图。详细描述可以按照多种方式来实施本发明,其中包括把本发明实施为一种过程、设备、系统、物质构成、计算机可读介质(比如计算机可读存储介质)或者计算机网络(其中通过光学或电子通信链路来发送程序指令)。在本说明书中,这些实施方式或者本发明所能采取的任何其他形式都可以被称作技术。诸如被描述为被配置成执行任务的处理器或存储器之类的组件包括通用组件或专用组件,其中所述通用组件在给定时间被临时配置成执行所述任务,而所述专用组件是为了执行所述任务而被制造的。一般来说,在本发明的范围内可以改变所公开的过程的各步骤的顺序。在下面连同附图一起提供对本发明的一个或多个实施例的详细描述,所述附图示出本发明的原理。下面将结合所述实施例来描述本发明,但是本发明不限于任何实施例。本发明的范围仅仅由权利要求书来限定,并且本发明包含许多替换方案、修改和等效方案。为了提供对于本发明的透彻理解,在下面的描述中阐述了许多具体细节。提供这些细节是出于举例的目的,并且可以在没有一些或全部所述具体细节的情况下根据权利要求书来实践本发明。为了清楚起见没有描述本发明的相关技术领域内已知的技术材料,以免不必要地模糊本发明。公开了利用数据段的相似度来进行高效的存储。确定一个新段与一个先前存储的段相似,其中所述先前存储的段包括来自某一输入数据流中的任何位置的一个先前存储的段。至少部分地基于增量来存储所述新段的表示。存储增量会提高存储效率,尤其是在其中各段与先前存储的段相比可能具有小的改变的情况下,这是因为与存储新段相比,存储小的增量更为高效。通过把第一段的概要特征集合与第二段的概要特征集合进行比较来确定相似度。在一些实施例中,所述第一段是从某一输入数据流到达的段,而所述第二段是来自某一输入数据流的先前已被存储在备份存储系统中的任何段。在一些实施例中,所述第一段与第一输入数据流相关联,而所述第二段与第二输入数据流相关联。在一些实施例中,所述相似度包括第一段与第二段之间的逐字节相似性的度量。通过以下操作来确定概要特征集合选择第一段的多个固定长度或可变长度的子段;对于每一个子段,通过对于每一个子段应用一组函数来计算多个值;以及从对于所有所述子段所计算的所有所述值当中选择第一值子集。在一些实施例中,所述第一值子集被用于确定所述第一段与第二段之间的相似度。在一些实施例中,在相似度压缩的情况下(利用相似度高效地存储数据段),在内容存储中的处理期间把用户写入流(其对应于整个文件或者某一文件的地址范围或者用于写入的连续数据的地址范围)分解成各逻辑段。把所述逻辑段发送到段存储以供压缩及存储。内容存储还接收具有段描述符的形式的段存储反馈,其中的每一个所述描述符描述某一逻辑段在段存储中如何被压缩及表示。内容存储保持所述地址范围与其相应的从段存储返回的逻辑段和段描述符之间的映射。内容存储负责进行以下操作映射地址范围与其相应的逻辑段和段描述符;把对应于用户读取流(其对应于整个文件或者某一文件的地址范围或者用于读取的连续数据的地址范围)的段描述符递送到段存储;以及接收对应于逻辑段的数据。在相似度压缩情况下的内容存储的行为在很大程度上类似于在身份(identity)压缩下的情况。在一些实施例中,在段存储中把各段表示为多个物理段的复合。更为精确地说,每一个逻辑段被表示为一个基础和一系列等级越来越高(或者说尺寸越来越小)的增量,其中每一个基础或增量是一个完整物理段或者是某一物理段的一部分。基础直接对应于内容存储中的逻辑段,并且被标记为d0。一级增量是两个(不同的)逻辑段之间的差异,并且被标记为dl。二级增量是两个(不同的)dl之间的差异,并且被标记为d2。在各种实施例中,相似度压缩使用一级增量编码或者二级增量编码。在一级增量编码中,段存储把每一个逻辑段表示为可以被共享的d0与不能被共享的可选的dl的复合;在二级增量编码中,段存储把每一个逻辑段表示为可以被共享的d0、可以被共享的可选的dl、以及与不能被共享的可选的d2的复合。如果某一逻辑段被表示为d0,则将其标记为eO ;如果某一逻辑段的相应的最高级增量是dl,则将其标记为el ;如果某一逻辑段的相应的最高级增量是d2,则将其标记为e2。身份压缩可以被视为零级增量编码,其中段存储把每一个逻辑段表示为可以被共享的d0。在按照其压缩形式来存储所述输入数据流时(例如在存储来自所述输入数据流的某一新段时)没有信息损失。
在一些实施例中,在二级增量编码中,d0较大,d2较小,而dl是至为重要的,例如,d0是lMB,d2是10KB,以及dl是100KB。二级增量编码平衡对于更激进的压缩的需求(不仅在各逻辑段当中共享较大的d0,而且也共享显著的dl差异)与对于更高性能和可伸缩性的需求(在各逻辑段当中不共享较小的d2差异,并且不对其进行各种处理和维护)。为了便于在二级增量编码中检测到可共享的各dl,所施加的附加约束是dl关于el是一对一的(这意味着对应于dl的段标识符可以与对应于el的段标识符互换)。这样允许在系统中对新逻辑段与先前的eO和el之间的相似度进行比较而无需担心物理段,其中所述系统使用逻辑段等级上的被称作概要特征集合或概略(sketch)的概要技术。在检测出所述相似度之后,把所述新逻辑段编码为相应的各物理段的复合,其或者是可共享的d0,或者是可共享的d0加上可共享的dl加上可选的不可共享的d2。在一些实施例中,可以在被称作增量组合的过程中在段存储中把多个dl和d2组合到单个物理段中。增量组合减小了把段标识符映射到其实际存储容器的位置索引的尺寸,并且使得段存储中的本地压缩更为有效。特别有意义的是在一级增量编码中组合相同的逻辑流的dl,或者在二级增量编码中组合相同的逻辑流的d2,这是因为它们不被共享,并且在从所述系统中删除相应的文件时一起消失。如果在段存储中执行增量组合,那么从段存储返回到内容存储的段描述符应当规定每一个dl或d2在所述组合段中的起始和结束位置,从而使得读取操作和其他操作可以适当地辨识所述组合段中的特定dl或d2。图1是示出利用数据段的相似度进行高效存储的系统的一个实施例的方框图。在所示出的例子中,本地恢复器系统100在没有信息损失的情况下把信息存储在输入数据流中,从而允许在原先存储在客户端系统上的数据不再可用的情况下恢复所述数据。信息被存储在本地恢复器系统100的内部存储设备104或外部存储设备106上。在各种实施例中,内部存储设备104包括一个或多个存储设备,以及/或者外部存储设备106包括一个或多个存储设备。本地恢复器100与远程恢复器102进行通信。远程恢复器102存储被存储在本地恢复器系统100上的信息的拷贝,从而允许恢复原先存储在客户端系统上的数据。在各种实施例中,本地恢复器100利用专用通信链路、一个或多个网络、局域网、广域网、存储区域网络、因特网、有线网络和/或无线网络与远程恢复器102通信。本地恢复器系统100还利用网络120与多个具有存储装置的客户端系统(其在图1中由具有存储装置的客户端系统110和112表示)通信。本地恢复器系统100还利用网络120与媒体/备份服务器108通信。在各种实施例中,网络120包括一个或多个网络、局域网、广域网、存储区域网络、因特网、有线网络和/或无线网络。媒体/备份服务器108利用网络118与多个具有存储装置的客户端系统(其在图1中由具有存储装置的客户端系统114和116表示)通信。在各种实施例中,网络118包括一个或多个网络、局域网、广域网、存储区域网络、因特网、有线网络和/或无线网络。在一些实施例中,媒体/备份服务器108把数据备份在具有存储装置的客户端系统上,所述数据备份又被备份到本地恢复器系统 100。图2是示出利用数据段的相似度进行高效存储的处理的一个实施例的方框图。在一些实施例中,诸如图1的本地恢复器系统100之类的恢复器系统处理来自各客户端系统的数据,以便高效地存储信息以及从所存储的信息中恢复数据。在所示出的例子中,为了把数据写入到存储装置,把源自一个或多个客户端系统的线性字节数据流输入到输入/输出处理模块200中。把数据流传递到内容存储202。内容存储202执行以下操作生成逻辑段、将其递送到段存储204以供压缩及存储、等待返回段描述符、以及保持从数据地址信息到其相应的逻辑段和段描述符的映射。段存储204执行以下操作接收来自内容存储202的逻辑段、执行相似度压缩以便产生物理段、把物理段本地压缩及打包到容器中、把结果发送到容器存储206以供存储、以及把段描述符返回内容存储202。容器存储206把所述容器存储在硬盘驱动器、硬盘驱动器阵列、网络附属驱动器或阵列、和/或RAID系统中。为了从存储装置中读取数据,在输入/输出200处接收到针对读取数据的请求。把所述请求发送到内容存储202,以便确定允许读取所请求的数据所需的相关的段描述符。内容存储202执行以下操作把段描述符递送到段存储204以便获得所述段以及解压缩、等待返回段数据、以及把相关的数据返回到输入/输出200。段存储204执行以下操作接收来自内容存储202的段描述符、请求从容器存储206进行物理段读取、对物理段进行本地压缩、基于所述物理段组成逻辑段、以及把段数据返回到内容存储202。在各种实施例中,从硬盘驱动器、硬盘驱动器阵列、网络附属驱动器或阵列、和/或RAID系统进行物理段读取。图3是示出写入期间的内容存储过程的一个实施例的流程图。在一些实施例中,图3的内容存储写入过程被实施在图2的内容存储202中。在所示出的例子中,在300中,从输入/输出块接收数据和相关联的地址信息。例如,从所述输入/输出块接收一个包括特定文件、特定偏移量和特定长度的元组。在302中,生成逻辑段并且计算概要特征集合。逻辑段生成也被称作锚定,其从输入数据流生成可变尺寸的依赖于内容但是独立于地址的逻辑段。在一些实施例中,通过以下操作来实现锚定沿着所述输入数据流对移动窗进行散列,并且当所述散列等于特定值时,把所述输入数据流中的与所述窗具有固定关系的某一位置定义为段边界。所述段概要特征集合计算包括对于每一个逻辑段生成多个特征,从而使得足够相似的逻辑段有可能具有一个或多个匹配特征,并且更高的相似度往往会生成更多匹配特征。在304中,把各逻辑段及其所计算出的概要特征集合发送到段存储。在306中,接收回对应于所述逻辑段的段描述符。在308中,保持从数据地址信息到相应的逻辑段和段描述符的映射。该映射在内容存储读取过程期间被使用。图4是示出用于生成逻辑段以及计算概要特征集合的过程的一个实施例的流程图。在一些实施例中,概要特征集合被用来表征所述段以及能够确定段之间的相似度。在一些实施例中,图4的过程被用来实施图3的302。在所示出的例子中,在400中,通过锚定生成各逻辑段。所述锚定是基于某种标准来定位段边界的过程。在一些实施例中,所述锚定标准包括令所述数据流的一部分的散列等于某一值。在402中,从所述段中采样可变长度子段或小段(shingle)。小段是所述段的固定长度子段。选择可变长度子段或小段是基于某种标准,其中所述标准至少部分地是基于来自所述段的值。在各种实施例中,选择多个固定长度或可变长度的子段至少部分地是基于对应于所述段中的一些字节的具有固定尺寸的第一游动窗中的各字节的加权和。在一些实施例中,通过对于所述段中的所有字节在逐字节的基础上计算具有固定尺寸(可能不同于小段尺寸)的游动窗内的各字节的(加权)和来确定小段采样。对于某一小段来说,如果所述游动窗内的各字节的(加权)和满足特定标准(例如所述加权和的最末的6或7个比特都是I)则采样该小段。与所述满足标准的窗口位置具有固定关系的位置可以被用作所述小段样本的起始位置。
在一些实施例中,通过对于所述段中的所有字节在逐字节的基础上计算具有固定尺寸的游动窗内的各字节的(加权)和来确定可变长度子段采样。对于某一可变长度子段来说,如果所述游动窗内的各字节的(加权)和满足特定标准(例如所述加权和的最末的6或7个比特都是I)则采样该可变长度子段。与所述满足标准的窗口位置具有固定关系的位置可以被用作所述可变长度子段样本的起始位置。在一些实施例中,可以在窗口尺寸、力口权公式、满足标准以及与满足标准的窗口位置的固定偏移量的各种组合下利用与确定所述起始位置相同的游动窗机制来确定所述可变长度子段的结束位置。在一些实施例中,相同的游动窗以及(加权)和来确定可变长度子段样本的起始位置和结束位置。在404中,针对所述可变长度子段或小段样本来计算一类函数。在一些实施例中,所述函数类或集合包括一组线性函数。在一些实施例中,所述函数集合包括mkxk+ak,其中mk和ak对于k = I到n是不同的预定值,并且其中Xk包括所述可变长度子段或小段样本的函数。在一些实施例中,所述函数集合或类包括mkx+ak,其中通过对于k = I到n具有对应于mk和ak的不同值来规定所述函数类,并且X是所述可变长度子段或小段样本的函数(例如某一子段或小段样本的散列、某一子段或小段样本内的各字节的和等等)。在各种实施例中,所述函数类是提供一定程度的正交性的任何函数系列。在各种实施例中,所述可变长度子段或小段样本的函数包括SHA-1 (安全散列算法I)、MD5 (消息摘要算法5)、RIPEMD-160(RACE完整性原语评估消息摘要160比特版本)、Rabin散列、或者任何其他适当的散列函数。在406中,选择函数结果的子集。在一些实施例中,所述函数结果或值的子集(第一子集)被用于确定第一段与第二段之间的相似度。在一些实施例中,选择所述函数结果的多个极值,例如选择其中6个最低值(最小值)。在各种实施例中,所述极值包括最小值、最大值或者最小与最大值。在一些实施例中,所述函数结果的子集被传递到408以便进行处理。在其他实施例中,通过散列到函数结果的另一个子集来进一步处理对应于所述函数结果的子集的底层可变长度子段或小段样本。在一些实施例中,所述函数结果的该另一个子集(第二子集)被用于确定第一段与第二段之间的相似度。在408中,针对所述段组成所述结果的集合。所述集合是概要特征集合,并且该集合的每一个值是一个特征。概略是具有固定数目的特征的概要特征集合,并且应当针对任何一对逻辑段之间的相似度比较在逐特征的基础上匹配其相应的特征值。在一些实施例中,按照预定的顺序组成所述函数结果的最小值(例如第一函数的最小值到所述函数集合中的最后一个函数的最小值),以便产生某一概略内的各特征。在一些实施例中,由多个特征(其中的每一个由6个最小值组成)形成一个段概略。在一些实施例中,至少部分地基于所述函数结果的第一子集来组成该结果集合(第三子集)。在一些实施例中,所组成的函数结果或值的该子集(第三子集)被用于确定第一段与第二段之间的相似度。在一些实施例中,组成该第三值子集的顺序是预先确定的,并且独立于所述第一子集中的值。在一些实施例中,至少部分地基于所述结果的第二子集来组成第四结果子集(通过如上所述的散列产生)。在一些实施例中,所组成的函数结果或值的该子集(第四子集)被用于确定第一段与第二段之间的相似度。在一些实施例中,组成所述第四值子集的顺序是预先确定的,并且独立于所述第二子集中的值。在一些实施例中,通过执行以下操作来确定概要特征集合(a)选择第一段的m个子段;(b)选择n个函数;(c)对于函数i (其中i是从I到n的一个值),⑴计算m个值fi (子段j),其中j是从I到m的一个值,以及(ii)从所述m个值当中选择第i个极值,其中包括最小值或最大值;以及(d)从所述n个极值当中选择第一值子集。图5是示出读取期间的内容存储过程的一个实施例的流程图。在一些实施例中,图5的内容存储读取过程被实施在图2的内容存储202中。在所示出的例子中,在500中,从所述输入/输出块接收地址信息。所述地址信息对应于要在距离某一文件的特定偏移量处读取特定长度的数据的请求。在501中,把所述地址信息映射到相关的逻辑段和相应的段描述符。在502中,把段描述符发到段存储。在504中,接收回相应的逻辑段数据。在506中,把由所述地址信息的范围所覆盖的相关数据传送到所述输入/输出块。图6是示出写入期间的段存储过程的一个实施例的流程图。在一些实施例中,图6的段存储写入过程被实施在图2的段存储204中。在所示出的例子中,在600中确定相似度。利用所述段概要特征集合或者所述段概略的匹配来找到最接近当前段的先前存储的eO或el。在602中确定是否存在匹配。如果不存在匹配,则控制转到610。如果存在匹配,则在604中从存储装置检索所述最接近的eO和el。所述检索过程包括对于一级增量编码重建最相似的eO以及对于二级增量编码重建最相似的eO或el。eO在段存储中被存储为d0,而el被存储为d0加dl。因此,所述检索过程涉及在一级增量编码中读取一个物理段,以及在二级增量编码中读取一个或两个物理段。所有的物理段都按照本地压缩的形式被存储在段存储中。如果仅仅读取了一个物理段,则将对其进行本地解压缩以便形成所述eO ;如果读取了两个物理段,则将对它们进行本地解压缩并且在增量解码中将它们组成所述el。只有当所述最相似的eO/el在二级增量编码的情况下是el时才应用增量解码。所述解码是从所述底层d0和dl组成el的过程。在606中,从所述最接近的eO和el对所述新段进行增量编码。增量编码是生成到来的逻辑段与现有的eO或el之间的差异的过程。如果所述新段是新的el,则所述增量编码是生成新段与(从604生成的)所述最相似的eO之间的差异dl的过程。如果新段是一个e2,则所述增量编码是生成所述新段与(从604生成的)所述最相似的eO/el之间的d2的过程。在一些实施例中,进行检查以便确保所述新段与所述最接近的eO和el之间的差异较小。由于所述段概要特征集合或段概略比较仅仅给出概率性的相似(或不相似)证据,因此可以在所述新段与其最相似的逻辑段(eO或el)之间的增量编码之后执行尺寸比值测试,以便确定所述新段及其最相似的段的角色被正确分类。如果所述增量尺寸与所述新段尺寸的函数的比值、与所述最接近的eO/el尺寸的函数的比值、或者全部二者超出一个预先规定的阈值(例如三分之一),则应当将所述新段作为新的eO而不管其先前分类如何。在二级增量编码的情况下,如果所述增量尺寸与所述新段尺寸的函数的比值、与所述最接近的eO/el尺寸的函数的比值、或者全部二者小于一个预先规定的阈值(例如二十分之一),那么如果所述新段的先前分类是新的el,则应当将其作为新的e2。在608中,在期望的情况下组合段与增量。可以把从相同逻辑流的不同逻辑段产生的多个dl或d2组合到单个物理段中。可以把所述增量组合视为一个尺寸标准化过程,从而使得平均物理段尺寸至少是某一特定尺寸(例如100K或更大)。这应当会给出良好的本地压缩结果,即使在增量编码的情况下也是如此。更重要的是,所述增量组合在所述位置索引中生成较少的条目。特别有意义的是组合一级增量编码中的相同逻辑流的各dl,或者组合二级增量编码中的相同逻辑流的各d2,这是因为它们不被共享,并且在相应的文件被移除时一起消失。在一些实施例中,组合二级增量编码中的相同逻辑流的各dl。如果应用了增量组合,则应当进行适当的簿记,从而可以随后在增量分离过程中恢复组合的物理段中的单独差异以供读取;特别地,从段存储返回到内容存储的相关的段描述符应当包括关于如何在增量分离期间从所述组合段恢复对应的差异的信息。不管是否应用了增量组合,从内容存储发送到段存储的每一个逻辑段都应当产生一个从段存储发送回内容存储的段描述符。在增量组合过程中应当保持对应信息,从而使得从段存储返回到内容存储的段描述符的数目和顺序是适当的。在一些实施例中,计算段标识符。所述段标识符计算是为每一个新的物理段分配一个唯一标识符的过程。该标识符作为段描述符的一部分被返回到内容存储,从而可以在将来读取所述物理段。在各种实施例中,所述段标识符包括所述物理段的指纹或者一个顺序生成的数字。在一些实施例中,计算增量标识符。所述增量标识符计算是为每一个新的增量分配一个唯一标识符的过程。该标识符作为段描述符的一部分被返回到内容存储,从而可以在将来读取所述增量。在各种实施例中,所述增量标识符包括所述增量的指纹或者一个顺序生成的数字。在各种实施例中,所述增量包括一级增量、二级增量、或者任何其他适当的增量。在一些实施例中,所述段描述符被传送到内容存储。这是针对从内容存储发送到段存储的每一个逻辑段而把所述段描述符从段存储返回到内容存储的过程。段描述符允许由内容存储从段存储读取逻辑段。每一个段描述符应当包括对应于在所述逻辑段的组成中所涉及的各物理段的所有段标识符;如果任何物理段是从多个差异组合的,则所述段描述符中还应当存在用来找到该物理段内的相关差异的偏移量和尺寸信息。在一些实施例中,期望所述偏移量描述符反馈在相应的物理段已被写入到更为永久性的存储器(例如NVRAM)之后发生,从而在内容存储接收到来自段存储的所述段描述符反馈时,所述逻辑段将经受得住软件崩溃或硬件崩溃。在610中,所述段和增量被本地压缩。本地压缩是仅仅利用新物理段本身内的信息把所述物理段从未压缩形式压缩到本地压缩形式的过程。在各种实施例中,本地压缩算法包括Ziv-Lempel 压缩、Lempel-Ziv(LZ)压缩、Lempel-Ziv-Welch(LZW)压缩、或者任何其他适当的压缩。在612中,所述本地压缩的数据被打包到容器中。容器打包按照本地压缩的形式从新物理段生成包括段和增量的容器。当已经累积了来自相同逻辑流的足够多的新物理段从而近似一个容器的尺寸时,就把所述新物理段打包到一个容器中并且写入到一个容器存储中以供存储到盘上。新的物理段被适当地影子化并且存储在永久性存储器(例如NVRAM)中,以免由于软件崩溃或硬件故障而导致数据丢失,直到把这些物理段通过容器写入到盘上为止。在把容器写入到盘上之后,容器存储通知段存储。段存储可以从永久性存储器(例如NVRAM)中安全地移除所有相关的物理段。另外,与盘容器映射相关的段描述符被添加到所述相似度索引和位置索引中,从而将来的逻辑段可以受益于与先前的eO和el的相似度。图7是示出相似度确定过程的一个实施例的流程图。在一些实施例中,图7的过程实施图6的600。在高等级上,段相似度确定过程找到与新逻辑段最相似的先前逻辑段。所述相似度或者所采样的逐字节相似性表征两个段之间的逐字节匹配的可能性;换句话说,高度相似的段可能逐字节匹配。更精确地说,所述相似度确定过程对于新逻辑段确定以下内容是否存在具有一个或多个匹配特征的先前的eO以及哪一个eO具有最多匹配特征或者处在二级增量编码下,是否存在具有一个或多个匹配特征的先前的el以及哪一个el具有最多匹配特征。如果上述两个问题的答案都是否定的,则所述新逻辑段就是一个新的eO。否则,所述具有最多匹配特征的eO或el (在二级增量编码的情况下)将被用于对所述新逻辑段进行增量编码。取决于所述增量的大小,所述新逻辑段是一级增量编码情况下的冗余eO或el,二级增量编码情况下的冗余eO、冗余el、e2或新的el。新的eO或el (仅仅在二级增量编码的情况下)可以被用于对将来的逻辑段进行增量编码。在一些实施例中,保持存储器内相似度索引以便执行段相似度确定。所有新的eO (以及在二级增量编码情况下的el)都被输入到该索引中。该索引由多个特征子索引组成,其中的每一个所述特征子索引对应于一个特征,并且对于该特征表明是否存在特定值以及哪些eO和el具有该值。在图7所示出的例子中,所述先前存储的先前的eO (或el)潜在地是与所述输入逻辑段最紧密地匹配的段,并且在开始时被初始化到Nil。在700中,确定是否存在具有至少一个与所述输入段匹配的特征的更多先前的eO (或el),同时尝试定位最紧密的匹配。如 果没有更多的这种先前的eO (或el),则所述过程结束。如果存在更多的这种先前的eO (或el),则在701中选择具有至少一个匹配特征的下一个先前的eO (或el),并且控制转到702。在702中,确定所述先前的eO(或el)是否在所述概要特征集合或概略中具有最多的与所述输入段匹配的特征。如果所述先前的eO (或el)在所述概要特征集合或概略中具有最多的与所述输入段匹配的特征,这将表明该先前的eO (或el)本身可能与所述输入段最紧密地匹配。如果所述先前的eO (或el)不具有最多匹配特征,则控制转到700。如果所述先前的eO (或el)确实具有最多匹配特征,则在704中将其保存为潜在的最紧密匹配,并且在706中也保存相应的的概要特征集合或概略,并且控制转到700。在一些实施例中,对于每一个新段ns,通过下面的特征测试进行相似度确定 对于每一个特征k,确定以相同的特征值与ns匹配的相似度索引中的eO和el的集合S[k],其中,SM中的每一个元素具有〈S,1>的形式,S是段标识符;如果没有基础匹配,则S[k]为空。 把对应于所有特征{k}的S[k]合并到单个集合S中,其中的每一个元素具有〈S,c>的形式,s是段标识符,c是该s与ns匹配的特征值的计数。如果没有基础匹配,则S为空。 如果S为空,则没有eO或el与ns相似,并且应当把ns作为新的eO。 否则,在S中找到其c最大的〈S,C〉。为了打破具有相同的c的平局,使用具有最近的S的〈S, C〉。 对于一级增量编码,返回s以作为最相似,并且把ns编码为s加dl。注意,s在一级增量编码情况下总是e0,并且如果ns是s的复制,则dl将为空。 否则,(对于二级增量编码)如果来自上一步的c超出一个预定阈值e2_feature (其用于确保可以把ns增量编码为s加d2),则返回s以作为最相似,并且把ns编码为s加d2。注意,s可以是eO或el,并且如果ns是s的复制,则d2为空。 否则,在S中找到其s为eO并且其c最大的〈S, C〉。为了打破具有相同的c的平局,使用具有最近的eO的〈S,C〉。
如果不存在这种<s, c>或者c小于一个预定阈值eO_feature (其默认地是I),则没有eO或el与ns足够相似,并且应当把ns作为新的eO。 否则,返回s以作为最相似,并且应当把ns作为新的el。图8是示出针对读取的段存储过程的一个实施例的流程图。在一些实施例中,图8的过程被实施在图2的段存储204中。在一些实施例中,图8的过程被实施在图6的604中。在所示出的例子中,在800中,按照本地压缩的形式读出对应于段描述符的数据(在一级增量编码的情况下是d0、可选的dl,或者在二级增量编码的情况下是d0、可选的dl、可选的d2)。在802中,对所述本地压缩的数据进行本地解压缩。所述本地解压缩的过程是把在800中读取的所述本地压缩的物理段形式转换成未压缩形式。本地解压缩是图6的610中的本地压缩的反转。在804中,如果需要的话则执行增量分离。只有在相应的差异被包括在某一组合的物理段中时才执行该步骤。增量组合在写入期间把多个差异组合到单个物理段中。特别地,可以组合一级增量编码中的相同逻辑流的各dl,并且可以组合二级增量编码 中的相同逻辑流的各d2。增量分离是在读取期间从已经本地解压缩的组合段中获得单独差异(不管其是dl还是d2)的逆过程。在806中,如果需要的话对所述数据进行增量解码。只有在涉及dl或d2的情况下才应用该步骤。它是从底层的d0和dl组成el、从底层的d0和d2组成e2、或者从底层的d0、dl和d2组成e2的过程。有可能彼此接连地读出某一组合段中的所有单独差异以用于进行读取。有意义的是具有一个未压缩组合段高速缓存,从而把与所述组合段相关联的所有处理成本(在800和802中)分摊到所述组合段中的所有差异而不是所述组合段中的仅仅一个差异。虽然出于理解清楚的目的描述了前面的实施例的一些细节,但是本发明并不限于所提供的细节。可以有实施本发明的许多替换方式。所公开的实施例是说明性的而非限制性的。
权利要求
1.一种利用数据段的相似度进行存储的系统,包括用于确定新段是否相似于先前存储的段的部件,其中相似度包括第一段与第二段之间的逐字节相似性的度量,其中所述先前存储的段包括多个在先存储的段中的段,所述多个在先存储的段通过使用锚定将输入数据流打破为段而生成,其中所述锚定从所述输入数据流生成可变尺寸的依赖于内容但是独立于地址的段;用于在所述新段相似于所述先前存储的段时确定所述新段与所述先前存储的段之间的差异的部件 '及用于在所述新段相似于所述先前存储的段时至少部分基于所述差异和至少部分基于基础而存储所述新段的表示的部件。
2.如权利要求1所述的系统,其中,确定相似度包括把所述新段的概要特征集合与所述先前存储的段的概要特征集合进行比较。
3.如权利要求1所述的系统,还包括用于在所述新段与所述先前存储的段不相似时存储所述新段的部件。
4.如权利要求1所述的系统,其中,存储所述新段的所述表示包括存储所述差异和所述先前存储的段的指示。
5.如权利要求1所述的系统,其中,在增量大于预定阈值时存储所述新段的所述表示包括存储所述新段。
6.如权利要求1所述的系统,其中,存储所述新段的所述表示包括存储所述差异与第二差异的组合。
7.如权利要求1所述的系统,其中,存储所述新段的所述表示包括对所述新段进行本地压缩。
8.如权利要求1所述的系统,其中,存储所述新段的所述表示包括对所述差异进行本地压缩。
9.如权利要求1所述的系统,其中,对于所述新段计算标识符。
10.如权利要求9所述的系统,其中,所述标识符包括指纹。
11.如权利要求9所述的系统,其中,所述标识符包括顺序生成的数字。
12.如权利要求1所述的系统,其中,对于所述差异计算标识符。
13.如权利要求12所述的系统,其中,所述标识符包括指纹。
14.如权利要求12所述的系统,其中,所述标识符包括顺序生成的数字。
15.如权利要求1所述的系统,其中,存储所述新段的所述表示包括把所述新段的所述表示存储在备份存储系统中。
16.如权利要求1所述的系统,其中,所述新段与第一输入数据流相关联,以及所述先前存储的段与第二输入数据流相关联。
17.如权利要求1所述的系统,其中,通过把第一段的概要特征集合与第二段的概要特征集合进行比较而确定相似度。
18.如权利要求17所述的系统,其中,所述概要特征集合通过以下来确定选择第一段的多个子段;通过将一组函数应用到各子段来为各子段计算多个值;及从为所有子段计算的所有值中选择第一值子集。
19.一种利用数据段的相似度进行存储的方法,包括确定新段是否相似于先前存储的段,其中相似度包括第一段与第二段之间的逐字节相似性的度量,其中所述先前存储的段包括多个在先存储的段中的段,所述多个在先存储的段通过使用锚定将输入数据流打破为段而生成,其中所述锚定从所述输入数据流生成可变尺寸的依赖于内容但是独立于地址的段;在所述新段相似于所述先前存储的段时确定所述新段与所述先前存储的段之间的差异 '及在所述新段相似于所述先前存储的段时至少部分基于所述差异和至少部分基于基础而存储所述新段的表示。
20.一种利用数据段的相似度进行存储的计算机程序产品,所述计算机程序产品包含在计算机可读介质中且包括计算机指令用于确定新段是否相似于先前存储的段,其中相似度包括第一段与第二段之间的逐字节相似性的度量,其中所述先前存储的段包括多个在先存储的段中的段,所述多个在先存储的段通过使用锚定将输入数据流打破为段而生成,其中所述锚定从所述输入数据流生成可变尺寸的依赖于内容但是独立于地址的段;在所述新段相似于所述先前存储的段时确定所述新段与所述先前存储的段之间的差异 '及在所述新段相似于所述先前存储的段时至少部分基于所述差异和至少部分基于基础而存储所述新段的表示。
全文摘要
本发明利用了数据段的相似度的高效数据存储,其公开了利用数据段的相似度进行存储。确定新段与先前存储的段相似。所述先前存储的段包括来自输入数据流中的任何位置的先前存储的段。确定所述新段与所述先前存储的段之间的增量。至少部分地基于所述增量来存储所述新段的表示。
文档编号G06F17/30GK102999543SQ20121029954
公开日2013年3月27日 申请日期2007年4月11日 优先权日2006年4月11日
发明者K.李, M.B.朱, U.马赫什沃里, Z.杨 申请人:Emc 公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1