数据去重的制作方法

文档序号:6352288阅读:128来源:国知局
专利名称:数据去重的制作方法
数据去重相关申请的交叉引用
本申请涉及2010年6月18日提交的、顺序号为61/356,368、代理人案号为201000205-1的美国临时申请并且要求该美国临时申请的优先权,该美国临时申请的公开 被结合在此以作参考。
背景技术
可以使用备份系统来对计算机的存储装置进行备份。这可以在许多天内被重复地进行,其中每天取得一个备份,从而在发生了一段时间之后才被发现的数据丢失仍然可以被恢复。虽然一些备份可能是“完全备份(full )”,其中做出存储装置的完整拷贝,但是其他的可能是“增量备份(incremental)”,其仅仅保存自上一次备份以来已被修改的文件/部分。虽然增量备份不是存储装置的完整拷贝,但是当与上一个完全备份以及其间的任何增量备份相组合时,它可以被用来复原在取得该增量备份时存储装置的内容。为了减少备份所需的存储量,备份系统可以对备份进行去重(deduplicate)。它可以通过把备份分成被称作块的小片Γ4-12ΚΒ)并且仅仅保持每个独有块的一个拷贝来做到这一点。通过仅仅保存独有块加上备份配方(recipe)(用于从所述独有块集合重建备份的指令),备份系统可以使用更少数量级的存储装置来存储任何给定备份集合。当要检索备份以用于复原计算机的存储装置时,必须按顺序读取并组装构成该备份的各种独有块。对于许多现代存储技术(例如硬盘驱动器)来说,这一过程的速度在很大程度上取决于所述备份的块如何被碎片化。更确切地说,每当读取过程必须切换到从备份存储装置的不同部分读取时,它可能付出随机查找惩罚(对于当前驱动器是 10ms)。如果备份的块所处的位置没有局部性(例如76、12、34、224、103、876. · ·而不是76、77、78、224、225,226,...),则复原速度可能相当慢。现有技术顺序地存储新的独有块。虽然这把来自给定备份的所有新块放在一起,但是它不把它们放在来自该备份的旧块旁边。如果每天取得备份,则每天的新数据被定位在一起。遗憾的是,诸如日志文件和草稿文档之类的许多文件每天改变一点儿,这导致它们的块分散在备份系统的存储装置上。从给定备份的角度来看,在不同备份之间共享块也可能导致块被放置在次优位置处。因此,许多用户抱怨从经去重的备份中复原计算机的存储装置是缓慢且耗时的过程。


图I是示出根据现有技术的对于数据块放置使用简单附加算法的系统的框图。图2A是示出根据本发明的一个示例实施例的用于基于块的去重系统的基于容器的算法的框图。图2B是更详细地示出根据本发明的一些示例实施例的用于基于容器的去重的存储介质的一个实施例的框图。图3是根据本发明的示例实施例的基于容器的、基于块的去重的方法的流程图。
具体实施例方式本发明的实施例减少了重建存储在备份系统中的经去重的备份所需的时间。本发明的实施例采用基于块的去重以减少存储构成所存储的备份的数据块的多于一个备份拷贝的发生。所述系统和伴随的方法高效地利用计算机处理和存储器资源,并且已经显示出显著地 减少了计算机盘读取头为了获取并组装位于一个或多个存储盘上的备份的所有部分而必须重定位其自身的次数。虽然本发明的一个或多个实施例是在被用作备份系统的情境中描述的,但是它可以被用于许多其他用途。更一般来说,它可以被用作可以存储任意大小的数据对象(被称作项目)的高效存储系统。由于它们可能非常大,所以项目通常每次一个比特被流送到本发明的一个或多个实施例中。为计算机生成备份的软件可以生成一起构成该备份的许多虚拟带镜像(高达4GB);每个虚拟带镜像可以是单个项目。在基于块的去重中,输入数据流(或者数据输入或项目)被分成数据块。分块算法被设计成使得,当足够大的字节序列由两个数据区共享时,由分解这些区所产生的一些块是相同的。当正在摄取新项目时,去重系统尝试识别出在存储库(store)中作为所述新项目被划分成的块的拷贝的现有块。如果识别出这样的块拷贝,则所述系统可以通过存储指向该块的现有拷贝的引用而不是再次存储该块来避免去重。无法为之找到现有拷贝的块被添加到块存储库。由新块被存储的方式可能产生块碎片化。最简单的方案是把块存储区域认为是块的线性列表;新块随后被简单地附加到所述块存储区域。所述块存储区域又被顺序地布置在盘上或存储系统上,比如用作RAID组的许多盘。这种方法可以被称作简单附加数据块放置方案。当去重率高时,新数据的许多块已经在存储库中具有现有拷贝。这些现有块拷贝潜在地属于许多较早项目,其每个较早项目已由存储库在不同时间接收。由于新块被线性地布置,因此这意味着构成新项目的块可能在盘上离得很远。结果,当要检索所述项目时,(多个)盘读取头将被强迫到处移动以读取这些块,从而导致许多查找操作。由于查找与顺序读取相比非常缓慢,因此这导致非常慢的检索速度。图I是示出根据现有技术的使用简单附加数据块放置技术的系统的框图。图I是示例计算机系统100的框图。计算机100可以是单节点计算机系统或者多节点、分布式计算机系统。计算机系统100包括分块模块102,其接收输入数据流105以用于基于块的去重。分块模块102可以被实施为在一个或多个处理器104上可执行的机器可读指令。所述一个或多个处理器104被连接到存储器103 (例如易失性存储器)和存储介质110 (例如持久存储介质比如基于盘的存储介质或其他类型的存储介质)。存储介质110存储包含块引用111的项目配方108以及块存储区域114。出于该实例的目的,每个块引用111指向存储在块存储区域114中的数据块112。在一些其他实施中,存储介质110的一些或所有内容可以被存储在与计算机系统100分开的系统中。在图I中仅仅示出一个项目配方108 ;附加的项目配方108将随着接收到新项目而被创建并存储。存储器103具有快于存储介质110的存取速度,并且可以被用来临时地存储输入数据块。
分块模块102的机器可读指令被加载以用于在处理器(比如104)上执行。处理器可以包括微处理器、微控制器、处理器模块或子系统、可编程集成电路、可编程门阵列、或者另一控制或计算设备。数据和指令被存储在相应的存储设备中,所述存储设备被实施为一个或多个计算机可读或计算机可用存储介质。所述存储介质包括不同形式的存储器,包括半导体存储器设备,比如动态或静态随机存取存储器(DRAM或SRAM)、可擦与可编程只读存储器(EPR0M)、电可擦与可编程只读存储器(EEPROM)和闪速存储器;磁盘,比如固定盘、软盘和可移除盘;其他磁介质,包括磁带;光学介质,比如光盘(CD)或数字视频盘(DVD);或者其他类型的存储设备。注意,上面所讨论的指令可以被提供在一个计算机可读或计算机可用存储介质上,或者可替换地,可以被提供在分布于可能具有多个节点的大系统中的多个计算机可读或计算机可用存储介质上。“存储介质”意图是单个存储介质或多个存储介质。这样的一个或多个计算机可读或计算机可用存储介质被认为是物品(或制造品)的一部分。物品或制造品可以指的是任何所制造的单个部件或多个部件。在图I中,计算机100接收来自外部源的输入数据流105 (例如备份镜像),或者输入数据流105可能是由于计算机100根据预定备份调度表选择各种文件以供备份而产生的。此外,计算机100可以代表独立计算机服务器或者这样的机器的群集。处理器104对输入数据流105应用来自分块算法模块102的分块算法以把所述数据流划分成数据块。这里,假设块存储区域114最初是空的,并且输入数据流5被划分成数据块1、2、3、4、5、6和7,其中除了块3和6具有相同内容之外,每个块都是独有的。在本发明的实施例的情境中,每个数据块的大小可以处在2与12kB之间,其中平均大小的数据块是近似4kB。在图I的实例中,数据块1、2、3、4、5和7但是没有6 (3的拷贝)被顺序地存储在块存储区域114中,其可以被存储在一个或多个硬盘或其他大容量存储设备上。在摄取输入数据流105时创建项目配方108 ;它包含按顺序用于输入数据流105的块(块1、2、3、
4、5、6和7)的块引用。注意,用于块3和6的块引用都指向数据块3。作为示例而非限制,每个数据块(比如在块存储区域114中示出的数据块112)的大小被设想为处于2与12kB之间,其中平均大小的数据块是近似4kB。然而,实施例不如此限于该实例。在图I的实例中,数据块1、2、3、4、5和7被顺序地存储在块存储区域114中,其可以被存储在一个或多个硬盘或其他大容量存储设备上。应当注意,输入数据流105可以包括一个或多个单独的计算机文件的部分或完整拷贝。或者它可以包括一系列数据库表行。因此,来自输入数据流105的一组数据块可以是商业交易记录的一部分,而输入数据流的另一部分可以是由完全分开的商业实体产生的市场营销文档的一部分。对于在输入数据流105中传送的数据的类型没有限制。在对于数据块放置使用简单附加算法的典型现有技术中,处理器104应用来自分块模块102的分块算法以把输入流105划分成一系列数据块;它随后确定每个数据块是否已被存储在块存储区域114中。如果数据块实际上已经被存储在块存储区域114中,则处理器104丢弃该数据块,把该数据块(比如用于输入块6的数据块3)的现有拷贝的地址添加到项目配方108的末尾,并且考虑下一数据块。如果该数据块尚未被存储在块存储区域114中,则处理器104把该新数据块添加到块存储区域114的末尾,并且把新存储的数据块的地址添加到项目配方108的末尾。以这种方式,所述简单附加算法把每个独有数据块附加到块存储区域114,所以按照最初所见的顺序存储数据块。可以由处理器104考虑附加的新输入数据流105以用于存储,从而产生新的项目配方108 (每个输入数据流105/项目一个配方),并且更多独有数据块112被存储在块存储区域114中。块存储区域114的内容可以包括来自数千项目的独有数据块112。如前所述,这可能导致其数据块112与许多先前项目共享的新输入数据流105具有分散在块存储区域114上的它的数据块112,从而导致缓慢的复原速度。图2A是示出根据本发明的一个实施例的用于基于块的去重的基于容器的算法的功能元件的框图。发明人设想到,数据块容器是布置在大容量存储盘或其他大容量存储设备的小区域内的盘上数据结构。在本发明的一个实施例中,数据块容器可以被形象化为文件,所述文件可以在大约一个查找操作的时间周期内被访问和读取。下列术语说明用于本发明的一个或多个实施例的构建块。块容器是用于存储块的盘上数据结构。形象化块容器的最容易的方式是把每个块 容器认为是一个文件或一对文件。除了块数据之外,块容器还可以包含关于块的其他数据,比如用于每个块的引用计数或者块的散列的列表。在一个实施例中,块数据以及额外的元数据被包含在单个文件中。在另一实施例中,块数据被包含在一个文件(称作块容器数据文件)中,以及元数据被包含在分开的文件(称作块容器索引文件)中。然而,实施例不限于此。在至少一个实施例中,所述容器相对较小,因此从盘中访问和读取一个容器所花费的时间大约是一个查找操作。容器ID是唯一地识别出容器的小数据值,并且可以被用于从盘中检索该容器。钩子是已被采样算法选择的输入数据块的散列。在一个实施例中,使用采样模块的采样算法对散列(例如每个项目中的数据块的散列)进行采样。举例来说,可以对于其前7个比特是零的所有散列选择采样。这些采样将被称作钩子。容器稀疏索引是把钩子映射到容器(可能是间接地,例如经由容器ID)的存储器内索引。容器稀疏索引把钩子映射到所述钩子出现在其中的块容器。注意,容器稀疏索引和块容器索引文件(虽然都对容器进行索引)在其他方面是无关的数据结构。片段是就块边界而言的输入数据流的连续部分(例如块序列[q,C2, ...,%])。虽然将把本发明的一个或多个实施例描述为同时对整个输入数据流进行操作,但是在实践中,本发明的一个或多个实施例常常是通过把输入数据流划分成片段并且随后每次对一个片段进行去重来实践的。图2A是其中结合了一个或多个实施例的示例计算机系统200的框图。与前面一样,计算机系统200可以是单节点计算机系统或者多节点、分布式计算机系统。计算机系统200包括分块模块202以及容器分配模块207、采样模块215和稀疏索引模块219 (在下面的一个或多个实施例中进一步描述)。分块模块202以及容器分配模块207、米样模块215和稀疏索引模块219可以被实施为在一个或多个处理器204上可执行的机器可读指令。正如读者将认识到的那样,上面提到的模块中的一个或多个也可以被实施为用于执行特定任务或操作的逻辑,比如硬件(服)。所述一个或多个处理器204被连接到存储器203 (例如易失性存储器)和存储介质210 (例如持久存储介质比如基于盘的存储介质或者其他类型的存储介质)。
如图2B中所示,存储介质210存储项目配方231_1、231_2、...、231_M,其包含
(如结合图I所描述的)块引用;以及许多块容器239-1,239-2.....239-N,每个包括块容
器索引(分别是241-1、241-2.....241-N)和关联的块容器数据(分别是251-1、251-2.....
251-N)。块容器索引241-1与用于块容器数据251-1的元数据相关联并且包含该元数据,块容器索引241-2与用于块容器数据251-2的元数据相关联并且包含该元数据,等等。在一些实施例中,项目配方231可以使用两层数据结构来存储,其中顶层文件指向一系列被称作清单的文件,每个包含用于所述项目的一部分(例如片段)的配方。出于该实例的目的,每个块容器索引241-1、241_2.....241-N包含散列列表,其
关联的块容器数据中的每个块对应一个散列。这允许仅仅使用小得多的块容器索引来确定哪些块存在于关联的块容器数据中。如前所述,在一些实施例中,块容器数据及其关联的块容器索引被组合在单个数据结构中。这样的数据结构也应当被称作块容器索引,因为它也允许确定该块容器包含哪些块。在一些其他实施中,存储介质110的内容的一些或全部可以被存储在与计算机系统100分开的系统中。如图2B中所示,将随着从输入数据流205接收到新项目而创建并存储多个项目配方231-1、231-2、· . .、231-M。存储介质还可以包含参数221。在一些其他实施中,存储介质210的内容的一些或全部可以被存储在与计算机系统200分开的系统中。与前面一样,存储器203具有快于存储介质210的存取速度,并且可以被用来临时地存储被选择来存储输入数据块的容器。分块模块202以及容器分配模块207、采样模块215和稀疏索引模块219的机器可读指令被加载以用于在一个或多个处理器(比如图2A中的204)上执行。数据和指令被存储在存储设备中,所述存储设备被实施为一个或多个计算机可读或计算机可用存储介质。所述存储介质包括不同形式的存储器,包括半导体存储器设备,比如动态或静态随机存取存储器(DRAM或SRAM)、可擦与可编程只读存储器(EPR0M)、电可擦与可编程只读存储器(EEPROM)和闪速存储器;磁盘,比如固定盘、软盘和可移除盘;其他磁介质,包括磁带;光学介质,比如光盘(CD)或数字视频盘(DVD);或者其他类型的存储设备。注意,指令可以被提供在一个计算机可读或计算机可用存储介质上,或者可替换地,可以被提供在分布于可能具有多个节点的大系统中的多个计算机可读或计算机可用存储介质上。“存储介质”意图是单个存储介质或多个存储介质。这样的一个或多个计算机可读或计算机可用存储介质被认为是物品(或制造品)的一部分。物品或制造品可以指的是任何所制造的单个部件或多个部件。在图2A中,计算机200接收来自外部源的输入数据流205,或者可能根据预定备份调度表已选择了输入数据流205以供备份。输入数据流205被划分成更小的数据块。再次,作为示例而非限制,每个数据块的大小被设想为处在2与12kB之间,其中平均大小的数据块是近似4kB。然而,实施例不如此限于该实例。所述一个或多个处理器204可以应用分块模块202的分块算法以把输入数据流205划分成数据块以用于存储在块容器239-1、239-2、. . .、239-N中的一些和/或将被创建的块容器239中。分析可以由计算机200的处理器204执行,或者可以在离计算机200许多英里的远程位置处执行。如图2B的实施例中所示,块容器239-1、239-2、. . .、239_N包含从输入数据流205的先前分析过的分割的备份产生的数据块。作为示例而非限制,在块容器数据251-1中存在数据块A1到数据块Aa。在块容器数据251-2中存在数据块B1到数据块Bb。在块容器数据251-N中存在数据块M1到数据块M。。在图2B中,在每个块容器索引中还可以包括附加的数据,比如位于关联的块容器数据内的数据块的散列的列表、用于每个数据块的起始地址的偏移等等。在接收到输入数据205时,由应用分块技术的分块模块202划分输入数据。在Athicha Muthitacharoen等人的“A Low-Bandwidth Network File System^CProceedingsof the 18th (ACM) Symposium on Operating Systems Principles, pp. 174-187,2001 年)和美国专利No. 7,269,689中描述了分块技术的实例。对于由对输入数据流205分块而产生的每个数据块,处理器204或者可能是远离计算机200的处理器或其他计算资源可以执行数学函数以对于每个数据块产生散列。在本发明的一些实施例中,处理器204执行散列函数,比如MD5、SHA-I、乘法散列、旋转散列、或者其他合适方法。然而,实施例不限于此。
·
图3是根据本发明的一个实施例的计算机的基于块的去重的方法的流程图。图3中描述的方法可以被实施在计算机和/或备份系统上,比如图2A和2B中示出的系统。所述系统可以是单节点计算机系统或者多节点、分布式计算机系统。这样的系统可以包括处理器资源和存储器资源(例如易失性存储器和/或非易失性存储器)以用于执行存储在非瞬时计算机可读介质中的指令。在这里所描述的动作可以由存储在存储器资源中并由处理器资源执行的计算机可执行指令来执行。另外,还可以使用具有逻辑的形式的硬件来实施动作,所述硬件包括一个或多个专用集成电路(ASIC)。在图3的步骤310中,所述方法包括接收散列集合,其中所述散列集合中的每个散列是从输入数据块集合中的数据块导出的。正如读者将认识到的那样,在至少一个实施例中,传入数据流被分割成传入数据块集合。如果被使用在这样的实施例中的话,传入数据流可以使用驻留在不同机器上的分块模块进行分割并且从外部源接收,或者可以是从该机器内部的源(例如从根据预定调度表针对备份选择的所存储的计算机程序的文件备份操作)接收的传入数据流。分析由所述分割成数据块的过程(称作分块)产生的数据块,以确定可以被用来把每个数据块与其他数据块进行区分的散列。该分析产生散列集合,其每个散列是从通过对输入数据流进行分块而产生的输入数据块集合中的数据块导出的。所述散列集合由计算机系统200的采样模块接收。如果所述分块是在不同的机器上进行的,则这可能需要通过网络传送所述散列集合。如框320中所示,所述方法包括对所述散列集合进行采样以形成采样散列集合,例如根据采样算法对散列进行采样以产生第一散列集合。作为示例而非限制,只选择前五个比特等于00000的那些散列以用于进一步处理。在本发明的其他实施例中,可以根据任何其他标准对散列进行采样。因此,也可以对其中前五个比特等于11111、010101或者任何其他组合的散列进行采样。此外,虽然对于该实例已经选择了五个比特,但是可以使用根据更少数目的比特(例如3个)或更大数目的比特(例如7个)的值的采样。如框330中所示,所述方法包括通过使用索引(例如稀疏索引206)识别出保存具有处于所述采样散列集合中的散列的数据块的数据块容器。换句话说,识别出被布置在存储介质设备上的保存具有包含在所述采样散列集合中的散列的数据块的数据块容器。在一些情况下,无法识别出所有这样的容器。在一个实施例中,可以通过在稀疏索引206中依次查找所述采样散列集合中的每个来识别出容器;这产生已知包含具有处在所述采样散列集合中的散列的至少一个数据块的容器的容器ID的列表。在框340中,所述方法包括把所识别出的数据块容器中的至少一个的索引加载到存储器中。在一个实施例中,在步骤330中识别出的所有数据块容器的块容器索引被加载到存储器中。在其他实施例中,在步骤330中识别出的数据块容器的块容器索引中的仅仅一些被加载到存储器中。要加载哪些数据块容器索引可以取决于已知每个数据块容器包含其散列处于所述采样散列集合中的多少数据块。作为示例而非限制,(图2B的)数据块容器251-1可能包括具有包含在所述采样散列集合中的散列的10个数据块。另外,数据块容器251-2可能包括具有包含在所述采样散列集合中的散列的8个数据块。最后,数据块容器251-N可能包括具有包含在所述采样散列集合中的散列的2个数据块,以及其他数据块容器可能不包含具有处在所述采样散列集合中的散列的数据块。因此,在“加载最佳的2个容器”策略下,只有数据块容器索引241-1和241-2可能被选择以用于加载。然而,也可以加载更大数目的数据块容器索引(例如5个)或者更小数目的数据块容器索引(例如I个或更少)以供进一步分析。选择要加载哪些所识别出的数据块容器的索引的许多其他方法是可能的。如框350中所示,所述方法包括确定输入数据块集合中的哪些散列对应于存储在与所加载的索引相对应的数据块容器中的数据块。在一个实施例中,这是通过测试每个输入数据块的散列以查看它是否被包含在任何一个所加载的数据块容器索引241中来实现的。如果输入数据块D具有散列H并且发现所加载的数据块容器索引241-1包含散列H,则知道块容器数据251-1 (不一定被加载)包含输入数据块D的拷贝。如框360中所示,所述方法包括至少部分地基于确定输入数据块集合中的哪些散列对应于存储在与所加载的索引相对应的数据块容器中的数据块,决定应当存储输入数据块集合中的哪些数据块。在一个实施例中,决定存储为之确定其散列不对应于被存储在与所加载的索引相对应的数据块容器中的一个的数据块的任何输入数据块。这对应于存储在其索引被加载的数据块容器中不存在其已知拷贝的数据块。如框370中所示,所述方法包括把已决定要被存储的输入数据块集合中的块存储在一个或多个数据块容器中。在一个实施例中,这可以通过对于数据块放置使用简单附加算法来实现。在一个或多个实施例中,所述方法还包括把输入数据流的一部分分割成输入数据块集合;以及在所述接收步骤之前对于输入数据块集合中的每个数据块确定散列以形成所述散列集合。然而,实施例不限于此。在一个或多个可替换实施例中,所述方法包括请求已决定要被存储的输入数据块;以及接收已决定要被存储的输入数据块。在至少一个实施例中,所述稀疏索引把数据块的散列映射到数据块容器集合。正如读者将认识到的那样,在一个或多个实施例中,稀疏索引206仅仅对于已被采样的散列记录信息。在一个或多个实施例中,对所述散列集合进行采样以形成采样散列集合320在至少一个实施例中包括选择平均少于四分之一的散列。在一个或多个实施例中,决定应当存储输入数据块集合中的哪些数据块360包括如果确定对应于输入数据块的散列未被包括在所加载的索引中,则决定应当存储该输入数据块。自然地,这包括如果确定输入数据块的散列被包含在所加载的索引中,则决定
10不应当存储该输入数据块。在一个或多个实施例中,决定应当存储输入数据块集合中的哪些数据块还包括使用容器封顶(capping)来确定将在其中存储所述输入数据块集合的第一数据块容器集合,正如上面在共同待审的、共同转让的美国申请号12/759,174中所描述的那样,其具有共同的发明人并且在2010年4月13日提交(其被全文结合在此以作参考);以及决定存储不具有已被存储在第一数据块容器集合中的拷贝的输入数据块360。第一数据块容器集合可以仅仅包含其索引已被加载的数据块容器以及当前打开的/新的数据块容器。同样,正如读者将认识到的那样,在一个或多个实施例中,存储输入数据块集合中的数据块370可以包括使用基于局部性的分配算法来把将被存储的输入数据块分配给数据块容器,正如在2007年10月25日提交的、共同转让的、共同待审的PCT申请号US2007/022585中所描述的那样;以及把将要存储的输入数据块存储在所分配的数据块容器中。基于局部性的分配算法尝试把新块(即已在步骤360中决定存储的块)分配给现有 的块容器,这至少部分地基于包含处于其附近的旧块的块容器。举例来说,如果新块Z在输入数据流205中紧跟在旧块A1之后,则基于局部性的分配算法可以尝试把块Z放置在与已知将把A1包含在其中的相同块容器(即容器239-1)中。如果容器239-1是满的或者没有用于块Z的空间,则这样的放置可能是不可能的。基于局部性的分配算法可以把距离考虑进去;例如在流...B3 X Y Z V A1...中,所述算法可以尝试把Z放置在容器239-2之前的容器239-1中,这是因为来自容器239-1的旧块A1比来自容器239-2的旧块B3更靠近块Z。上面描述的本发明的一个或多个实施例可以包括至少三个部分基于容器的去重(对于本公开是新颖的),容器封顶(它的实例在共同待审的、共同转让的美国申请号12/759,174中被描述,该美国申请与本申请具有共同的发明人并且于2010年4月13日提交),以及基于局部性的块分配(它的实例在2007年10月25日提交的、共同待审的、共同转让的PCT申请号US2007/022585中被描述)。上面的详述、实例和数据提供了对本公开的方法和应用以及系统和方法的使用的描述。由于可以在不背离本公开的系统和方法的精神和范围的情况下做出许多实例,因此本说明书仅仅阐述了许多可能的实施例配置和实施中的一些。虽然在这里已经示出和描述了特定实例,但是本领域普通技术人员将认识到,可以用被计算来实现相同结果的布置来替代所示出的特定实例。本公开意图覆盖本公开的一个或多个实例的适配或变型。应当理解,上面的描述已经以说明性的方式而非限制性的方式被做出。对于本领域技术人员而言,一回顾上面的描述,上面的实例与未在这里具体描述的其他实例的组合将是显而易见的。本公开的一个或多个实例的范围包括在其中使用上面的结构和方法的其他应用。因此,应当参照所附权利要求书连同这样的权利要求书被赋予的等同物的完整范围来确定本公开的一个或多个实例的范围。已经参照附图详细地描述了用于协作信息服务的系统和方法的各种实例,其中相同的附图标记代表贯穿几个视图的相同的部分和组件。对各种实例的提及并不限制用于显示广告的系统和方法的范围,其仅由附于此的权利要求书的范围来限制。另外,在本说明书中所阐述的任何实例不意图是限制性的,而仅仅阐述所要求保护的用于协作信息服务的系统和方法的许多可能实例中的一些。CN 102934097 A



9/9页在整个说明书和权利要求书中,下面识别出的含义不一定限制术语,而仅仅提供所述术语的说明性实例。“一”、“一个”和“所述”的含义包括复数引用,并且“在...中”的含义包括“在...中”和“在...上”。如在这里所使用的短语“在一个实施例中”不一定指代相同的实施例,尽管它可能指代相同的实施例。
在前述的详细描述中,出于简化本公开的目的,一些特征在单个实施例中被集合在一起。这一公开方法不应当被解释为反映出本公开的所公开实例必须比在每个权利要求中明确记载的使用更多特征的意图。而是,正如后面的权利要求书所反映出的那样,本发明的主题在于少于单个公开实施例的所有特征。因此,后面的权利要求书由此被结合到详细描述中,其中每个权利要求独立作为分开的实施例。
1权利要求
1.一种用于数据去重的方法,包括 接收散列集合310/206,其中所述散列集合中的每个散列是从输入数据块集合205中的数据块251导出的; 对所述散列集合进行采样320/215以形成采样散列集合241 ; 使用索引330/241识别出保存具有处在所述采样散列集合241中的散列的数据块的数据块容器251 ; 把所识别出的数据块容器中的至少一个的索引加载340到存储器210中; 确定350所述输入数据块集合205的哪些散列对应于存储在与所加载的索引241相对应的数据块容器251中的数据块; 至少部分地基于确定所述输入数据块集合205的哪些散列241对应于存储在与所加载的索引241相对应的数据块容器251中的数据块,决定应当存储360所述输入数据块集合中的哪些数据块;以及 把已决定要被存储的所述输入数据块集合205中的块存储370在一个或多个数据块容器251中。
2.根据权利要求I所述的方法,还包括 把输入数据流的一部分分割202/207/215成所述输入数据块集合;以及在所述接收步骤之前对于所述输入数据块集合中的每个数据块确定散列以形成所述散列集合219/206。
3.根据权利要求I所述的方法,还包括 请求已决定要被存储的输入数据块207 ;以及 接收已决定要被存储的输入数据块210。
4.根据权利要求I所述的方法,其中,所述索引仅仅对于已被采样的散列215/219/241把数据块的散列映射到数据块容器集合239的记录信息。
5.根据权利要求I所述的方法,其中,形成采样散列集合的所述散列集合还包括选择平均少于四分之一的散列219。
6.根据权利要求I所述的方法,其中,决定应当存储所述输入数据块集合中的哪些数据块还包括如果确定对应于输入数据块的散列未被包括在所加载的索引241中,则决定应当存储该输入数据块。
7.根据权利要求6所述的方法,其中,决定360应当存储所述输入数据块集合205中的哪些数据块的步骤还包括如果确定输入数据块的散列被包含在所加载的索引241中,则决定不应当存储该输入数据块。
8.根据权利要求6所述的方法,其中,决定应当存储所述输入数据块集合中的哪些数据块还包括 使用容器封顶239来确定将把所述输入数据块集合存储在其中的第一数据块容器集合251 ;以及 决定存储210不具有已被存储在第一数据块容器集合251中的拷贝的输入数据块。
9.根据权利要求I所述的方法,其中,存储所述输入数据块集合中的数据块包括 使用基于局部性的分配算法221把将被存储的输入数据块分配给数据块容器251 ;以及把将要存储的输入数据块210存储在所分配的数据块容器251中。
10.一种用于执行数据去重的系统200,包括 采样模块215,其形成对应于从数据流205的数据块采样的散列的采样散列集合; 一个或多个块容器索引241,其识别出保存具有处在所述采样散列集合中的散列的数据块的数据块容器251 ; 用于把所识别出的数据块容器215中的至少一个的索引207加载到存储器203中的逻辑; 用于确定所述输入数据块集合的哪些散列对应于存储在与所加载的索引241相对应的数据块容器251中的数据块的逻辑239 ;以及 用于至少部分地基于确定所述输入数据块集合的哪些散列对应于存储在与所加载的索引241相对应的数据块容器251中的数据块来决定应当存储所述输入数据块集合中的哪些数据块的逻辑221/231/239。
11.根据权利要求10所述的系统,还包括用于把已决定要被存储的输入数据块集合中的数据块存储在一个或多个数据块容器251中的逻辑207。
12.根据权利要求10所述的系统,还包括用于对被存储在布置于存储介质210上的数据块容器251中的数据块的散列215进行采样的逻辑。
13.根据权利要求10所述的系统,还包括用于决定应当存储所述输入数据块集合中的哪些数据块的逻辑239,所述逻辑还基于 容器封顶信息251以确定将把所述输入数据块集合存储在其中的第一数据块容器集合;以及 基于确定输入数据块不具有已被存储在第一数据块容器集合251中的拷贝而存储207/204输入数据块。
14.根据权利要求10所述的系统,还包括用于存储所述输入数据块集合中的数据块的逻辑,所述逻辑是基于 基于局部性的分配信息221/239,其把将被存储的输入数据块分配给数据块容器251 ;以及 把将要存储的输入数据块存储207/204在所分配的数据块容器251中。
15.一种具有在其上存储的计算机可执行指令的非瞬时计算机可读介质,所述计算机可执行指令由处理器执行以 对散列集合进行采样320/215以形成采样散列集合241,其中所述散列集合中的每个散列是从输入数据块集合205中的数据块251导出的; 使用索引330/241识别出保存具有处在所述采样散列集合241中的散列的数据块的数据块容器251 ; 把所识别出的数据块容器中的至少一个的索引加载340到存储器210中; 确定350所述输入数据块集合205的哪些散列对应于存储在与所加载的索引241相对应的数据块容器251中的数据块;以及 至少部分地基于确定所述输入数据块集合205的哪些散列241对应于存储在与所加载的索引241相对应的数据块容器251中的数据块,决定应当存储360所述输入数据块集合中的哪些数据块。
全文摘要
一种用于数据去重的方法包括接收从输入数据块集合中的数据块导出的散列集合310。所述方法包括对所述散列集合进行采样320,使用索引识别出保存具有处在所述采样散列集合中的散列的数据块的数据块容器330,以及加载所识别出的数据块容器中的至少一个的索引340。所述方法包括确定哪些散列对应于存储在与所加载的索引相对应的数据块容器中的数据块350,以及至少部分地基于所述确定来决定应当存储所述输入数据块集合中的哪些数据块。
文档编号G06F13/14GK102934097SQ201080067520
公开日2013年2月13日 申请日期2010年10月8日 优先权日2010年6月18日
发明者K.埃什希, M.D.利利布里奇, D.M.富金德 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1