用于去重复的段组合的制作方法

文档序号:6498565阅读:191来源:国知局
用于去重复的段组合的制作方法
【专利摘要】一种非暂时性计算机可读存储设备包括指令,所述指令在被执行时使一个或多个处理器接收散列的序列。接下来,进一步使一个或多个处理器确定对应于散列的数据组块的子集的先前存储的副本的位置。进一步使一个或多个处理器部分地基于确定的信息将散列和对应数据组块成组为段。使一个或多个处理器对于每个段选取要针对其去重复该段的储存器。最后,进一步使一个或多个处理器组合被选取成要针对相同储存器去重复的两个或更多段并且使用第二索引作为整体去重复它们。
【专利说明】用于去重复的段组合

【背景技术】
[0001 ] 管理员需要高效管理文件服务器和文件服务器资源,同时保持网络受保护以防未经授权的用户而仍对经授权的用户来说可访问。将文件存储在服务器上而不是本地存储在用户的计算机上的实践已经造成相同数据存储在相同系统中多于一次以及甚至在相同服务器上多于一次。
[0002]去重复(deduplicat1n)是用于消除冗余数据、改善存储利用率和减小网络业务量的技术。基于存储的数据去重复用于检查大容量的数据并标识相同的整个文件或文件的大章节,以便减少相同数据被存储的次数。例如,电子邮件系统可以包含相同的一兆字节文件附件的100个实例。每当电子邮件系统被备份时,都存储附件的100个实例中的每一个,这要求100兆字节的存储空间。利用数据去重复,仅存储附件的一个实例,因此节省99兆字节的存储空间。
[0003]类似地,去重复可以在小得多的规模上实践,例如在千字节的量级上。

【专利附图】

【附图说明】
[0004]为了详细描述本发明的示例性实施例,现在将对附图做出参考,在附图中:
图1A图示了用于段组合的逻辑系统;
图1B图示了用于段组合的硬件系统;
图2图示了用于段组合的方法;以及图3图示了用于段组合的存储设备。
[0005]标记法和命名法
遍及以下描述和权利要求使用某些术语来指代特定系统组件。如本领域技术人员将领会的,计算机公司可以以不同的名称指代组件。本文档不旨在在以名称而不是功能不同的组件之间进行区分。在以下讨论中以及在权利要求中,术语“包含”和“包括”以开放式方式被使用,且因此应当被解释成意指“包括,但不限于……”。而且,术语“耦合”旨在意指间接、直接、光学或无线电气连接。因此,如果第一设备耦合到第二设备,则该连接可以是通过直接电气连接、通过经由其它设备和连接的间接电气连接、通过光学电气连接、通过无线电气连接等等。
[0006]如本文所使用的,术语“组块”是指使用组块化算法产生的数据流的连续子集。
[0007]如本文所使用的,术语“段”是指使用分段算法产生的连续组块的群组。
[0008]如本文所使用的,术语“散列”是指使用散列函数创建的组块的标识。
[0009]如本文所使用的,术语“去重复”是指在存储系统中或在存储节点处逻辑存储组块、段或数据的其它划分以使得在该系统或节点处存在每个唯一组块的仅一个物理副本(或者,在一些情况下,几个副本)的动作。例如,针对初始为空的存储节点去重复ABC、DBC和EBF (其中每个字母表示唯一组块)导致B的仅一个物理副本但是三个逻辑副本。具体地,如果针对存储位置去重复组块并且组块先前未被存储在存储位置处,则将组块物理存储在存储位置处。然而,如果针对存储位置去重复组块并且组块已经被存储在存储位置处,则不再次在存储位置处物理存储组块。在又一示例中,如果针对存储位置去重复多个组块并且组块中的仅一些已经被存储在存储位置处,则在去重复期间在存储位置处存储仅先前未被存储在存储位置处的组块。

【具体实施方式】
[0010]以下讨论涉及本发明的各种实施例。尽管这些实施例中的一个或多个可以是优选的,但是所公开的实施例不应当被解释为或以其它方式用作限制包括权利要求在内的本公开的范围。此外,本领域技术人员将理解,以下描述具有宽泛的应用,并且任何实施例的讨论仅仅意在例证该实施例,而不旨在暗示包括权利要求在内的本公开的范围受限于该实施例。
[0011]在基于组块的去重复期间,唯一的数据组块每一个都被物理存储一次,不论可能存在多少它们的逻辑副本。所接收的后续组块可以与所存储的组块比较,并且如果比较得到匹配,则匹配的组块不再次被物理存储。取而代之,匹配的组块可以被指向组块的单个物理副本的引用替代。访问引用的过程可以被重定向到所存储的组块的单个物理实例。以该方式使用引用导致存储节约。因为可以遍及系统多次出现相同组块,所以必须被存储在系统中或通过网络传送的数据量减少。
[0012]图1A图示了用于段组合的逻辑系统100。在去重复期间,可以在前端上或者在客户端199上实时创建组块的散列,所述前端与一个或多个去重复后端通信。例如,与可以是去重复后端节点116、120、122的一个或多个后端通信的前端118。在各种实施例中,前端和后端还包括其它计算设备或系统。数据组块是使用可基于大小或逻辑文件边界的组块化算法产生的数据流的连续子集。每个数据组块可以被输入到可用密码写的散列函数;例如MD5或SHA1。在图1A的示例中,组块I1, I2, I3和I4分别导致散列A613F……,32B11……,4C23D……和35DFA……。在至少一些实施例中,每个组块可以近似是4千字节左右,并且每个散列可以近似是16到20字节。
[0013]取代为了去重复目的而比较组块,可以比较组块的散列。具体地,如果使用相同的散列化算法,则相同组块将产生相同的散列。因此,如果两个组块的散列相等,并且已经存储了一个组块,则另一组块无需被再次物理存储;这节省了存储空间。同样,如果散列相等,则基础组块自身可以被比较以核实重复,或者可以假设重复。此外,系统100可以包括一个或多个后端节点116、120、122。在至少一个实施方式中,不同后端节点116、120、122通常不存储相同组块。这样,节省了存储空间,因为相同组块未被存储在后端节点116、120、122之间,但是段(组块的群组)必须被路由到正确的后端节点116、120、122以被有效地去重复。
[0014]比较组块的散列可以被执行得比比较组块自身更加高效,特别是在使用索引和过滤器时。为了有助于比较过程,可以使用索引105和/或过滤器107来确定哪些组块被存储在后端节点116、120、122上的哪些存储位置106中。在至少一个实施方式中,索引105和/或过滤器107可以驻留在后端节点116、120、122上。在其它实施方式中,索引105和/或过滤器107可以以任何组合分布在前端节点118和/或后端节点116、120、122当中。此夕卜,每个后端节点116、120、122可以具有分离的索引105和/或过滤器107,因为不同数据被存储在每个后端节点116、120、122上。
[0015]在一些实施方式中,索引105包括将存储在该后端节点上的组块的散列(可能间接地)映射到包含那些组块的存储位置的数据结构。该数据结构可以是散列表。对于非稀疏索引,针对每一个所存储的组块创建条目。对于稀疏索引,针对存储在该后端节点上的组块的散列的仅有限一小部分创建条目。在至少一个实施例中,稀疏索引平均仅对每64个组块中的一个编索引。
[0016]在至少一个实施例中,过滤器107可以存在和被实现为布隆(Bloom)过滤器。布隆过滤器是用于近似集合成员资格的空间高效数据结构。也就是说,它表示集合,但是所表示的集合可以包含未被显式插入的元素。过滤器107可以表示存储在该后端节点处的组块集合的散列集合。在该实施方式中后端节点可以因此通过确定给定组块的散列是否是其过滤器107的成员来快速确定给定组块是否可能已经存储在该后端节点处。
[0017]在至少一个实施例中,并非在每组块基础上确定要针对哪个后端节点去重复组块(即,要将组块路由到哪个后端节点)。而是,一次一段(组块的连续群组)确定路由。数据组块的输入流可以被分成段,使得每个数据组块确切地属于一个段。图1A图示了组块I1和I2包括段130,并且组块I3和I4包括段132。在其它示例中,段可以包含数千个组块。段可以包括邻近的组块的群组。
[0018]尽管图1A仅示出一个前端118,但是系统可以包含多个前端,每一个前端实现类似的功能性。仅示出其中的一个的客户端199可以在长时间段内与相同的前端118通信。在一个实施方式中,前端118和后端节点116、120、122的功能性被组合在单个节点中。
[0019]图1B图示了系统100的硬件视图。在至少一个实施例中,系统100的组件可以分布在一个或多个网络114之上。具体地,用户可以与⑶I 110交互并通过网络114从管理控制台发射命令和其它信息以供前端节点118和后端节点116处理。显示器104可以是计算机监视器,并且用户可以经由键盘112和指点设备或计算机鼠标(未示出)操纵GUI。网络114可以包括诸如交换机之类的网络元件,并在至少一个实施例中可以是因特网。在至少一个实施例中,前端节点118包括执行散列化算法的处理器102。在另一实施例中,系统100包括多个前端节点。后端节点116包括可访问索引105和/或过滤器107的处理器108,并且处理器108可以耦合到存储位置106。系统100的硬件组件的许多配置和组合是可能的。在至少一个示例中,系统100包括多个后端节点。
[0020]在至少一个示例中,一个或多个客户端199通过所调度的命令而被周期性地备份。虚拟带库(“VLT”)或网络文件系统(“NFS”)协议可以被用作用于备份客户端199的协议。
[0021]图2图示了在202处开始且在214处结束的用于段组合的方法200。在204处,接收散列的序列。例如,序列可以由前端节点118从针对去重复而调度的数据的顺序组块生成。数据的顺序组块可以已经通过对从客户端199接收的数据进行组块化以供去重复而产生在前端节点118上。组块化过程将数据分成数据组块的序列。散列的序列可以进而通过对每个数据组块进行散列化而生成。
[0022]可替换地,组块化和散列化可以由客户端199执行,并且可以仅将散列发送到前端节点118。其它变型是可能的。
[0023]每个散列对应于组块。在至少一个实施例中,所接收的组块的量是平均段长度的三倍。
[0024]在206处,对于序列的子集,确定子集的对应数据组块的先前存储的副本的位置。在一些示例中,子集可以是整个序列。
[0025]在至少一个示例中,针对位置信息而对后端116、120、122做出查询,并且位置可以作为查询的结果而接收。在一个实施方式中,前端节点118可以向后端节点116、120、122广播散列的子集,所述后端节点116、120、122中的每一个然后可以确定其位置106中的哪些包含对应于所发送的散列的数据组块的副本并向前端节点118发送回所得到的位置信肩、O
[0026]对于每个数据组块,可以确定哪些位置已经包含该数据组块的副本。在至少一个示例中可以使用试探法。位置可以与后端节点的群组或集群或者特定后端节点一样通用,或者位置可以与组块容器(例如,存储组块的文件或盘部分)或具体后端节点上的其它特定位置一样专用。所确定的位置可以是组块容器、储存器或存储节点。
[0027]确定位置可以包括:在诸如完整组块索引或稀疏组块索引之类的索引105中搜索散列中的一个或多个,或者进行测试以确定散列中的哪些是诸如布隆过滤器之类的过滤器107的成员。例如,每个后端节点可以针对其布隆过滤器107中的成员资格来测试每个所接收到的散列并且返回指示它具有仅对应于作为其布隆过滤器107的成员的散列的组块的副本的信息。
[0028]所确定的位置可以是后端节点116、120、122的群组、特定的后端节点116、120、122、组块容器、储存器或存储节点。例如,每个后端节点可以向前端节点118返回组块容器标识号码的集合的列表,每个集合关于对应的散列/数据组块,并且组块容器标识号码标识其中存储该数据组块的副本的被存储在该后端节点处的组块容器。这些列表可以在前端节点118上被组合成单个列表,该单个列表针对每个数据组块给出标识包含该数据组块的副本的组块容器的组块容器ID/后端号码对。
[0029]在另一实施例中,所返回的信息仅标识该后端节点具有哪些数据组块的副本。同样,信息可以被组合以产生针对每个数据组块给出包含该数据组块的副本的后端节点的集合的列表。
[0030]在208处,部分地基于所确定的信息将序列的散列和对应数据组块成组为段。具体地,在相同后端处或在相同储存器中具有副本的散列和组块可以被成组。
[0031]可替换地,在一个实施方式中,可以基于位置来确定数据组块的序列中的断点,并且断点可以形成数据组块段的边界。确定断点可以包括部分地基于哪些数据组块在所确定的相同位置中具有副本来确定数据组块的序列中的区域并且基于该区域来确定数据组块的序列中的断点。对于每个区域,可以存在其中具有所确定的位置的数据组块的至少90%具有先前存储的副本的位置。
[0032]可以通过找到最大或最大型的连续子序列以使得每个子序列具有关联的位置并且该子序列中的每个数据组块要么使该位置作为它的确定的位置之一要么不具有确定的位置。然后,可以通过缩短与最大区域重叠的较小区域的部分来调整区域以移除重叠。这可以牵涉丢弃整个被包含在较大区域中的较小区域。
[0033]潜在断点可以处于其余非重叠较大区域中的每一个的开始和结尾处。如果潜在断点处于最小段大小与最大段大小之间,则可以将潜在断点选取为实际断点。如果没有这样的潜在断点存在,则可以使用诸如使用最大段大小或使用不将确定的位置考虑在内的另一分段方法之类的备选方法。
[0034]使用确定的位置将数据组块成组为段的许多其它方式是可能的。
[0035]在210处,对于每个段,部分地基于关于构成该段的数据组块的确定的信息来选取针对其去重复段的储存器。在一个示例中,每个后端节点116、120、122实现单个储存器。在其它示例中,每个后端节点116、120、122可以实现多个储存器,允许在需要时通过在后端节点之间移动储存器进行再平衡。例如,所确定的信息可以包括:对于与散列的子集相关联的每个数据组块,哪些储存器已经包含该数据组块的副本。这样,选取可以包括:针对给定段进行选取,这部分地基于所确定的信息指示的哪些储存器已经具有属于该段的最多数据组块。
[0036]在212处,组合被选取成针对相同储存器去重复的两个或更多段。例如,实现给定储存器的后端可以连结两个或更多段。可以使用第二索引,作为整体去重复组合的段。第二索引可以是稀疏索引或完整组块索引。第二索引可以是第一索引之一。组合两个或更多段可以包括组合预定数目的段。组合还可以包括将段连结在一起直到达到最小大小。
[0037]作为整体去重复意味着:组合的段的数据在单个批中被去重复,而不是在若干批中被去重复或与其它数据成组到(一个或多个)批中。
[0038]以上描述的系统可以被实现在具有足以处置置于计算机上的必要工作负载的处理能力、存储器资源和吞吐量能力的任何特定机器或计算机上。图3图示了适于实现本文所公开的一个或多个示例的特定计算机系统380。计算机系统380包括与存储器设备通信的一个或多个硬件处理器382 (其可以被称为中央处理器单元或CPU),所述存储器设备包括计算机可读存储设备388和输入/输出(I/O) 390设备。该一个或多个处理器可以被实现为一个或多个CPU芯片。
[0039]在各种实施例中,计算机可读存储设备388包括诸如易失性存储器(例如RAM)、非易失性储存器(例如闪存、硬盘驱动器、CD ROM等)或其组合之类的非暂时性存储设备。计算机可读存储设备388可以包括存储由(一个或多个)处理器382执行的软件或指令384的计算机或机器可读介质。本文所描述的一个或多个动作在指令384的执行期间由(一个或多个)处理器382执行。
[0040]以上讨论旨在说明本发明的原理和各种实施例。一旦以上公开内容被完全领会,大量变型和修改对本领域技术人员来说将变得显而易见。意图在于,随附的权利要求应被解释成涵盖所有这样的变型和修改。
【权利要求】
1.一种非暂时性计算机可读存储设备,包括指令,所述指令在被执行时使一个或多个处理器: 接收散列的序列,其中有待去重复的数据已经被分成数据组块的序列,并且每个散列是对应数据组块的散列; 使用一个或多个第一索引并且对于序列的子集,确定子集的对应数据组块的先前存储的副本的位置; 部分地基于确定的信息将序列的散列和对应数据组块成组为段; 对于每个段,部分地基于关于构成该段的数据组块的确定的信息来选取要针对其去重复该段的储存器; 组合被选取成要针对相同储存器去重复的两个或更多段并且使用第二索引、作为整体去重复它们。
2.权利要求1的设备,其中一个或多个第一索引是布隆过滤器或集合。
3.权利要求1的设备,其中第二索引是稀疏索引。
4.权利要求1的设备,其中选取使一个或多个处理器针对给定段进行选取,这部分地基于确定的信息指示的哪些储存器已经具有属于该段的最多数据组块。
5.权利要求1的设备,其中组合使一个或多个处理器组合预定数目的段。
6.权利要求1的设备,其中组合使一个或多个处理器将段连结在一起直到达到最小大小。
7.一种方法,包括: 由处理器接收散列的序列,其中有待去重复的数据已经被分成数据组块的序列,并且每个散列是对应数据组块的散列; 使用一个或多个第一索引并且对于序列的子集,确定子集的对应数据组块的先前存储的副本的位置; 部分地基于确定的信息将序列的散列和对应数据组块成组为段; 对于每个段,部分地基于关于构成该段的数据组块的确定的信息来选取要针对其去重复该段的储存器; 组合被选取成要针对相同储存器去重复的两个或更多段并且使用第二索引、作为整体去重复它们。
8.权利要求7的方法,其中一个或多个第一索引是布隆过滤器。
9.权利要求7的方法,其中第二索引是稀疏索引。
10.权利要求7的方法,其中选取包括:针对给定段进行选取,这部分地基于确定的信息指示的哪些储存器已经具有属于该段的最多数据组块。
11.权利要求7的方法,其中组合两个或更多段包括组合预定数目的段。
12.权利要求7的方法,其中组合两个或更多段包括将段连结在一起直到达到最小大小。
13.—种设备包括: 一个或多个处理器; 耦合到一个或多个处理器的存储器; 所述一个或多个处理器执行下述操作: 接收散列的序列,其中有待去重复的数据已经被分成数据组块的序列,并且每个散列是对应数据组块的散列; 使用一个或多个第一索引并且对于序列的子集,确定子集的对应数据组块的先前存储的副本的位置; 部分地基于确定的信息将序列的散列和对应数据组块成组为段; 对于每个段,部分地基于关于构成该段的数据组块的确定的信息来选取要针对其去重复该段的储存器; 组合被选取成要针对相同储存器去重复的两个或更多段并且使用第二索引、作为整体去重复它们。
14.权利要求13的设备,其中选取使一个或多个处理器针对给定段进行选取,这部分地基于确定的信息指示的哪些储存器已经具有属于该段的最多数据组块。
15.权利要求13的设备,其中组合使一个或多个处理器将段连结在一起直到达到最小大小。
【文档编号】G06F12/00GK104246718SQ201280072821
【公开日】2014年12月24日 申请日期:2012年5月1日 优先权日:2012年5月1日
【发明者】D. 利利布里奇 M., M. 巴瓦特 D. 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1