欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

使用索引劃分和協(xié)調(diào)來進行數(shù)據(jù)去重復的制作方法

文檔序號:6443571閱讀:153來源:國知局
專利名稱:使用索引劃分和協(xié)調(diào)來進行數(shù)據(jù)去重復的制作方法
技術領域
本發(fā)明涉及使用索引劃分和協(xié)調(diào)進行數(shù)據(jù)去重復。
背景技術
數(shù)據(jù)去重復(有時也稱為數(shù)據(jù)優(yōu)化)指的是減少需要被存儲在磁盤上或通過網(wǎng)絡進行傳送的數(shù)據(jù)的物理字節(jié)量,而不會損害原始數(shù)據(jù)的保真性和完整性,即字節(jié)上的減少是無損的并且原始數(shù)據(jù)可被完全恢復。通過減少存儲和/或傳送數(shù)據(jù)所需的資源,數(shù)據(jù)去重復因此導致(用于存儲和網(wǎng)絡傳輸?shù)?硬件成本以及數(shù)據(jù)管理成本(例如,備份)的節(jié)約。隨著數(shù)字存儲的數(shù)據(jù)的數(shù)量增長,這些成本節(jié)約變得重要。數(shù)據(jù)去重復通常使用用于消除持久存儲的文件內(nèi)部及其之間的冗余性的技術的組合。一種技術用于標識一個或多個文件中的數(shù)據(jù)的相同區(qū)域,并在物理上只存儲一個唯一區(qū)域(塊),而與文件相關聯(lián)地維持對該塊的指針。另一技術是例如通過存儲經(jīng)壓縮的塊來將數(shù)據(jù)去重復與壓縮混合。為了標識這些塊,存儲這些塊的服務器維持在該系統(tǒng)中這些塊的散列的散列索引服務。散列不具有位置性(locality),S卩,同一個文件中的各塊的塊散列是不相關的,對于給定塊的內(nèi)容的任何編輯創(chuàng)建非常不同的(不相關的)散列值。因此,傳統(tǒng)的數(shù)據(jù)庫技術, 諸如B樹索引,導致索引服務較差的性能。在存儲器中維持整個索引提供較好的性能,但是耗費太多資源。服務器存儲器資源為其他服務器應用(如,在主數(shù)據(jù)去重復情形中)所需要,且用于高速緩存。之前的面向備份的數(shù)據(jù)去重復優(yōu)化依靠前瞻高速緩存(look-ahead cache)來減少在服務器上訪問該索引所使用的資源量。然而,數(shù)據(jù)去重復不再受限于數(shù)據(jù)備份的情形, 且發(fā)展為像其他存儲器設備那樣被用作被訪問的主數(shù)據(jù)存儲器群集。僅使用前瞻高速緩存來減少資源使用并不是適當?shù)慕鉀Q方案。

發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容以便以簡化形式介紹將在以下的具體實施方式
中進一步描述的一些代表性概念。本發(fā)明內(nèi)容不旨在標識出所要求保護的主題的關鍵特征或必要特征,也不旨在以限制所要求保護的主題的范圍的任何方式來使用。簡言之,此處所描述的主題的各方面涉及去重復技術,通過該去重復技術將散列索引服務的索引劃分為各個子空間索引,以使得一次將少于散列索引服務的所索引的數(shù)據(jù)集的整個范圍加載到存儲器中,從而節(jié)省可用存儲器。當要被去重復的數(shù)據(jù)被接收并分塊(chunk),并且有可能還被壓縮時,子空間索引確定對該塊計算的散列值是否與主存儲器(例如,RAM)高速緩存中的條目的散列值相匹配。如果是,則返回可用于定位現(xiàn)有塊的信息,否則該塊作為新塊存儲在塊存儲中,并且對應于該散列值的條目與對該塊的引用相關聯(lián)地被添加到該子空間索引。在一方面,可基于一個或多個準則來將散列索引服務劃分成多個子空間索引,該準則可與要被去重復的數(shù)據(jù)如何劃分相對應。示例分割/劃分準則包括數(shù)據(jù)的文件類型、 數(shù)據(jù)類型、位置、創(chuàng)建該數(shù)據(jù)的應用、文件使用模式數(shù)據(jù)、文件訪問模式數(shù)據(jù)、文件所有者、 文件用戶類型、名字空間、文件內(nèi)容、文件元數(shù)據(jù)、學習到的準則或自適應準則、或可被推斷為該文件的特征的任何其他類型的信息、以及這些的任何組合。在另一方面,可將一個子空間周期性地(或偶爾地)與一個或多個其他子空間進行協(xié)調(diào)以從是經(jīng)協(xié)調(diào)的子空間的子空間中消除任何重復條目,并相應地刪除其相關聯(lián)的 (重復的)塊。這種重復的數(shù)據(jù)塊可能跨越子空間出現(xiàn),因為各子空間可能是被分開地去重復的,直到并且及至協(xié)調(diào)點。作為協(xié)調(diào)的一部分,對與重復條目相關聯(lián)的塊的每個引用被更新以引用剩余的塊。可以用各種方式來緊湊化(compacted)和/或用新的數(shù)據(jù)蓋寫經(jīng)協(xié)調(diào)的子空間和從中刪除過塊的塊存儲。該子空間和要協(xié)調(diào)的一個或多個其他子空間可基于類似子空間類型、類似子空間簽名、和/或基于該子空間是未經(jīng)協(xié)調(diào)的子空間以及其他子空間已在之前與彼此協(xié)調(diào)過來選擇。簽名包括子空間散列的緊湊表示,并且可以用多種方式來計算/確定,例如,基于最小散列計算、布隆過濾器(bloom filter)、最小散列和布隆過濾器組合等等。結合附圖閱讀以下具體實施方式
,本發(fā)明的其他優(yōu)點會變得顯而易見。


作為示例而非限制,在附圖中示出了本發(fā)明,附圖中相同的附圖標記指示相同或相似的元素,附圖中圖I是表示被配置為用于使用基于子空間的散列索引服務進行去重復的數(shù)據(jù)存儲服務的示例組件的框圖。圖2-4是示出在數(shù)據(jù)去重復中使用的子空間和塊存儲之間的關系的表示。圖5是表示用于數(shù)據(jù)去重復的示例步驟的流程圖,其中少于整個索引的被高速緩存,從而便于基于子空間的去重復。圖6是表示用于協(xié)調(diào)兩個子空間以定位與塊存儲中的等同塊相對應的等同條目的示例步驟的流程圖。圖7是表示其中可實現(xiàn)此處描述的各種實施例的示例性非限制聯(lián)網(wǎng)環(huán)境的框圖。圖8是表示其中可實現(xiàn)此處所描述各種實施例的一個或多個方面的示例性非限制計算系統(tǒng)或操作環(huán)境的框圖。
具體實施例方式此處描述的技術的各方面一般涉及一種通過將全局散列索引劃分為多個子空間而操作的去重復系統(tǒng)。所述子空間中的每一個可被存儲在輔助存儲設備中,例如,在硬盤上。取決于當前正在使用的數(shù)據(jù)集,子空間或子空間的一部分可被活動地加載到存儲器中, 例如,基于當前系統(tǒng)工作負載、資源可用性、以及哪個子空間是索引數(shù)據(jù)塊所需要的。當一子空間填滿時,該子空間可以變?yōu)榭梢杂糜诙ㄎ粔K(例如,作為高速緩存)的只讀子空間, 而新的活動子空間被創(chuàng)建以處理新的塊。注意,所密封的子空間經(jīng)常是相同大小的,但不必然如此。此外,不同子空間可被協(xié)調(diào)以增加去重復的質量(例如,其相應數(shù)據(jù)塊的更高去重復率),并由此增加數(shù)據(jù)存儲服務器的可縮放性。為此目的,考慮被選擇來進行協(xié)調(diào)的兩個子空間,其中一個子空間作為源,一個子空間作為目的地。將一個子空間的散列與另一子空間的散列進行對比以尋找等同的塊,其中從一個塊存儲移除任何等同的塊、從相應的子空間之一中可能地移除條目、并將對已移除的塊的引用更新為指向剩余的塊。注意,重復該系統(tǒng)中所有子空間之間的協(xié)調(diào)操作將最終檢測到該系統(tǒng)中的所有的重復,因此最大化從數(shù)據(jù)去重復獲得的節(jié)省。在一個方面中,為了預測哪些子空間可彼此良好地協(xié)調(diào),協(xié)調(diào)過程計算每個子空間中的索引的簽名。該簽名可被數(shù)據(jù)存儲服務器用來標識哪些子空間被選擇以進行協(xié)調(diào)。 例如,此子空間選擇過程可首先處理在協(xié)調(diào)時最可能給出最多空間節(jié)省的子空間。因為子空間簽名可能非常緊湊,所以在非高峰時間,該數(shù)據(jù)存儲服務器可以能夠承受加載所有子空間的簽名,以使得它能夠最優(yōu)地標識哪些子空間是好的去重復候選。每個子空間可被分開優(yōu)化,其中“熱”的子空間(其中內(nèi)容被修改或規(guī)則讀取)針對性能進行優(yōu)化,而“冷”的子空間(其中內(nèi)容包括較舊的快照或不頻繁訪問的內(nèi)容)針對數(shù)據(jù)去重復質量進行優(yōu)化。 子空間可以在非高峰時間被協(xié)調(diào)以改善數(shù)據(jù)去重復性能和/或質量。應當理解的是,此處的任何示例均是非限制的。因此,本發(fā)明不限制于在此描述的任何具體的實施例、方面、概念、結構、功能或示例。相反,此處所描述的實施例、方面、概念、 結構、功能或示例中的任一個都是非限制性的,并且本發(fā)明一般能夠以在數(shù)據(jù)處理、數(shù)據(jù)索引和數(shù)據(jù)去重復方面提供好處和優(yōu)點的各種方式來使用。圖I示出知曉內(nèi)容(content-aware)的數(shù)據(jù)去重復數(shù)據(jù)存儲系統(tǒng)的示例組件,諸如在數(shù)據(jù)/文件存儲服務102中實現(xiàn)。服務102接收數(shù)據(jù)104 (文件、團塊等),且去重復邏輯106處理數(shù)據(jù)以進行去重復。為此目的,去重復邏輯106向分塊模塊108提供數(shù)據(jù)104, 分塊模塊108將該內(nèi)容處理為塊,諸如根據(jù)文件的結構(例如,將媒體文件劃分為媒體首部和媒體主體)、或通過使用基于在滑動窗上重復計算的快速散列技術(這樣的快速散列函數(shù)包括CRC和Rabin函數(shù)族)來對文件內(nèi)容分塊的算法,其中塊是在散列函數(shù)和當前塊的大小/內(nèi)容滿足某些試探法(heuristic)時選擇的。在散列函數(shù)滿足某一條件的位置處以取決于數(shù)據(jù)的方式來一般地確定塊邊界。接下來的描述是關于一個塊110的,但是可以理解的是數(shù)據(jù)一般被劃分為多個塊。去重復邏輯106將塊110傳給求散列機制112,求散列機制112計算塊的散列(被稱為塊散列114)。強散列函數(shù),如密碼安全的SHA-256或SHA-512散列函數(shù)等(其確保了極低的散列間沖突的可能性)可被用作唯一地標識塊110的塊散列114。注意,使用這樣的安全散列,消除了散列沖突的可能性,例如,散列沖突可能比在當前可用的最可靠的硬件的情況下的硬件誤差可能小約30個數(shù)量級。將塊散列114提供給散列索引服務116 (其包括或耦合至協(xié)調(diào)機制117)。如果在散列索引服務116中找到了塊散列114( S卩,已經(jīng)存在),塊110的復制副本被認為已經(jīng)被存在塊存儲118中,而無需再存儲當前的塊。相反,對這個塊的任何引用可僅引用之前的、現(xiàn)有的塊。如果在散列索引服務116中沒有找到塊散列114,塊110被存入塊存儲118中,且塊散列114被存入散列索引服務116。可以容易地理解,給定隨著時間的充足的數(shù)據(jù),通過引用塊而不是維持同一數(shù)據(jù)塊的很多分開的實例可節(jié)省大量存儲。塊還經(jīng)常被壓縮,從而保存甚至更多存儲;注意,可在壓縮之前對未經(jīng)壓縮的塊計算散列,和/或可在壓縮之后計算散列。此處描述的技術涉及散列索引服務116的架構和算法,尤其涉及基于子空間的散列索引服務,以及子空間協(xié)調(diào)的概念。一般而言,子空間是整個系統(tǒng)的全局索引的較小的一部分,并大體與要被去重復為多個數(shù)據(jù)集的可用數(shù)據(jù)的初始劃分(分割)相對應。該劃分是被普通計劃的以使得與任何子空間相對應的數(shù)據(jù)可能良好地與該子空間的其他數(shù)據(jù)去重復(許多塊將匹配)。因此該全局數(shù)據(jù)塊的散列分為子空間索引,例如,每個相應的數(shù)據(jù)劃分一個子空間索引??苫趯嶋H上任何的準則將該數(shù)據(jù)/散列劃分為子空間,諸如文件類型(例如,通過擴展名)、數(shù)據(jù)類型(例如,圖像、文本文檔等)、位置(例如,機器、卷)、創(chuàng)建該文件的應用、文件使用/ 訪問模式(如最后修改時間等)、用戶ID(文件所有者)、用戶類型、名字空間(例如,磁盤卷)、內(nèi)容和/或元數(shù)據(jù)(例如,以群集類似文件)、文件分類信息(通過人工或自動方法提供的)、學習到的/自適應的準則(例如,從對此系統(tǒng)或另一系統(tǒng)上先前去重復的數(shù)據(jù)的分析的外部反饋)、或可被推斷或確定為對該文件的特征的任何其他信息類型。注意,上述劃分的一些或全部的任何組合可被使用,例如,在上一個月修改的具有相同文件類型的數(shù)據(jù)。通過示例,若假定相關數(shù)據(jù)經(jīng)常在同一時間幀附近出現(xiàn)在該存儲系統(tǒng)中,則使用文件的最后修改或最后訪問時間作為準則來將文件名字空間劃分為索引子空間可能是有用的劃分方案。例如,考慮作為附件發(fā)送到一百個用戶的文件,這些文件中的八十個文件將該文件保存到它們自己的相應的文檔儲存庫。該系統(tǒng)可將該名字空間劃分成時間范圍并將每個時間范圍作為子空間來對待。作為另一示例,通過文件類型來劃分基于如下假設不同的類型或類型組有更大的幾率在其自身間具有重復的塊。例如,基于文本的格式(例如,.〖1〖、.11111、.1^1111等)可與彼此良好地去重復,但是不能與用zip格式維持的文件良好地去重復。因此,系統(tǒng)(例如,管理員)可以定義有關的文件組,諸如{all text formats}、{0ffice2007, zip}等等, 并將屬于一組的文件作為一子空間來對待。通過將數(shù)據(jù)劃分以使得相應的散列索引是子空間,子空間索引能夠被存儲在輔助設備(如硬盤)中,而某種形式的活動子空間索引被加載到快速存儲器(例如,RAM)中以作為高效(在線)散列索引服務來執(zhí)行。例如,可在將一組數(shù)據(jù)的文件/團塊(blob)發(fā)送到服務102之前,可以通過其劃分(及相應的子空間)對數(shù)據(jù)進行分組,以使得只在組改變時活動索引才改變。此外,在開始優(yōu)化會話之前,可使用各種方法來選擇要加載哪些子空間 (將該子空間與將要被去重復的文件相關,例如,基于插入時間),以在后續(xù)去重復過程期間最大化節(jié)省。數(shù)據(jù)的劃分和子空間索引降低了去重復比率(即,減少了去重復空間節(jié)省),因為等同的塊可被不同索引子空間索引并因此存儲在多個位置。此外,因為子空間很小(因為能夠通過可配置參數(shù)來控制其大小),所以系統(tǒng)能夠確保對于去重復過程的整個持續(xù)時間所加載的子空間將適合于主存儲(RAM)。如同下面描述的,不同子空間可被協(xié)調(diào)(例如, 當在CPU、存儲器和I/O負載方面服務器的負載很低時在離線操作中),以使得存在于兩個 (或更多)子空間中的任何等同塊的僅一個副本需要被維持,而其他副本被丟棄。盡管在一些環(huán)境中每個子空間可以能夠與每個其他子空間相協(xié)調(diào),然而在其他環(huán)境中存在太多子空間而不能用這種方式來協(xié)調(diào)所有子空間。如同下面描述的,每個索引子空間可由簽名標識, 其中使用簽名相似度(例如,矢量距離)/匹配來選擇那些簽名看上去具有重大去重復幾率并因此將很可能與彼此良好協(xié)調(diào)的子空間來進行協(xié)調(diào)。圖2示出了被配置成用于子空間劃分的散列索引服務116的示例架構設計。如同上面描述的,數(shù)據(jù)/文件存儲服務102包括塊存儲118和散列索引服務116,其中塊存儲118 維持塊數(shù)據(jù),該塊數(shù)據(jù)是一個或多個文件中的數(shù)據(jù)的區(qū)域。塊存儲118可包含兩個或更多個組件存儲,例如S1, S2,……,Sn,其中每個存儲Si包括由一組塊ID cia, cij2,……,Cijk 標識的一組塊,如圖3中所示。塊ID Cijj標識塊j在存儲Sj中的位置,并且可以與指向它所屬的文件的可任選向后引用鏈接相關聯(lián)。散列索引服務116包括子空間索引P1, P2,……,Pm,其中每個子空間P」包括一組散列hjyhp,……,hw以及相關聯(lián)的塊ID cja, cJj2,……,Cjil,如在圖2和圖4中大體表示的。注意,每個塊ID對應于一塊存儲位置,如圖2中的虛線箭頭所表示的(盡管為了簡明只示出了一個這樣的箭頭)。如同下面描述的,為了去重復優(yōu)化的目的,每個子空間Pj 還可以用簽名Sigj來標識。子空間Pj還可包括多個其他的經(jīng)二次采樣的(sub-sampled) 表示,如同下面描述的。在系統(tǒng)中有可能在塊存儲和索引子空間之間建立對應關系,例如,每個塊存儲Si 對應于一個且僅一個索引子空間Pp然而,絕對的對應關系不是必須的。還有可能允許索引子空間P」指向多個塊存儲中的塊(即,使塊ID屬于多個塊存儲)。還有可能塊存儲Sj中的塊被多個子空間索引。然而,如果塊存儲駐留在具有低隨機訪問性能(例如,與SSD相比) 的硬盤驅動器或其他設備上,并且期望良好的讀取性能的話,則可能期望限制索引子空間 Pj所指向的塊存儲的數(shù)量。如果數(shù)據(jù)/文件存儲設備102包括多個機器,則可向每個機器分配多個塊存儲和多個索引子空間??墒褂盟饕铡缤ㄟ^具有故障轉移支持的集中式索引服務實現(xiàn)的 (例如,經(jīng)由Windows Server 2008中的群集服務),或通過分散式索引服務實現(xiàn)的—— 來將特定塊存儲Si或特定索引子空間P」分配給一機器。通過摘要的方式并且提供一些更多的細節(jié),圖5是表示當新文件被寫入被配置成用于子空間劃分的文件存儲服務102中時發(fā)生的步驟的流程圖。在步驟502,向該文件分配塊存儲和索引子空間以使得新塊(如果有任何新塊)及其散列索引可被存放。步驟504表示使用知曉內(nèi)容的分塊模塊來將文件分割為各個塊(盡快也可能整個文件是單個塊)。在步驟506,經(jīng)由安全散列服務(例如,SHA-256)來計算塊散列。注意,在計算塊散列之前,一個選項是壓縮該塊(如果適當)。如經(jīng)由步驟508和510所表示的,對照散列索引服務的一個或多個當前高速緩存來檢查該塊散列,該散列索引服務包括用于添加任何新散列的當前子空間,以及當存儲器允許時可能的其他(例如,只讀)子空間。如果在步驟510該塊散列存在于該散列索引服務的當前高速緩存中,在步驟512返回先前塊的相關聯(lián)塊ID。否則,在步驟514返回空值, 從而指示在該散列索引服務的當前高速緩存中沒有找到該塊散列。注意,經(jīng)由子空間索引(以及如在前面提到的題為“Adaptive Index for Data Deduplication(用于數(shù)據(jù)去重復的自適應索引)”的專利申請中大體描述的可能的其他因素),可以只將整個散列索引的一部分通過該散列索引服務保持在存儲器高速緩存中,即,該散列索引服務可選擇性地高速緩存系統(tǒng)中的子空間的散列的一部分。因此,有可能塊散列的確存在于該散列索引服務的輔助存儲中,但是通過檢查當前高速緩存不會立即找到。 該散列索引服務的塊散列訪問(步驟508)觸發(fā)散列索引服務中的這種前瞻高速緩存的高速緩存管理。取決于散列命中模式,該散列索引服務取決于可用存儲器資源來智能地管理當前高速緩存。最近最少使用的子空間的散列不被高速緩存,從而留下存儲器來高速緩存更活動地使用的子空間。此外,較不頻繁使用的子空間中的訪問可被二次采樣(如在前面提到的題為“Adaptive Index for Data Deduplication(用于數(shù)據(jù)去重復的自適應索引)” 的專利申請中大體描述的),以減少存儲器消耗。注意,除了正在其中添加新散列的當前子空間之外,該散列索引服務中的其他子空間可以是只讀的,在該事件中高速緩存替換策略是用于只讀高速緩存的,只讀高速緩存的實現(xiàn)和管理是相對直接的。進一步注意,高速緩存管理可使用與該子空間相關聯(lián)的簽名。步驟516表示可任選地壓縮該塊,例如經(jīng)由LZW算法或其變型;(注意,塊壓縮可反而在步驟506之前進行)。對于不同類型的數(shù)據(jù),該壓縮可以不同。進一步注意,不是所有數(shù)據(jù)都良好地壓縮,并且因此可以對某些類型的數(shù)據(jù)不執(zhí)行步驟516,或者可以完全不執(zhí)行步驟516。如步驟518所表示的,當散列索引服務返回空(步驟514)時,該塊被存放到該塊存儲,而返回指示該存儲中的塊的位置(偏移量)的塊ID。在步驟520,該塊的散列和塊ID 被存放在該散列索引服務的當前子空間中。注意,在此過程中,在該塊被認為已被成功寫入之前,只有在步驟518處的塊存儲寫入操作需要被持久存儲。可以用懶惰方式將塊散列和塊ID對寫入(步驟520)到該散列索引服務的當前子空間。在該子空間的寫入操作失敗的事件中(例如,由于電源故障等),該散列索引服務可掃描該塊存儲并重構該塊散列和塊ID 對以重建該散列索引服務的索引子空間的未寫入部分。步驟522和523返回到步驟506以為任何剩余塊重復該過程。當整個文件的所有塊已經(jīng)被持久存儲在塊存儲中時,或已被用塊ID發(fā)現(xiàn)是重復副本時,則在步驟524返回整個文件的所述組塊ID。這些被用于形成該文件的流映射,以允許經(jīng)由塊ID在需要時從該塊存儲訪問該文件數(shù)據(jù)。在此階段的一種替代實現(xiàn)是反而返回整個文件的各塊的塊散列,以及當前子空間。該替代方案使用流映射中的散列來標識這些塊。該替代實現(xiàn)具有優(yōu)點和缺點,如此處所述。更具體而言,存在基于子空間的散列索引服務的替代實現(xiàn),其中塊、塊id、散列和引用計數(shù)有不同的實現(xiàn)選擇。如此處大體描述的,在數(shù)據(jù)去重復中,塊是數(shù)據(jù)去重復的基本單元,而去重復是通過找到具有相同散列值的塊并且只存儲該塊的一個副本來實現(xiàn)的。在一種簡單實現(xiàn)中,塊不重疊。也如此處所描述的,每個塊被用塊ID標識,塊ID是文件存儲服務中用于定位該塊的引用。因為每個塊被存儲在塊存儲中,該塊ID是數(shù)字對(k,off),該數(shù)字對將該塊標識為被存儲在塊存儲Sk中、在偏移量off處。每個塊被其散列唯一標識,該散列一般是通過對經(jīng)壓縮的塊流應用散列函數(shù)來計算的;(在被稱為分層分塊的概念中, 父塊的散列還可通過對其子塊的散列值直接應用散列來計算)。文件存儲服務中的文件由合成它的塊標識。這可以采取塊ID或散列的形式。因此,該文件可被描述為
文件={塊ID1,塊 ID2,......,塊 IDJ或文件={散列i,散列2,......,散列J這兩種方案分別被稱為塊ID描述方案和散列描述方案。上面已經(jīng)大體描述了塊 ID描述方案,因此下面描述散列描述方案。在散列描述方案中,文件描述符包含相對引用,即該塊的散列。咨詢第二表,在此例中是散列索引服務中的< hash, chunk_id, ref_count > ( <散列,塊_id,引用_計數(shù) >)映射表,來獲得該塊的位置。這在文件訪問期間增加了一個附加的間接層,并可能降低文件訪問期間的讀取訪問性能。然而,優(yōu)點在于可以更快地執(zhí)行去重復操作(以及垃圾收集操作)。在散列描述方案中,不需要維持另一塊ID表。子空間直接對應于塊存儲。因為數(shù)據(jù)/文件存儲服務中的散列的數(shù)量可能很大,而該方案假定不是所有散列可被加載到主系統(tǒng)存儲器中,該文件描述符可進一步記錄存放該散列或稍后去重復其中的散列的子空間。通過子空間信息,文件存儲服務被給出它需要咨詢哪個子空間來取回相關塊的chunk_ id(塊_id)的提示。因此,一個文件標識符采用如下形式文件={散列丨,散列2,......,散列m,P1,......,PJ其中P1,......,Pk表示所述子空間的索引。當訪問該文件時,執(zhí)行查找操作,例
如,在散列索引服務中查找散列i,散列2,......,散列m來取回相關chunk_id (塊_id)信
肩、O注意,因為每個散列對應于唯一塊,所以當查找某個散列^時,如果找到與散列i相同但是在不同子空間中的散列P則可使用散列^的對應的塊ID來取回散列i。(對應于散列j和散列i的兩個塊是可去重復(deduplicable)的,諸如稍后在如下所述的協(xié)調(diào)期間。)。如果在散列索引服務的當前高速緩存中沒有找到對應的散列,則將子空間的散列
P1,......,Pk加載到當前高速緩存中。如果存儲器被耗盡,則移除最近最少使用的子空間
的散列以提供更多的存儲器。數(shù)據(jù)去重復的操作是直接的。當對照源子空間P」將目的地子空間Pi去重復時,源子空間P」的散列被加載到存儲器中。那么,對照源子空間P」的散列檢查目的地子空間Pi的每個散列。只要找到重復時,就移除它在目的地子空間中的散列。塊存儲S」上的相關聯(lián)塊存儲垃圾收集操作也能夠以直接的方式執(zhí)行,如下I.加載與塊存儲Sj相關聯(lián)的子空間P1,……,Pk的散列。將源塊存儲Sj的流復制到新目的地塊存儲Sk ;在子空間P1,……,Pk中找到其散列的塊被完全復制。在子空間 P1,……,Pk中沒有找到其散列的任何塊不被復制。2.在新目的地塊存儲Sk中用塊ID更新子空間P1,……,Pko3.然后可刪除源塊存儲S」。因為在散列描述方案中沒有向后引用鏈接,所以去重復優(yōu)化和垃圾收集操作兩者都是直接的。轉到子空間協(xié)調(diào)(其通常在系統(tǒng)具有相對低的工作負載以及可用的系統(tǒng)資源時的非高峰時間期間進行),可執(zhí)行子空間協(xié)調(diào)操作以找到并移除各子空間之間重復的條目,并因此移除重復的塊。注意,如果檢測到顯著的用戶和/或系統(tǒng)活動,則可中斷協(xié)調(diào)操作。 在中斷的情況下,散列索引服務將使用所述子空間中的一個,例如,如果子空間A和B在被協(xié)調(diào)時使用子空間A。存在各種執(zhí)行協(xié)調(diào)的方式,包括將每個子空間與每個其他子空間進行協(xié)調(diào)。注意, 可在同一時間將一子空間與多個子空間進行協(xié)調(diào),例如,當存儲器空間允許時。此外,注意不需要在同一時間,或者甚至在同一會話中,加載所有子空間,例如,可將子空間X對照子空間A、B和C進行協(xié)調(diào),然后稍后對照例如子空間D和E進行協(xié)調(diào)。協(xié)調(diào)子空間的另一種方式是將新子空間與已經(jīng)彼此進行過協(xié)調(diào)的其他子空間進行協(xié)調(diào)。例如,如果一次一個地將子空間添加到去重復系統(tǒng),則可對照其他子空間(例如, 它們同樣在每個被添加時一次一個地被協(xié)調(diào)過,并且不需要彼此再次協(xié)調(diào))來協(xié)調(diào)所添加的子空間等等。另一種方式是按照子空間的類型(例如,與該劃分相對應的)。例如,可基于具有相同文件類型或數(shù)據(jù)類型的那些來定義子空間的組。協(xié)調(diào)可限于同一組中的子空間,例如, 因為有可能用于文本數(shù)據(jù)的一組子空間中的各子空間能與彼此良好協(xié)調(diào),但是不太可能這些子空間與用于索引圖像數(shù)據(jù)的子空間良好協(xié)調(diào)。圖6是示出一個子空間與一個或多個其他子空間的協(xié)調(diào)的示例步驟的流程圖。步驟602表示將該一個或多個其他子空間加載到存儲器中作為索引;注意,索引在存儲器消耗方面可能是昂貴的,而掃描散列是便宜的因為它使用順序讀取I/O來掃描,并因此索引較小組的子空間并掃描較大的組是有利的。步驟604開始掃描子空間以進行協(xié)調(diào),例如,一次一個地順序選擇散列,并在該索引中查找匹配的散列(步驟606)。如果沒有找到任何匹配散列(步驟609),則選擇下一散列且該過程重復(步驟614)指導此子空間已被協(xié)調(diào)。如果在步驟608找到了匹配的散列,則步驟610將該子空間散列條目以及該塊標記為刪除。步驟612更新引用要被更新到新去重復的塊的塊的任何文件或其他實體的指針;注意,維持塊和引用該塊的文件的數(shù)據(jù)庫,從而可以找到并更新這些文件。當沒有文件或其他實體引用該塊時,可以安全地刪除該子空間散列條目和塊,例如,如下面關于步驟 616處的緊湊化所描述的。如同上面描述的,該過程經(jīng)由步驟614重復,直到已對照所加載的索引(一個或多個子空間的條目)協(xié)調(diào)了該子空間。此時,可執(zhí)行如步驟616所表示的緊湊化,盡管緊湊化可在稍后的時間進行,例如,在垃圾收集類型的操作中。緊湊化可通過將經(jīng)協(xié)調(diào)的子空間的剩余索引條目(即,沒有被標記為刪除/消除的那些)復制到新子空間來進行。一種替代方案是將這些索引條目從該子空間的末尾移動到該子空間中存在的“洞”中,即,蓋寫被標記為刪除的那些條目??梢灶愃频厥箟K存儲緊湊化。緊湊化帶來更小的子空間(以及一個或多個更小的塊存儲),這是被允許的??梢灾匦麓蜷_該子空間以添加新的條目,而不是使用較小的子空間(或塊存儲);為了效率,可以跟蹤新條目開始處的點,以便協(xié)調(diào)可從該點開始,因為在協(xié)調(diào)期間已經(jīng)發(fā)現(xiàn)前面的條目不匹配。可類似地重新打開較小的塊存儲以添加新的塊。在另一替代方案中,可使用位圖來跟蹤新條目可被添加到子空間的何處,或新塊被添加到塊存儲的何處,而不是移動條目或塊。
容易理解,可對照一組一個或多個較老的子空間來協(xié)調(diào)新的子空間(新-到-舊協(xié)調(diào)),然而,舊-到-新協(xié)調(diào)也是可行的,但是這樣做一般涉及更多的數(shù)據(jù)移動。更具體而言,在協(xié)調(diào)過程期間,與被去重復的子空間相關聯(lián)的文件將招致更高的訪問成本,因為對該文件的訪問時更碎片化的。該散列索引服務可基于內(nèi)容的訪問模式來選擇要對哪個子空間進行去重復以改善訪問性能,例如,以便常用文件不太碎片化。該散列索引服務還可調(diào)整 (coordinate)協(xié)調(diào)以在去重復保留和碎片量之間做出平衡。例如,考慮彼此類似的兩個子空間A和B,并且觀察到子空間B比子空間A更頻繁地被訪問(讀取或更新),或者子空間B包含子空間A的內(nèi)容的更新的版本,從而子空間A 更可被認為是子空間B的版本歷史并預計將被較不頻繁地訪問。散列索引服務可選擇對照子空間B對子空間A進行去重復,以便被更頻繁地訪問的子空間B保持更好的訪問性能。在一個替代實施例中,可限制去重復的鏈條以控制文件訪問的成本。通過去重復優(yōu)化,可通過計算去重復圖中的分支的數(shù)量來評估訪問文件所需的I/O操作的數(shù)量。例如, 如果對照子空間B和C對子空間A進行去重復,并且還對照子空間D對子空間B進行去重復,則在去重復圖中有三個分支,而對與子空間A相關聯(lián)的文件的I/O訪問的數(shù)量是4(= 3+1)。為了將對文件的訪問的I/O的數(shù)量限制為不超過K,則該協(xié)調(diào)樹不能具有超過K-I條分支。如果該去重復系統(tǒng)正存儲周期性備份數(shù)據(jù),例如,用于第O天的Btl、用于第I天的 B1、用于第2天的B2等等,則為了確保合理高效地執(zhí)行最新近備份的恢復(例如,以帶來不超過K個訪問),則去重復優(yōu)化和協(xié)調(diào)操作可被執(zhí)行如下首先,將第O天的完整備份存儲到當執(zhí)行第I天的備份BI時,將其對照Bci進行去重復。當執(zhí)行第2天的備份B2時, 將其對照Btl和B1進行去重復,等等。在第K天,執(zhí)行Bk的完整備份,然后應用協(xié)調(diào)操作以針對Bk的備份對Btl的備份進行去重復。針對Bk對第K+1天的備份Βκ+1進行去重復,而針對 Bk和Βκ+1對第K+2天的備份進行去重復。在第2K天,執(zhí)行B2k的完整備份,然后應用協(xié)調(diào)操作以針對B2k的備份對Bk的備份進行去重復。在許多環(huán)境中,存在太多子空間/不充足資源而不能彼此協(xié)調(diào)所有的子空間。在這種情形下,散列索引服務的選擇機制被用來選擇要協(xié)調(diào)哪些子空間。如同此處描述的,在散列索引服務中,文件存儲服務的散列被分為子空間以允許該散列索引服務縮放,并且可對每個子空間計算一個或多個簽名以便該子空間可被緊湊地表示。該子空間的簽名被加載到散列索引服務中(舉例來說,以確定哪個子空間要被該散列索引服務的高速緩存管理單元加載/卸載、以及以什么采樣速率進行),以及哪兩個子空間要在進一步的數(shù)據(jù)去重復中被協(xié)調(diào)。為此目的,一般而言,在協(xié)調(diào)操作期間,散列索引服務檢查該系統(tǒng)中該索引子空間的簽名(或其他表示性數(shù)據(jù)),并基于該簽名來計算任何兩個子空間之間的相似性以確定這兩個子空間之間的潛在的去重復節(jié)省。因為該子空間簽名被非常緊湊地表示,所以尋找要去重復的子空間的操作可以非??斓乇粓?zhí)行。子空間的簽名可采用各種形式。令子空間Pj包括一組散列hy,比,2,……,hy。 子空間匕的多個樣本簽名是I.最小散列及其變型(例如,具有靠近特定常數(shù)的散列值);例如,最大散列是一個這樣的變型。
Sigi(Pj) = min{hj, 1, hj,2, ......, hj, 1}2. k_最小散列(k-min hash)或其變型。Sig2(Pj) = {hj, 1, hj,2, ......,hj, 1}間的一組 k_ 最小散列值。也可使用可從完整散列值組中產(chǎn)生一組k個確定性散列值的其他算法,如,簽名可以是最接近常數(shù)H的k個散列值。3.布隆過濾器該簽名是由完整的散列值組{hj,l,hj,2,……,hj,1}形成的布隆過濾器。4. k-最小散列+布隆過濾器該簽名是由在2中獲得的k_最小散列值形成的布隆過濾器。5. b-位 minwise 散列(如 P. Li 和 A. C. Konig 的 “b_ 位 Minwise 散列 ”, WWW2010 中所描述的那樣)。該簽名是由完整的散列值組{hj, 1, hj,2, ......, hj, 1}形成的b_位minwise散列。6. k-最小散列+b_位minwise散列。這個簽名由在2中獲得的k個最小散列值上的b位minwise散列所形成。對于每一個簽名計算方法,定義了相似性度量R(Pi,Pj),代表兩個子空間是如何 類似(即,可去重復的)。在一種實現(xiàn)中,相似性度量R(Pi,Pj)采用從0到1的值;相似性 度量越大,就越可能在子空間Pi和Pj之間存在顯著的去重復幾率的。每個簽名的相似性度 量可以是1.最小散列R(Pi,Pj) = 1,如果兩個子空間的最小散列是相等的,R(Pi,Pj) = 0,其他情況。2. K-最小散列R(Pi,Pj) = q/k,如果在子空間Pi,Pj之間存在q個相等(共同的)最小散列。3.布隆過濾器和/或k_最小散列+布隆過濾器
權利要求
1.一種計算環(huán)境中的至少部分地在至少一個處理器上執(zhí)行的方法,包括將子空間索引(P1-Pm)從輔助介質加載到主存儲器高速緩存中,所述子空間索引包括少于散列索引服務(116)的所有索引條目;以及使用所述子空間索引來對數(shù)據(jù)進行去重復,包括將所述數(shù)據(jù)分塊(504)為一個或多個塊,并且對于每個塊,確定(510)為所述塊計算的散列值是否與所述主存儲器高速緩存中的條目的散列值相匹配,并且如果不匹配,則存儲(518)所述塊并與對所述塊的引用相關聯(lián)地將對應于所述散列值的條目添加(518)到所述子空間索引中,而如果匹配,則返回 (512)能夠用于定位現(xiàn)有的塊的信息。
2.如權利要求I所述的方法,其特征在于,還包括將另一子空間索引的至少一部分加載到所述主存儲器高速緩存中,或者基于一個或多個準則將所述散列索引服務劃分為多個子空間索引,或者基于將要被去重復的數(shù)據(jù)的一個或多個準則將所述數(shù)據(jù)劃分為多個數(shù)據(jù)集,以及將所述散列索引服務劃分為與所述多個數(shù)據(jù)集相對應的多個子空間索引,或者以下各項的任何組合將另一子空間索引的至少一部分加載到所述主存儲器高速緩存中,或者基于一個或多個準則將所述散列索引服務劃分為多個子空間索引,或者基于將要被去重復的數(shù)據(jù)的一個或多個準則將所述數(shù)據(jù)劃分為多個數(shù)據(jù)集,以及將所述散列索引服務劃分為與所述多個數(shù)據(jù)集相對應的多個子空間索引。
3.如權利要求I所述的方法,其特征在于,返回能夠用于定位現(xiàn)有的塊的信息包括返回包括對與所述條目相關聯(lián)的塊的引用的塊標識符,或返回所述散列值以及所述子空間的標識符。
4.如權利要求I所述的方法,其特征在于,還包括將所述子空間與另一子空間進行協(xié)調(diào),或將另一子空間與所述子空間進行協(xié)調(diào),其中協(xié)調(diào)從至少一個子空間移除至少一個重復的數(shù)據(jù)塊。
5.如權利要求4所述的方法,其特征在于,還包括基于表示所述子空間的至少一個簽名以及表示其他子空間的至少一個簽名之間的相似度來選擇要協(xié)調(diào)的其他子空間。
6.一種計算環(huán)境中的系統(tǒng),包括耦合于數(shù)據(jù)存儲服務(102)的散列索引服務(116), 所述散列索引服務被配置成確定為要去重復的數(shù)據(jù)的塊(110)計算的散列值(114)是否與主存儲器高速緩存中的現(xiàn)有散列值相匹配,所述主存儲器高速緩存包括子空間索引(P1-Pm) 并且不包括所述散列索引服務的所有索引條目,并且如果匹配,則返回能夠用于定位現(xiàn)有的塊的信息,而如果不匹配,則通知所述數(shù)據(jù)存儲服務存儲所述塊,且所述散列索引服務還被配置成與能夠用于定位所添加的塊的信息相關聯(lián)地將對應于所述散列值的條目添加到所述子空間索引中。
7.如權利要求6所述的系統(tǒng),其特征在于,還包括將所述子空間與另一子空間相協(xié)調(diào)的協(xié)調(diào)機制,包括通過檢測所述子空間中的任何重復的條目,以及對于所檢測到的每個重復的條目,采取動作以消除所述重復的條目中的一個,更新對與該重復的條目相關聯(lián)的塊的任一個或多個引用,以及移除與該重復的條目相關聯(lián)的塊。
8.具有計算機可執(zhí)行指令的一個或多個計算機可讀介質,當執(zhí)行所述計算機可執(zhí)行指令時執(zhí)行各個步驟,所述步驟包括將子空間與一個或多個其他子空間進行協(xié)調(diào),包括(a)選擇(604)所述子空間中的散列值;(b)確定(608)所述散列值是否與所述一個或多個其他子空間中的散列值相匹配,并且如果不匹配,則前進到步驟(d);(c)消除(610)所述子空間中的重復的散列值;以及(d)返回(614)到步驟(a)以處理多個不同的散列值。
9.如權利要求8所述的一個或多個計算機可讀介質,其特征在于,具有進一步的計算機可執(zhí)行指令,包括基于以下內(nèi)容來選擇所述子空間和所述一個或多個其他子空間類似的子空間類型、類似的子空間簽名,或者所述子空間是未經(jīng)協(xié)調(diào)的子空間且所述一個或多個其他子空間包括多個先前彼此協(xié)調(diào)過的子空間,或以下各項的任何組合類似的子空間類型、類似的子空間簽名、或者所述子空間是未經(jīng)協(xié)調(diào)的子空間且所述一個或多個子空間包括多個先前彼此協(xié)調(diào)過的子空間。
10.如權利要求8所述的一個或多個計算機可讀介質,其特征在于,消除所述子空間中的所述條目包括不將所述條目復制到新的子空間,或通過將包含所述散列值的條目標記為消除而使所述子空間緊湊化,以及通過在協(xié)調(diào)后僅將未標記的條目復制到新的子空間而消除所述條目,或用未標記的條目蓋寫被標記為消除的條目。
全文摘要
本發(fā)明涉及使用索引劃分和協(xié)調(diào)來進行數(shù)據(jù)去重復。所公開的主題涉及將散列索引服務的索引劃分為子空間索引的數(shù)據(jù)去重復技術,其中少于整個散列索引服務的索引被高速緩存以節(jié)省存儲器。該子空間索引被訪問以確定數(shù)據(jù)塊是否已經(jīng)存在或需要被索引和存儲??苫谂c要索引的數(shù)據(jù)相關聯(lián)的準則(諸如文件類型、數(shù)據(jù)類型、最后使用時間等)將該索引分成各個子空間。還描述了子空間協(xié)調(diào),其中檢測子空間中的重復條目以從該去重復系統(tǒng)中移除條目和塊。子空間協(xié)調(diào)可在非高峰時間、當更多系統(tǒng)資源可用時執(zhí)行,而如果需要資源則可中斷協(xié)調(diào)。要協(xié)調(diào)的子空間可以基于相似度,包括簽名的相似度,每個簽名緊湊地表示該子空間的散列。
文檔編號G06F17/30GK102591946SQ20111044528
公開日2012年7月18日 申請日期2011年12月27日 優(yōu)先權日2010年12月28日
發(fā)明者J·R·本頓, J·李, P·A·奧爾泰安, R·N·德塞, R·卡拉赫, S·森古普塔 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
泰州市| 大埔县| 绍兴市| 平泉县| 庐江县| 祁阳县| 乳山市| 巴马| 嘉禾县| 泉州市| 哈尔滨市| 泗洪县| 焦作市| 长寿区| 巴南区| 昌都县| 富源县| 上林县| 尼勒克县| 黔南| 铜山县| 深圳市| 武夷山市| 洛隆县| 蒙城县| 津市市| 卓资县| 汶上县| 阜康市| 贵港市| 城固县| 克拉玛依市| 灵山县| 崇州市| 大理市| 崇左市| 南陵县| 安吉县| 含山县| 湘乡市| 新巴尔虎左旗|