用于内容定义节点分裂的方法和装置的制作方法

文档序号:6580335阅读:439来源:国知局
专利名称:用于内容定义节点分裂的方法和装置的制作方法
技术领域
本发明一般涉及数据结构中的节点分裂,尤其涉及数据结构中内 容定义的节点分裂。
背景技术
在传统备份系统中,必须索引和存储大量(例如太字节
(terabytes))输入数据。使用诸如树结构的数据结构以存储涉及数据 (例如目录、文件、数据序列、数据组块(Datachunks)等)的元数 据(metadata)(例如节点、底层数据(underlying data)的索引等)。 在用于大文件系统的备份系统中,这些数据结构按照有序序列排列大 小一致或大小变化的文件数据的组块。就是说,该底层文件数据是具 有关联文件偏移量的输入流来的字节组块的序列,元数据树排列组块 的地址成有序序列。这样,持久保存底层数据的、以及同样地、辅助 文件和目录相关信息的位置,以使按适当顺序的检索成为可能。
在许多应用(例如备份或归档)中,必须产生对应于同样或大部 分相似内容的元数据结构。例如,可能在两次传输同样文件系统用于 存储,但是内容的插入顺序可能不同(例如由于数据传输中的可变 (variable)延迟)。或者,可以后来备份具有少量变化的大文件系统。 存储两个对应于同样或高度类似底层数据的元数据树,具有相当数量 的非同样节点的元数据结构,增加了存储成本。为获得具备相对高度
同样节点的元数椐结构,需要,以及再平衡数据结构的节点,因为这 在时间和存储资源上惊人昂贵(To achieve metadata structures with correspondingly large degrees of identical nodes require and rebalancing of the nodes of the data structure, since this may be prohibitively expensive in terms of time or storage resources.)。
5一般而言,内容定义的数据分块系统(content-defined data chunking systems)使用标准数据结构以存储组块散列信息的序列(例 如元数据)。维护元数据序列作为元数据节点的大数据结构(例如, 序列、列表、树,B+树等),其导致底层存储内容的顺序。在数据归 档系统中,这些数据结构必须持久存储和操作于在线"流,,(streaming) 环境中。为了防止过量填充这些数据结构,调用节点分裂策略以获得 合理的平均节点填充,同时限制节点项目(entries)的最大数目。
例如,传统B+树可使用中点分裂(midpoint-split)节点分裂策略。 若以上升插入顺序在两个时机生长数据结构并在第二时机呈现附加 数据项,在该附加数据项之后的所有分裂点关于在第 一时机使用的分 裂点被移动一位(position)。因此,对于不同分裂点创建的节点将不 包^、相同的项目,在这两个数据结构中它们将不是确切的复制品。
在另一例子中,表示对同样内容的插入顺序进行改变,若单个数 据项从数据结构中的原始叶节点中去除并在后来的点插入,则产生不 同分区节点。若延迟插入发生在以其最终形式已产生的叶节点之后, 当将新树与原始树进行比较时,则从去除点到后来插入点为止的所有
节点可以不同。使用传统分裂策略的树节点的内容取决于插入顺序。
当存储多个顺序诱导(order-inducing)数据结构时,在典型的节 点分裂策略中,底层数据中或插入顺序中小的改变可导致大量非复制 节点。因此,需要数据结构中节点分裂的改进系统和方法。

发明内容
本发明 一般提供内容定义节点分裂的方法。
搜索节点区域以发现内容定义的分裂点。至少部分基于节点中项 目的散列(Hashes )(例如组块、子节点等)确定节点的分裂点,以及 基于该确定的分裂点分裂该节点。搜索该搜索区域以查找唯一 (例如 第一个)相遇分裂点。基于那个分裂点分裂该节点。那个分裂点典型 基于将节点中项目的散列的预定位掩码(Bitmask)与预定值(例如0 )进行的比较。
通过参考以下详细描述和附图,本领域技术人员将明白本发明的 这些和其他优点。


图1是存储系统的图2描述根据本发明实施例的文件系统;
图3是与内容定义节点分裂相比较的传统节点分裂的图,示出存 储内容的细微差别;
图4是与内容定义节点分裂相比较的传统节点分裂的图,示出存 储同样内容的效果,但有不同插入顺序;
图5是4艮据本发明实施例的内容定义节点分裂的方法的流程图6描述了根据本发明实施例的示范性的内容定义节点分裂策略。
具体实施例方式
内容可寻址存储(CAS)系统基于内容而非位置存储可^支检索的 信息。图l是存储系统图100。在本发明的至少一个实施例中,在诸 如存储系统100的存储系统中执行描述于此的节点分裂的方法。在相 关的申请号为US 12/042,777、题为"内容可寻址的存储的系统和方 法"、提交于2008年3月5日的美国专利申请中,更详细描述了这种 存储系统的实现,并将通过引用结合到本文中。
存储系统100包括文件服务器102,该文件服务器102用于接收 数据操作(例如文件写、文件读等)和元数据^喿作(例如文件去除等), 并将接收到的数据分块成数据块(data blocks)以存储于块存储(block store) 104中。块存储104存储数据和元数椐块,某些可以指向其他 块,可组织它们以描述文件系统106,下面就图2-5更详细地描述。
在本文的上下文中,元数据是非文件内容的任何数据。例如,元
7数据可以是关于客户可见的一个或多个文件的信息,如文件或目录的 名字、文件创建时间、文件大小、文件许可等,和/或关于一个或多个 文件和/或客户看不见的文件系统的信息,如索引结构、文件偏移量等。 当然,可使用其他适合的元数据(例如关于数据、 一个或多个文件、 一个或多个数据块、 一个或多个数据结构、 一个或多个文件系统、位 图等的信息)。
文件服务器102可以是耦合到客户和配置成提供用于数据(例如 信息、文档、文件等)存储的位置的其他设备或任何计算机。因此, 文件服务器102可具有存储装置和/或存储器。另外,文件服务器102 将数据分块成数据块(例如生成数据块)。即,文件服务器102从客 户数据和/或另外的組数据和元数据创建数据块(例如组块)在某种意 义上以允许在CAS中存储,并将这些数据和元数据块写到块存储104。
块存储104可识别数据块为先前已见(例如已知的、存储的等) 的数据块并返回其内容地址,或者可识别数据块为新块,为其生成内 容地址和返回该内容地址。可使用内容地址来重取(re-fetch)数据块, 所述内容地址可以连同已完成写的确认一起#1*接收。
块存储104可以是CAS系统或其他适合的存储器和/或存储系统。 在至少一个实施例中,块存储104是基于簇的内容可寻址块存储系统, 如在申请于2008年1月31日、申请号为US 12/023,133的美国专利 申请和申请于2008年1月31日、申请号为US 12/023,141的美国专 利申请中所描述,每一个通过引用结合到本文中。当然,可利用其他 基于地址的存储系统。块存储104包含可组织成文件系统106的数据 块。文件系统106是可表示成树结构的数据结构,如下面就图2-5 更详细讨论的那样。
存储系统100可具有处理器(未示出),该处理器通过运行计算 机程序指令来控制存储系统100的整体操作,所述程序指令定义了这 样的操作。在同样的或备选的实施例中,文件服务器102和/或块存储 104可各自具有控制器、处理器或其他设备,其通过运行计算机程序指令控制存储系统100的操作的至少一部分,所述计算机程序指令定
义这样的操作。可以在存储设备中(例如磁盘、数据库等)存储计算 机程序指令,和/或在期望计算机程序指令运行时将其栽入存储器。这 样,由存储于存储器中的计算机程序指令定义和由运行该计算机程序
指令的处理器控制用于执行存储系统100的关联函数和在此描述的方 法步骤的应用,如方法500中的数据存储、节点分裂等。存储系统100 可包括一个或多个中央处理单元、只读存储器(ROM)设备和/或随 机存取存储器(RAM)设备。本领域技术人员将认知,实际的内容可 寻址的存储系统的实现也可包含其他组件,图1的存储系统100是这 种存储系统的某些组件的上位表示,用于说明目的。
根据本发明的某些实施例,可将程序(例如控制器软件)的指令 读入文件服务器102和/或块存储104,诸如从ROM设备到RAM设 备或从LAN适配器到RAM设备。程序中指令的序列的运行可使存储 系统100执行描述于此的一个或多个方法步骤,如就方法500在下面 所描述的。在备选的实施例中,为了本发明流程的实现,可代替软件 指令或与软件指令结合使用硬接线的电路或集成电路。因此,本发明 的实施例不限于硬件、固件和/或软件的任何特定组合。块存储104可 存储用于存储系统100的软件,其可适合于运行该软件程序和因此依 照本发明以及特别地依照下面详述的方法操作。但是,本领域技术人 员应理解,这里描述的本发明可以通过使用宽范围的编程技术以及通 用的硬件子系统或专用控制器,以多种不同方式来实现。
可以以压缩的、未编译的和/或加密的格式来存储这样的程序。该 程序而且可包括通常有用的程序元素(program elements),诸如操作 系统、数据库管理系统和允许控制器与计算机外围设备以及其他装备 /组件接口的设备驱动(器)。合适的通用程序元素为本领域技术人员 所知,这里不必详细描述。
内容定义的节点分裂方法基于底层数据内容伪随机地 (pseudo-randomly)选择节点分裂点。 一般地,在给定的搜索区域中
9要选择唯一的元素,该元素满足对于内容定义节点分裂点所要求的给 定准则。因此,选择任何给定元素作为潜在分裂点的概率为低。
单个数据项插入不大可能影响分裂点决策。因此,在单个的叶节 点和到根的关联路径内可能包含两树生长之间的差别。即使单个数据 项插入节点影响节点分裂点决策,这些树将可能在随后的生长中再同 步。
类似地,当在内容定义节点分裂期间单个数据项的插入顺序变化 时,该项不大可能成为内容定义的节点分裂点。当插入时间差别很小 而发生在节点分裂决策之前时,产生两个同样树。但是,当两个数据 项的插入时间充分分开时,使用内容定义节点分裂生长的树具有使得 中间节点不受影响的大概率和显示局部节点改变的高概率。
图2描绘根据本发明的实施例的文件系统200。文件系统200可 以是这里所描述的数据结构、数据树、数据列表或其他数据、元数据、 组块、块和/或散列存储。
一般地,文件系统200包括一系列排列于数据结构中的节点202, 如高扇出(high-fanout) B+树。因此,存储结构领域中技术人员应理 解,节点202最终被耦合到根204。文件系统200则可具有任何合适 数量的节点202。就是说,随着生长文件系统200,加入和/或填充合 适数量的节点202。各个节点202包括若千项目(如槽、块、组块等) 206。如在数据结构中所认知的,可以有任何数量的项目206和/或节 点202的层。
在至少一个实施例中,项目206 ;^L描述其他项目206、节点202 和/或数据的元数据和/或数据的散列。在下文中,以这样的顺序诱导 (order inducing)数据结构使用的节点中的项目是指组块,并且理解 在不同上下文中组块可表示不同的逻辑组件(例如其他数据结构节 点、目录、文件、文件内容、信息节点、文件属性等)。
在图3和图4中,描述当应用到数据插入数据结构时的节点分裂 策略,因为该情形对于使用CAS的备份应用是最重要的。但是,在节
10点下溢条件期间、在清除操作(erase operation)期间也可能通过应用 (可能重复地)节点分裂操作到两个(或更多个)相继节点的合并节 点项目以生成包含预期范围许多项目的替代节点,来应用该策略。
图3描述了各图300A和图300B,它们是与内容定义节点分裂相 比较的传统节点分裂的示例。图300A显示了对于理想的、分类的插 4歹'1 302A,传统节点分裂与内容定义的节点分裂的比较。图300B 显示了传统节点分裂与内容定义节点分裂的比较,其中附加的组块 324出现在理想的、分类的插入序列302B内。在下面就方法500和图 5更详细讨论节点分裂的流程。
列306显示组块的特定插入顺序。列308显示应用特定传统节点 分裂方法的结果。列316显示应用根据本发明的实施例的特定的内容 定义节点分裂方法的结果。
在图300A中,插入序列302A包括多个元数据组块304a-304h。 虽然图300A中描述成插入序列302A具有8个组块(例如,组块 304a-304h),但是插入序列可具有任何数目的组块。
插入序列302A表示要在节点中(诸如在图2的节点202和/或项 目206中)存储的的元数据和/或数据插入顺序。类似地,组块304a-304h 表示存储在节点202/302A中的散列。
列306的第一行显示任何分裂之前插入序列302A的组块 304a-304h,要按正确的顺序插入以形成节点,如所示的那样。基于下 面就图5更详细讨论的内容定义准则,组块304c和304g (显示为填 充块)是合格的内容定义分裂点。就是说,在块304c和304g的每个 之后可分裂插入序列302A,以致于后续的组块净皮移入新节点中。
列308的第一行显示了使用传统节点分裂准则分裂成节点310、 312和314的插入序列302A。在该例中,在每隔两个组块之后分裂插 入序列302A。这样,节点310包含组块304a-304c,节点312包含组 块304d-304f,节点314包含组块304g-304h。
列316的第一行显示使用下面就图5描述的内容定义节点分裂方法500分裂成节点318、 320和322的插入序列302A。在该例中,插 入序列302A在每个合格的内容定义分裂点之后分裂。就是说,插入 序列302A在每个组块304c和304g以后分裂,以致于组块304a-304c 形成节点318,组块304d-304g形成节点320, 304h和后来的直到且 包括下一个合格的内容定义分裂点的组块形成节点322。
在图300B中,插入序列302B包括多个元数据组块304a-304h, 其要以显示的顺序插入以在数据结构中形成节点。另外,新组块324 呈现,按其适当(例如理想的、分类的)顺序位于插入序列302B中。 为示范之目的,图300B描述了位于组块304b和304c之间的组块324, 但本领域的技术人员会认识到,在操作过程中,附加组块可位于节点 的任何点内。虽然在图300B中描述为插入序列302B具有9个组块(例 如组块304a-304h和324 ),但是插入序列可具有任何数目的组块以及 可#皮加入和/或删除一个以上的组块。
插入序列302B表示要存储于节点中(如在图2中的节点202和/ 或项目206中)的数据、子节点、和/或元数据。除插入序列302B包 含组块324 (表示成画x的框)夕卜,插4列302B等同于插入序列 302A。类似地,组块304a-304h和324表示图2中节点202中存储的 散列。
列306的第二行显示任何分裂之前插入序列302B的组块 304a-304h。基于下面就图5更详细讨论的内容定义准则,组块304c 和304g (显示为填充块)是合格的内容定义分裂点。就是说,插入序 列302B可以在每个组块304c和304g之后分裂,在该分裂后,后续 组块可^皮移入新节点内。
列308的第二行显示使用传统节点分裂准则分裂成节点326、 328 和330的插入序列302B。在该例中,插入序列302B在组块304a-304h 和新插入的组块324的每隔两个组块之后分裂。这样,节点326包含 组块304a、 304b和324,节点328包含组块304c-304e,而节点330 包含组块304f-304h。注意节点310、 312和314均不匹配于节点326、328和330。
列316的第二行显示使用下面就图5描述的内容定义节点分裂方 法500分裂成节点332、 334和336的插入序列302B。在该例中,插 入序列302B在每个合格的内容定义分裂点之后分裂。就是说,插入 序列302B在每个组块304c和304g之后分裂,以致于组块304a-304c 和组块324形成节点332、组块304d-304g形成节点334,以及组块 304h和后来的直到且包括下一个合格的内容定义分裂点的组块形成 节点336。注意比较节点318、 320、 322与节点332、 334、 336,只 有包含插入组块324的节点332改变了 。
图4描述各图400A和图400B,它们是内容定义节点分裂与传统 节点分裂比较的示例。图400A显示传统节点分裂与内容定义节点分 裂的比较,其中附加组块406以其理想的分类的顺序》文置,如插M 列402A中所示的那样。图400B显示传统节点分裂与内容定义节点分 裂的比较,其中同样的附加组块406失序放置,如插入序列402A中 所示的那样。下面就方法500和图5更详细讨^〖仑节点分裂的流程。
列408显示组块的特定插入顺序。列410显示应用特定的传统节 点分裂方法的结果。列418显示了根据本发明的实施例的应用特定的 内容定义节点分裂方法的结果。
在图400A和400B中,插入序列402A和402B包括多个元数据 组块404a-404h。另外,新组块406 (显示为画x的框)在插入序列 402A中位于其适当位置,但是在402B中失序位于延迟位(delayed position )。为示范之目的,图402A描述位于组块404b和404c之间的 组块406,但本领域技术人员应认识到,在操作过程中,这样的组块 可以初始位于插入序列的任意点。虽然在图400A中描述成插入序列 402A具有9个組块(例如404a-404h和406 ),但是插入序列可以具 有任何数目的组块,以及可以加入一个以上的组块并使其插入延迟到 序列402B的后来点。
列408的第一行显示了插入序列402A的组块404a-404h和组块
13406的插入顺序。该插入顺序等同于组块的最终排序。基于下面就图 5更详细讨论的内容定义准则,组块404c和404g (显示为填充框)是 合格的内容定义分裂点。就是说,插入序列402A可在每个组块404c 和404g以后分裂,以致于所有后来的組块可纟皮移入新节点。
列410的第一行显示使用传统节点分裂准则分裂成为节点412、 414和416的插入序列402A。在该例中,该插入序列402A在组块 404a-404h和新插入的组块406的每隔两个组块之后分裂。这样,节 点412包含组块404a、 404b和406,节点414包含组块404c-404e, 而节点416包含组块404f-404h。
列418的第一行显示使用下面就图5描述的内容定义节点分裂方 法500分裂成节点420、 422和424的插入序列402A。在该例中,插 入序列402A在每个合格的内容定义分裂点之后分裂。就是说,插入 序列402A在每个组块404c和404g之后分裂,以致于组块404a - 404c 和组块406形成节点420,组块404d-404g形成节点422,以及404 和后来的直到且包括下一个合格的内容定义分裂点的组块形成节点 424。
在图400B中,插入序列402B包括适当顺序的多个组块 404a-404h。但是,附加组块406无序位于插入序列402B中。为示范 之目的,图400B描述组块406在组块404h之后,但是本领域技术人 员会认识到,在操作过程中,这样的组块可位于插入序列的任何点。 虽然在图400B中描述为插入序列402B具有9个插入的序列(例如组 块404a-404h和406 ),但是插入序列可以具有任何数目的组块,以及 可以无序放置一个以上的组块。
插入序列402B表示存储于节点中(如在图2的节点202和/或入 口 202中)的数据和/或元数据。除了插入序列402B已使得组块406 (显示为画x的框)失序(例如,不是象在插入序列402A中那样按 理想的、分类的顺序)放置以外,插入序列402B等同于插入序列402A。 类似地,402B的组块404a-404h和406表示要存储于节点202中内容的散列。
列408的第二行显示插入序列402B的组块404a-404h和406。基 于下面就图5更详细描述的内容定义准则,组块404c和404g (显示 为填充块)是合格的内容定义分裂点。就是说,可以在每个组块404c 和404g之后分裂插入序列402B,以致于可将后来的组块移入到新节 点。
列410的第二行显示使用传统节点分裂准则分裂成节点428、 430 和432的插入序列402B。在本例中,插入序列402B在原始组块 404a-404h和组块406的每隔两个组块之后分裂。在传统节点分裂策 略中,当分裂节点时,将失序放置的组块(例如组块406)安放成适 当顺序(例如,在组块404b和404c之间,如在图400A的插入序列 402A中那样)。这样,节点428包含组块404a-404c和406,节点430 包含组块404d-404f,而节点432包含组块404g和404h。注意节点412、 414、 416均不匹配节点428、 430和432。
列418的第二行显示使用下面就图5描述的内容定义节点分裂方 法500分裂成节点434、 436和438的插入序列402B。在本例中,在 每个合格的内容定义分裂点之后分裂插入序列402B。就是说,在每个 组块404c和404g之后分裂插入序列402B。在下面就图5描述的内容 定义节点分裂方法中,当分裂节点时,将先前无序放置的组块(例如 组块406 )安i文成适当顺序(例如在组块404b和404c之间,如在图 400A的插入序列402A中那样)。这样,组块404a-404c和组块406 形成节点434,组块404d-404g形成节点436,以及组块404h和后来 的直到且包括下一个合格的内容定义分裂点的组块形成节点438。注 意该无序插入序列402B的构建节点434、 436、 438与有序插入序列 402A的构建节点420、 422、 424是同样的。
如在图3和图4的描述中看到的,当使用传统节点分裂方法时, 涉及数据组块插入或去除的底层组块(例如字节等)的局部化改变典 型改变许多节点。当数据插入的时间有大的差别时,也影响成比例地
15大的数量的叶节点。因而,传统节点分裂方法产生大量非复制节点。
相反,使用内容定义节点分裂,数据结构对插入顺序改变较不敏 感。类似地,存储的组块的数目中的局部化改变可能对元数据存储结 构具有局部化效应,产生大量的复制节点。节点复制是有利的,因为 其减少了存储成本。在某些应用中,节点复制还可以减少数据传输成 本和/或加快操作.的速度。
图5是根据本发明实施例的内容定义节点分裂的方法500的流程 图。可由存储系统100的各种组件(如由上述处理器或其他类似的组 件)执行该方法500。该方法开始于步骤502,典型地在节点已经达 到某些预定(例如最大)数目的项目时纟皮调用。
在步骤504中,搜索节点区域以查找内容定义分裂点。在至少一 个实施例中,使用滚动窗以实现分裂点的伪随机选择。该搜索区域可 以是预定的(例如指定的)。就是说,该搜索区域可以通过使用全局 参数进行用户定义和/或设置。可以前向和/或后向搜索该搜索区域。 在许多情形下,节点项目自身被充分随机化,以致于长度l的滚动窗 是合适的(例如正存储底层数据时是底层内容的内容地址或散列
(when the underlying data is being stored is hashes or content addresses of underlying content))。
内容定义分裂点基于节点项目的内容的散列函数。就是说,使用 节点中组块的该散列函数以确定分裂点。定义分裂点的散列函数的参 数可以预定以及可由用户或系统定义,并可才艮据组块(例如数据、元 数据、节点等)的类型而不同。可通过搜查节点中组块的散列中的比 特的特定序列,在预定搜索区域内执行搜索。例如,可将位掩码
(bitmask)应用到节点中项目的散列,以及执行搜索以发现选择的比 特何时满足预定条件。
举例来说,可以对通过位掩码选择的比特进行等于0或超过某个 固定值的比较,或者可以通过使用最大或最小的相遇值来选取选择。 可以使用内容定义分块领域技术人员所知的其他技术来执行该选择。
16此外,虽然优选在叶节点中存储底层数据的散列相关表示或内容地 址,但这仅仅是一个建议的实施例。在某些实施例中,为查找内容定 义分裂点,仅叶节点被搜索。在备选的实施例中,为查找内容定义分
裂点搜索文件系统(例如图1的文件系统106)的全部树节点。
在步骤506中,就是否已发现分裂点做出判定。在至少一个实施 例中,执行步骤504中的搜索直到发现第一个内容定义分裂点。若发 现内容定义分裂点,该方法进行到步骤508并指定该内容定义分裂点。 若没有发现内容定义的分裂点,该方法进行到步骤510并选择分裂点。
在步骤508中,当符合(例如满足)合适(例如预定的)的条件 时,指定关联组块作为内容定义分裂点。如上面就图3和图4所讨论 的那样,内容定义分裂点与特定的组块关联,文件系统106可按已知 方式分裂包含该组块的节点。例如,文件系统106可在指定的分裂点 之前或之后分裂。该方法然后进行到步骤512。
在步骤510中,选择分裂点。在至少一个实施例中,当在步骤504 中没有发现内容定义分裂点时,指定搜索区域的中间作为分裂点。其 他实施例可能更喜欢使用原始位掩码的更少限制的变化或选择仍然 为内容定义的备选分裂点的其他方法。
在步骤512中,根据指定的分裂点分裂节点。该方法结束于步骤
514。
图6根据本发明的实施例对内容定义节点分裂方法进行定义。图 6显示内容定义分裂策略600,该策略是控制方法500的算法参数的 示例。就是说,内容定义的节点分裂策略600指挥方法500的行为, 诸如在处理器等上,如上面就文件系统IOO讨论的那样。
行2中的策略600 ( "condentdefinednodesplit")表明要使用内容 定义分裂。行3和行4表明叶和内部节点的最大允许扇出为320。每 当节点(例如在插入序列302A、 302B、 402A、 402B期间等)超过该 最大扇出,就执行搜索以发现内容定义分裂点,如方法500的步骤504 中那样。搜索在splitlo值和splithi值(例如预定搜索区域)之间范围中的节点。在本例中,splitlo指定该范围的下界(例如0.25 x 320=80), 而spl池i指定该搜索范围的上界(例如0.75 x320=240)。当然,可以 使用任何用户定义的或另外预定的搜索区域。
搜索该搜索区域以查找散列的分裂掩码(splitmask)比特中具有 0的内容,如策略600的行7中所示的那样。在操作中,分裂掩码中 设置比特的数目实质上为1og2(搜索区域的大小)。在本例中,搜索区 域的大小为160。这最大化了搜索区域内具有一个内容定义分裂点的 概率。当然,可使用任何合适的位掩码(例如分裂掩码)。可通过splitalg (行2)选择内容定义分裂的其他变体。例如,某些变体可规定备份 分裂点选择方法,可使用该方法在第一次通过搜索区域中的项目期间 没有发现分裂点的情况下去选择分裂点。例如,可使用更少限制的位 掩码,或者在这样的情形下可使用后退固定分裂点(例如中点分裂)。 在某些实施例中,可在步骤504中的分裂点的搜索中和/或在上面图5 的步骤510中选择分裂点中使用上面的变体。
在某些实施例中,将元数据"数据,,与对应的内容地址分离。该 元数据"数据"和内容地址则存储于不同的块中。因此,若组块在文 件系统(例如文件系统200等)中移位,虽然后来生长的数据结构中 的元数据"数据"将不同,但可消除复制内容地址块。
要将前面的具体实施方式
理解为全部是说明性的和示范性的,而 不是限制性的,并且公开于此的本发明的范围不由该具体实施方式
确 定,而是由根据专利法许可的全部范围所解释的权利要求来确定。要 理解,显示和描述于此的实施例只是本发明的原理的说明,以及本领
域技术人员不脱离本发明的范围和精神可实现各种改动。本领域技术 人员不脱离本发明的范围和精神可实现各种其他特征的组合。
权利要求
1.一种内容定义节点分裂的方法,包括至少部分基于节点中项目的散列确定所述节点的分裂点;基于确定的分裂点分裂所述节点。
2. 如权利要求1所述的方法,还包括搜索所述节点的至少一部分以查找所述分裂点。
3. 如权利要求2所述的方法,其中搜索所述节点的至少一部分 以查找所述分裂点包括搜索预定搜索区域以查找唯一分裂点,以及至 少部分基于节点中项目的散列确定所述节点的分裂点还包括设定所 述唯一分裂点作为所述确定的分裂点。
4. 如权利要求3所述的方法,其中搜索预定搜索区域以查找唯 一分裂点包括搜索所述预定区域以查找第一相遇分裂点。
5. 如权利要求1所述的方法,其中至少部分基于节点中项目的 散列确定所述节点的分裂点包括搜索所述节点的至少一部分以查找满足预定条件的所述节点中 项目的散列的预定位掩码。
6. 如权利要求5所述的方法,还包括设定所述预定位掩码为实质上具有以2为底的节点集比特的^皮搜 索部分的大小的对数的位掩码。
7. 如权利要求5所述的方法,其中所述预定条件包括表明为0 的比特的项目的散列的所迷预定位掩码。
8. —种机器可读介质,具有存储于其上的程序指令,所述指令 能够由处理器运行并定义以下步骤至少部分基于节点中项目的散列确定所述节点的分裂点; 基于确定的分裂点分裂所述节点。
9. 如权利要求8所述的机器可读介质,其中所述指令还定义以 下步骤搜索所述节点的至少一部分以查找所述节点中项目的散列中的 预定位掩码。
10. 如权利要求9所述的机器可读介质,其中所述用于搜索所述 节点的至少一部分以查找所述分裂点的指令包括用于搜索预定搜索 区域以查找第一相遇分裂点的指令,以及其中所述用于至少部分地基 于所述节点中项目的散列确定所述节点的分裂点的指令还包括用于 设定所述第一相遇分裂点作为所述确定的分裂点的指令。
11. 如权利要求8所述的机器可读介质,其中所述指令还定义以 下步骤搜索所述节点的至少一部分以查找满足预定选择准则的所述节 点中项目的散列的预定位掩码。
12. 如权利要求11所述的机器可读介质,其中所述指令还定义 以下步骤设定所述预定位掩码为具有以2比特为底的所述节点的祐:搜索部 分的大小的对数的位掩码。
13. 如权利要求11所述的机器可读介质,其中所述指令还定义 以下步骤将节点项目的散列的预定位掩码与计算出的节点项目的散列相 比较以确定为0的比特。
14. 一种用于内容定义节点分裂的装置包括用于至少部分基于节点中项目的散列确定所述节点的分裂点的单元;用于基于确定的分裂点分裂所述节点的单元。
15. 如权利要求14所述的装置,还包括 用于搜索所述节点的至少一部分以查找所述分裂点的单元。
16. 如权利要求15所述的装置,其中所述用于搜索所述节点的 至少一部分以查找所述分裂点的单元包括用于搜索预定搜索区域以 查找第一相遇分裂点的单元,以及所述用于至少部分基于所述节点中项目的散列确定所述节点的分裂点的单元还包括用于设定所述第一 相遇分裂点为所述确定的分裂点的单元。
17. 如权利要求14所述的装置,其中所述用于至少部分地基于 所述节点中项目的散列确定所述节点的分裂点的单元包括用于搜索所述节点的至少一部分以查找满足预定选择准则的所 述节点中组块的散列的预定位掩码的单元。
18. 如权利要求17所述的装置,还包括用于设定所述预定位掩码为实质上具有以2比特为底的所述节点 的4皮搜索部分的大小的对数的位掩码的单元。
19. 如权利要求17所述的装置,还包括用于选择节点项目的散列的预定位掩码以确定为0的比特的单
全文摘要
搜索节点的区域以发现内容定义分裂点。至少部分基于节点中项目的散列确定节点的分裂点并基于所述被确定的分裂点分裂所述节点。搜索所述搜索区域以查找第一相遇分裂点并基于所述分裂点分裂所述节点。所述分裂点基于满足于预定条件的所述节点中项目的预定的位掩码。
文档编号G06F17/30GK101685467SQ20091017282
公开日2010年3月31日 申请日期2009年8月28日 优先权日2008年9月25日
发明者A·阿兰亚, C·昂古里努, E·克鲁斯, S·A·拉戈, S·戈克黑尔 申请人:美国日本电气实验室公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1