国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      利用了數(shù)據(jù)段的相似度的高效數(shù)據(jù)存儲的制作方法

      文檔序號:6455185閱讀:256來源:國知局
      專利名稱:利用了數(shù)據(jù)段的相似度的高效數(shù)據(jù)存儲的制作方法
      利用了數(shù)據(jù)段的相似度的高效數(shù)據(jù)存儲
      背景技術(shù)
      一種高效地存儲數(shù)據(jù)的方法是防止對于在備份之間保持不變的數(shù) 據(jù)的冗余拷貝。這種高效的存儲是通過把來自各數(shù)據(jù)源的數(shù)據(jù)流分成段
      (segment)并且把所述段以及所述段的標識符的索引存儲在存儲設(shè)備上 來實現(xiàn)的。在后續(xù)的備份操作期間,再次對所述數(shù)據(jù)流進行分段,并且 在所述索引中查找所述段以便確定某一數(shù)據(jù)段先前是否已被存儲過。如 果找到完全相同的段,則不再存儲該數(shù)據(jù)段;否則就存儲所述新的數(shù)據(jù) 段和新的索引標識符。遺憾的是,隨著將要備份的數(shù)據(jù)量的增加,所述 段的數(shù)目(如果所述段的尺寸近似的話)以及所述索引條目的數(shù)目也會 增加。所述段和索引條目的數(shù)目的增加會導致存取性能的降低對于寫 入,必須把到來的段索引與所述索引中的所有條目進行比較;以及對于 讀取,必須從較大數(shù)目的段當中檢索與某一文件相關(guān)聯(lián)的段。如果增大 所述段的尺寸,則會減少所述段的數(shù)目,從而所述索引條目的數(shù)目也會 減少,性能也可以得到保持;然而,由于出現(xiàn)較長的完全相同的段的幾 率沒有那么高,因此存儲效率會降低。如果可以在不犧牲存儲效率的情 況下保持存取性能,則將是有益的。
      附圖簡述
      在下面的詳細描述和附圖中公開了本發(fā)明的各種實施例。

      圖1是示出利用數(shù)據(jù)段的相似度進行高效存儲的系統(tǒng)的一個實施例 的方框圖。
      圖2是示出利用數(shù)據(jù)段的相似度進行高效存儲的處理的 一 個實施例 的方框圖。
      圖3是示出寫入期間的內(nèi)容存儲過程的一個實施例的流程圖。 圖4是示出用于生成邏輯段以及計算概要特征集合的過程的 一個實 施例的流程圖。
      圖5是示出讀取期間的內(nèi)容存儲過程的一個實施例的流程圖。 圖6是示出寫入期間的段存儲過程的 一個實施例的流程圖。 圖7是示出相似度確定過程的一個實施例的流程圖。圖8是示出針對讀取的段存儲過程的一個實施例的流程圖。 詳細描述
      可以按照多種方式來實施本發(fā)明,其中包括把本發(fā)明實施為一種過 程、設(shè)備、系統(tǒng)、物質(zhì)構(gòu)成、計算機可讀介質(zhì)(比如計算機可讀存儲介 質(zhì))或者計算機網(wǎng)絡(luò)(其中通過光學或電子通信鏈路來發(fā)送程序指令)。 在本說明書中,這些實施方式或者本發(fā)明所能采取的任何其他形式都可 以被稱作技術(shù)。諸如被描述為被配置成執(zhí)行任務(wù)的處理器或存儲器之類
      的組件包括通用組件或?qū)S媒M件,其中所述通用組件在給定時間#:臨時 配置成執(zhí)行所述任務(wù),而所述專用組件是為了執(zhí)行所述任務(wù)而被制造 的。 一般來說,在本發(fā)明的范圍內(nèi)可以改變所公開的過程的各步驟的順序。
      在下面連同附圖 一 起提供對本發(fā)明的 一 個或多個實施例的詳細描 述,所述附圖示出本發(fā)明的原理。下面將結(jié)合所述實施例來描述本發(fā)明, 但是本發(fā)明不限于任何實施例。本發(fā)明的范圍僅僅由權(quán)利要求書來限 定,并且本發(fā)明包含許多替換方案、修改和等效方案。為了提供對于本 發(fā)明的透徹理解,在下面的描述中闡述了許多具體細節(jié)。提供這些細節(jié) 是出于舉例的目的,并且可以在沒有一些或全部所述具體細節(jié)的情況下 根據(jù)權(quán)利要求書來實踐本發(fā)明。為了清楚起見沒有描述本發(fā)明的相關(guān)技 術(shù)領(lǐng)域內(nèi)已知的技術(shù)材料,以免不必要地才莫糊本發(fā)明。
      公開了利用數(shù)據(jù)段的相似度來進行高效的存儲。確定一個新段與一 個先前存儲的段相似,其中所述先前存儲的段包括來自某一輸入數(shù)據(jù)流 中的任何位置的 一 個先前存儲的段。至少部分地基于增量來存儲所述新 段的表示。存儲增量會提高存儲效率,尤其是在其中各段與先前存儲的 段相比可能具有小的改變的情況下,這是因為與存儲新段相比,存儲小 的增量更為高效。通過把第一段的概要特征集合與第二段的概要特征集 合進行比較來確定相似度。在一些實施例中,所述第一段是從某一輸入 數(shù)據(jù)流到達的段,而所述第二段是來自某一輸入數(shù)據(jù)流的先前已被存儲 在備份存儲系統(tǒng)中的任何段。在一些實施例中,所述第一段與第一輸入 數(shù)據(jù)流相關(guān)聯(lián),而所述第二段與第二輸入數(shù)據(jù)流相關(guān)聯(lián)。在一些實施例 中,所述相似度包括第一段與第二段之間的逐字節(jié)相似性的度量。通過
      以下操作來確定概要特征集合選擇第 一段的多個固定長度或可變長度的子段;對于每一個子段,通過對于每一個子段應(yīng)用一組函數(shù)來計算多
      集。在一些實施例中,所述第一值子集被用于確定所^第一段:第二段
      之間的相似度。
      在一些實施例中,在相似度壓縮的情況下(利用相似度高效地存儲 數(shù)據(jù)段),在內(nèi)容存儲中的處理期間把用戶寫入流(其對應(yīng)于整個文件 或者某一文件的地址范圍或者用于寫入的連續(xù)數(shù)據(jù)的地址范圍)分解成 各邏輯段。把所述邏輯段發(fā)送到段存儲以供壓縮及存儲。內(nèi)容存儲還接 收具有段描述符的形式的段存儲反饋,其中的每一個所述描述符描述某 一邏輯段在段存儲中如何被壓縮及表示。內(nèi)容存儲保持所述地址范圍與 其相應(yīng)的從段存儲返回的邏輯段和段描述符之間的映射。內(nèi)容存儲負責
      進行以下操作映射地址范圍與其相應(yīng)的邏輯段和段描述符;把對應(yīng)于 用戶讀取流(其對應(yīng)于整個文件或者某一文件的地址范圍或者用于讀取 的連續(xù)數(shù)據(jù)的地址范圍)的段描述符遞送到段存儲;以及接收對應(yīng)于邏 輯段的數(shù)據(jù)。在相似度壓縮情況下的內(nèi)容存儲的行為在很大程度上類似 于在身份(identity)壓縮下的情況。
      在一些實施例中,在段存儲中把各段表示為多個物理段的復(fù)合。更 為精確地說,每一個邏輯段被表示為 一個基礎(chǔ)和 一 系列等級越來越高 (或者說尺寸越來越小)的增量,其中每一個基礎(chǔ)或增量是一個完整物 理段或者是某一物理段的一部分。基礎(chǔ)直接對應(yīng)于內(nèi)容存儲中的邏輯 段,并且被標記為d0。 一級增量是兩個(不同的)邏輯段之間的差異, 并且被標記為dl。 二級增量是兩個(不同的)dl之間的差異,并且被 標i己為d2。
      在各種實施例中,相似度壓縮使用 一級增量編碼或者二級增量編 碼。在一級增量編碼中,段存儲把每一個邏輯段表示為可以被共享的d0 與不能被共享的可選的dl的復(fù)合;在二級增量編碼中,段存儲把每一 個邏輯段表示為可以被共享的d0、可以被共享的可選的dl、以及與不 能被共享的可選的d2的復(fù)合。如果某一邏輯段被表示為d0,則將其標 記為e0;如果某一邏輯段的相應(yīng)的最高級增量是dl,則將其標記為el; 如果某一邏輯段的相應(yīng)的最高級增量是d2,則將其標記為e2。身份壓 縮可以被視為零級增量編碼,其中段存儲把每一個邏輯段表示為可以被 共享的d0。在按照其壓縮形式來存儲所述輸入數(shù)據(jù)流時(例如在存儲來自所述輸入數(shù)據(jù)流的某一新段時)沒有信息損失。
      在一些實施例中,在二級增量編碼中,d0較大,d2較小,而dl是至為重要的,例如,dO是lMB, d2是10KB,以及dl是100KB。 二級增量編碼平衡對于更激進的壓縮的需求(不僅在各邏輯段當中共享較大的d0,而且也共享顯著的dl差異)與對于更高性能和可伸縮性的需求(在各邏輯段當中不共享較小的d2差異,并且不對其進行各種處理和維護)。為了便于在二級增量編碼中檢測到可共享的各dl,所施加的附加約束是dl關(guān)于el是一對一的(這意味著對應(yīng)于dl的段標識符可以與對應(yīng)于el的段標識符互換)。這樣允許在系統(tǒng)中對新邏輯段與先前的e0和el之間的相似度進行比較而無需擔心物理段,其中所述系統(tǒng)使用邏輯段等級上的被稱作概要特征集合或概略(sketch)的概要技術(shù)。在檢測出所述相似度之后,把所述新邏輯段編碼為相應(yīng)的各物理段的復(fù)合,其或者是可共享的d0,或者是可共享的dO加上可共享的dl加上可選的不可共享的d2。
      在 一 些實施例中,可以在被稱作增量組合的過程中在段存儲中把多個dl和d2組合到單個物理段中。增量組合減小了把段標識符映射到其實際存儲容器的位置索引的尺寸,并且使得段存儲中的本地壓縮更為有效。特別有意義的是在一級增量編碼中組合相同的邏輯流的dl,或者在二級增量編碼中組合相同的邏輯流的d2,這是因為它們不被共享,并且在從所述系統(tǒng)中刪除相應(yīng)的文件時一起消失。如果在段存儲中執(zhí)行增量組合,那么從段存儲返回到內(nèi)容存儲的段描述符應(yīng)當規(guī)定每一個dl或d2在所述組合段中的起始和結(jié)束位置,從而使得讀取操作和其他操作可以適當?shù)乇孀R所述組合l殳中的特定dl或d2。
      圖1是示出利用數(shù)據(jù)段的相似度進行高效存儲的系統(tǒng)的 一個實施例的方框圖。在所示出的例子中,本地恢復(fù)器系統(tǒng)IOO在沒有信息損失的情況下把信息存儲在輸入數(shù)據(jù)流中,從而允許在原先存儲在客戶端系統(tǒng)上的數(shù)據(jù)不再可用的情況下恢復(fù)所述數(shù)據(jù)。信息被存儲在本地恢復(fù)器系統(tǒng)100的內(nèi)部存儲設(shè)備104或外部存儲設(shè)備106上。在各種實施例中,內(nèi)部存儲設(shè)備104包括一個或多個存儲設(shè)備,以及/或者外部存儲設(shè)備106包括一個或多個存儲設(shè)備。本地恢復(fù)器100與遠程恢復(fù)器102進行通信。遠程恢復(fù)器102存儲被存儲在本地恢復(fù)器系統(tǒng)IOO上的信息的拷貝,從而允許恢復(fù)原先存儲在客戶端系統(tǒng)上的數(shù)據(jù)。在各種實施例中,本地恢復(fù)器IOO利用專用通信鏈路、 一個或多個網(wǎng)絡(luò)、局域網(wǎng)、廣域網(wǎng)、存儲區(qū)域網(wǎng)絡(luò)、因特網(wǎng)、有線網(wǎng)絡(luò)和/或無線網(wǎng)絡(luò)與遠程恢復(fù)器102通信。本地恢復(fù)器系統(tǒng)100還利用網(wǎng)絡(luò)120與多個具有存儲裝置的客戶端系統(tǒng)(其在圖1中由具有存儲裝置的客戶端系統(tǒng)110和112表示)通信。本地恢復(fù)器系統(tǒng)100還利用網(wǎng)絡(luò)120與媒體/備份服務(wù)器108通信。在各種實施例中,網(wǎng)絡(luò)120包括一個或多個網(wǎng)絡(luò)、局域網(wǎng)、廣域網(wǎng)、存儲區(qū)域網(wǎng)絡(luò)、因特網(wǎng)、有線網(wǎng)絡(luò)和/或無線網(wǎng)絡(luò)。媒體/備份服務(wù)器108利用網(wǎng)絡(luò)118與多個具有存儲裝置的客戶端系統(tǒng)(其在圖1中由具有存儲裝置的客戶端系統(tǒng)114和116表示)通信。在各種實施例中,網(wǎng)絡(luò)118包括一個或多個網(wǎng)絡(luò)、局域網(wǎng)、廣域網(wǎng)、存儲區(qū)域網(wǎng)絡(luò)、因特網(wǎng)、有線網(wǎng)絡(luò)和/或無線網(wǎng)絡(luò)。在一些實施例中,媒體/備份服務(wù)器108把數(shù)據(jù)備份在具有存儲裝置的客戶端系統(tǒng)上,所述數(shù)據(jù)備份又被備份到本地恢復(fù)器系統(tǒng)100。
      圖2是示出利用數(shù)據(jù)段的相似度進行高效存儲的處理的一個實施例的方框圖。在一些實施例中,諸如圖1的本地恢復(fù)器系統(tǒng)IOO之類的恢復(fù)器系統(tǒng)處理來自各客戶端系統(tǒng)的數(shù)據(jù),以便高效地存儲信息以及從所存儲的信息中恢復(fù)數(shù)據(jù)。在所示出的例子中,為了把數(shù)據(jù)寫入到存儲裝置,把源自 一個或多個客戶端系統(tǒng)的線性字節(jié)數(shù)據(jù)流輸入到輸入/輸出處理模塊200中。把數(shù)據(jù)流傳遞到內(nèi)容存儲202。內(nèi)容存儲202執(zhí)行以下操作生成邏輯段、將其遞送到段存儲204以供壓縮及存儲、等待返回段描述符、以及保持從數(shù)據(jù)地址信息到其相應(yīng)的邏輯段和段描述符的映射。段存儲204執(zhí)行以下操作接收來自內(nèi)容存儲202的邏輯段、執(zhí)行相似度壓縮以便產(chǎn)生物理段、把物理段本地壓縮及打包到容器中、把結(jié)果發(fā)送到容器存儲206以供存儲、以及把段描述符返回內(nèi)容存儲202。容器存儲206把所述容器存儲在硬盤驅(qū)動器、硬盤驅(qū)動器陣列、網(wǎng)絡(luò)附屬驅(qū)動器或陣列、和/或RAID系統(tǒng)中。為了從存儲裝置中讀取數(shù)據(jù),在輸入/輸出200處接收到針對讀取數(shù)據(jù)的請求。把所述請求發(fā)送到內(nèi)容存儲202,以便確定允許讀取所請求的數(shù)據(jù)所需的相關(guān)的段描述符。內(nèi)容存儲202執(zhí)行以下操作把段描述符遞送到段存儲204以便獲得所述段以及解壓縮、等待返回段數(shù)據(jù)、以及把相關(guān)的數(shù)據(jù)返回到輸入/輸出200。段存儲204執(zhí)行以下操作接收來自內(nèi)容存儲202的段描述符、請求從容器存儲206進行物理段讀取、對物理段進行本地壓縮、基于所述物理段組成邏輯段、以及把段數(shù)據(jù)返回到內(nèi)容存儲202。在各種實施例中,從硬盤驅(qū)動器、硬盤驅(qū)動器陣列、網(wǎng)絡(luò)附屬驅(qū)動器或陣列、和/或RAID系統(tǒng)進行物理段讀取。
      圖3是示出寫入期間的內(nèi)容存儲過程的一個實施例的流程圖。在一些實施例中,圖3的內(nèi)容存儲寫入過程被實施在圖2的內(nèi)容存儲202中。在所示出的例子中,在300中,從輸入/輸出塊接收數(shù)據(jù)和相關(guān)聯(lián)的地址信息。例如,從所述輸入/輸出塊接收一個包括特定文件、特定偏移量和特定長度的元組。在302中,生成邏輯段并且計算概要特征集合。邏輯段生成也被稱作錨定,其從輸入數(shù)據(jù)流生成可變尺寸的依賴于內(nèi)容但是獨立于地址的邏輯段。在一些實施例中,通過以下操作來實現(xiàn)錨定沿著所述輸入數(shù)據(jù)流對移動窗進行散列,并且當所述散列等于特定值時,把所述輸入數(shù)據(jù)流中的與所述窗具有固定關(guān)系的某一位置定義為段邊界。所述段概要特征集合計算包括對于每一個邏輯段生成多個特征,從而使得足夠相似的邏輯段有可能具有一個或多個匹配特征,并且更高的相似度往往會生成更多匹配特征。在304中,把各邏輯段及其所計算出的概要特征集合發(fā)送到段存儲。在306中,接收回對應(yīng)于所述邏輯段的段描述符。在308中,保持從數(shù)據(jù)地址信息到相應(yīng)的邏輯段和段描述符的映射。該映射在內(nèi)容存儲讀取過程期間被使用。
      圖4是示出用于生成邏輯段以及計算概要特征集合的過程的一個實施例的流程圖。在一些實施例中,概要特征集合被用來表征所述段以及能夠確定段之間的相似度。在一些實施例中,圖4的過程被用來實施圖3的302。在所示出的例子中,在400中,通過錨定生成各邏輯段。所述錨定是基于某種標準來定位段邊界的過程。在一些實施例中,所述錨定標準包括令所述數(shù)據(jù)流的一部分的散列等于某一值。在402中,從所述段中采樣可變長度子段或小段(shingle)。小段是所述段的固定長度子段。選擇可變長度子段或小段是基于某種標準,其中所述標準至少部分地是基于來自所述段的值。在各種實施例中,選擇多個固定長度或可
      定尺寸的第 一游動窗中的各字節(jié)的加權(quán)和。
      在一些實施例中,通過對于所述段中的所有字節(jié)在逐字節(jié)的基礎(chǔ)上計算具有固定尺寸(可能不同于小段尺寸)的游動窗內(nèi)的各字節(jié)的(加權(quán))和來確定小段采樣。對于某一小段來說,如果所述游動窗內(nèi)的各字
      9節(jié)的(加權(quán))和滿足特定標準(例如所述加權(quán)和的最末的6或7個比特都是1)則采樣該小段。與所述滿足標準的窗口位置具有固定關(guān)系的位置可以被用作所述小段樣本的起始位置。
      在一些實施例中,通過對于所述段中的所有字節(jié)在逐字節(jié)的基礎(chǔ)上計算具有固定尺寸的游動窗內(nèi)的各字節(jié)的(加權(quán))和來確定可變長度子段采樣。對于某一可變長度子段來說,如果所述游動窗內(nèi)的各字節(jié)的(加權(quán))和滿足特定標準(例如所述加權(quán)和的最末的6或7個比特都是1 )則采樣該可變長度子段。與所述滿足標準的窗口位置具有固定關(guān)系的位置可以被用作所述可變長度子段樣本的起始位置。在一些實施例中,可以在窗口尺寸、加權(quán)公式、滿足標準以及與滿足標準的窗口位置的固定偏移量的各種組合下利用與確定所述起始位置相同的游動窗機制來確定所述可變長度子段的結(jié)束位置。在一些實施例中,相同的游動窗以及(加權(quán))和來確定可變長度子段樣本的起始位置和結(jié)束位置。
      在404中,針對所述可變長度子段或小段樣本來計算一類函數(shù)。在一些實施例中,所述函數(shù)類或集合包括一組線性函數(shù)。在一些實施例中,所述函數(shù)集合包括mkXk+ak,其中mk和ak對于k-l到n是不同的預(yù)定值,并且其中xk包括所述可變長度子段或小段樣本的函數(shù)。在一些實施例中,所述函數(shù)集合或類包括mkx+ak,其中通過對于k=l到n具有對應(yīng)于mk和ak的不同值來規(guī)定所述函數(shù)類,并且x是所述可變長度子段或小段樣本的函數(shù)(例如某一子段或小段樣本的散列、某一子段或小段樣本內(nèi)的各字節(jié)的和等等)。在各種實施例中,所述函數(shù)類是提供一定程度的正交性的任何函數(shù)系列。在各種實施例中,所述可變長度子段或小段樣本的函數(shù)包括SHA-1 (安全散列算法1 ) 、 MD5 (消息摘要算法5 )、RIPEMD-160 (RACE完整性原語評估消息摘要160比特版本)、Rabin散列、或者任何其他適當?shù)纳⒘泻瘮?shù)。在406中,選擇函數(shù)結(jié)果的子集。在一些實施例中,所述函數(shù)結(jié)果或值的子集(第一子集)被用于確定第一段與第二段之間的相似度。在一些實施例中,選擇所述函數(shù)結(jié)果的多個極值,例如選擇其中6個最低值(最小值)。在各種實施例中,所述極值包括最小值、最大值或者最小與最大值。在一些實施例中,所述函數(shù)結(jié)果的子集被傳遞到408以便進行處理。在其他實施例中,通過散列到函數(shù)結(jié)果的另一個子集來進一步處理對應(yīng)于所述函數(shù)結(jié)果的子集的底層可變長度子段或小段樣本。在一些實施例中,所述函數(shù)結(jié)果的該另一個子集(第二子集)被用于確定笫 一段與第二段之間的相似度。在408中,針對所述段組成所述結(jié)果的集合。所述集合是概要特征集合,并且該集合的每一個值是一個特征。概略是具有固定數(shù)目的特征的概要特征集合,并且應(yīng)當針對任何一對邏輯段之間的相似度比較在逐特征的基礎(chǔ)上匹配其相應(yīng)的特征值。在一些實施例中,按照預(yù)定的順序組成所述函數(shù)結(jié)果的最小值(例如第一函數(shù)的最小值到所述函數(shù)集合中的最后一個函數(shù)的最小值),以便產(chǎn)生某一概略內(nèi)的各特征。在一些實施例中,由多個特征(其中的每一個由6個最小值組成)形成一個段概略。在一些實施例中,至少部分地基于所述函數(shù)結(jié)果的第一子集來組成該結(jié)果集合(第三子集)。在一些實施例中,所組成的函數(shù)結(jié)果或值的該子集(第三子集)被用于確定第一段與第二段之間的相似度。在一些實施例中,組成該笫三值子集的順序是預(yù)先確定的,并且獨立于所述第 一子集中的值。在一些實施例中,至少部分地基于所述結(jié)果的第二子集來組成第四結(jié)果子集(通過如上所述的散列產(chǎn)生)。在一些實施例中,所組成的函數(shù)結(jié)果或值的該子集(第四子集)被用于確定笫一段與第二段之間的相似度。在一些實施例中,組成所述第四值子集的順序是預(yù)先確定的,并且獨立于所述第二子集中的值。
      在一些實施例中,通過執(zhí)行以下操作來確定概要特征集合(a)選擇第一段的m個子段;(b)選擇w個函數(shù);(c)對于函數(shù)i (其中i是從1到n的一個值),(i)計算m個值ft (子段j),其中j是從1到m的一個值,以及(ii)從所述m個值當中選擇第i個極值,其中包括最小值或最大值;以及(d)從所述"個極值當中選擇第一值子集。
      圖5是示出讀取期間的內(nèi)容存儲過程的一個實施例的流程圖。在一些實施例中,圖5的內(nèi)容存儲讀取過程被實施在圖2的內(nèi)容存儲202中。在所示出的例子中,在500中,從所述輸入/輸出塊接收地址信息。所述地址信息對應(yīng)于要在距離某一文件的特定偏移量處讀取特定長度的數(shù)據(jù)的請求。在501中,把所述地址信息映射到相關(guān)的邏輯段和相應(yīng)的段描述符。在502中,把段描述符發(fā)到段存儲。在504中,接收回相應(yīng)的邏輯段數(shù)據(jù)。在506中,把由所述地址信息的范圍所覆蓋的相關(guān)數(shù)據(jù)傳送到所述輸入/輸出塊。
      圖6是示出寫入期間的段存儲過程的一個實施例的流程圖。在一些實施例中,圖6的段存儲寫入過程被實施在圖2的段存儲204中。在所
      ii示出的例子中,在600中確定相似度。利用所述段概要特征集合或者所 述段概略的匹配來找到最接近當前段的先前存儲的e0或el。在602中 確定是否存在匹配。如果不存在匹配,則控制轉(zhuǎn)到610。
      如果存在匹配,則在604中從存儲裝置檢索所述最接近的eO和el。 所述檢索過程包括對于一級增量編碼重建最相似的e0以及對于二級增 量編碼重建最相似的e0或el。 e0在l史存儲中被存々者為d0,而el被存 儲為dO加dl。因此,所述檢索過程涉及在一級增量編碼中讀取一個物 理段,以及在二級增量編碼中讀取一個或兩個物理段。所有的物理段都 按照本地壓縮的形式被存儲在段存儲中。如果僅僅讀取了 一個物理段, 則將對其進行本地解壓縮以便形成所述eO;如果讀取了兩個物理段,則 將對它們進行本地解壓縮并且在增量解碼中將它們組成所述e 1 。只有當 所述最相似的eO/el在二級增量編碼的情況下是el時才應(yīng)用增量解碼。 所述解碼是從所述底層d0和dl組成el的過程。
      在606中,從所述最接近的eO和el對所述新段進行增量編碼。增 量編碼是生成到來的邏輯段與現(xiàn)有的eO或el之間的差異的過程。如果 所述新段是新的el,則所述增量編碼是生成新段與(從604生成的)所 述最相似的eO之間的差異dl的過程。如果新段是一個e2,則所述增量 編碼是生成所述新段與(從604生成的)所述最相似的eO/el之間的d2 的過程。
      在一些實施例中,進行檢查以便確保所述新段與所述最接近的e0 和el之間的差異較小。由于所述段概要特征集合或段概略比較僅僅給 出概率性的相似(或不相似)證據(jù),因此可以在所述新段與其最相似的 邏輯段(e0或el)之間的增量編碼之后執(zhí)行尺寸比值測試,以便確定 所述新段及其最相似的段的角色被正確分類。如果所述增量尺寸與所述 新段尺寸的函數(shù)的比值、與所述最接近的eO/el尺寸的函數(shù)的比值、或 者全部二者超出一個預(yù)先規(guī)定的閾值(例如三分之一),則應(yīng)當將所述 新段作為新的e0而不管其先前分類如何。在二級增量編碼的情況下, 如果所述增量尺寸與所述新段尺寸的函數(shù)的比值、與所述最接近的eO/el 尺寸的函數(shù)的比值、或者全部二者小于一個預(yù)先規(guī)定的閾值(例如二十 分之一),那么如果所述新段的先前分類是新的el,則應(yīng)當將其作為新 的e2。
      在608中,在期望的情況下組合段與增量??梢园褟南嗤壿嬃鞯牟煌壿嫸萎a(chǎn)生的多個dl或d2組合到單個物理段中??梢园阉鲈隽拷M合視為一個尺寸標準化過程,從而使得平均物理段尺寸至少是某一特定尺寸(例如IOOK或更大)。這應(yīng)當會給出良好的本地壓縮結(jié)果,即使在增量編碼的情況下也是如此。更重要的是,所述增量組合在所述位置索引中生成較少的條目。特別有意義的是組合一級增量編碼中的相同邏輯流的各dl,或者組合二級增量編碼中的相同邏輯流的各d2,這是因為它們不:f皮共享,并且在相應(yīng)的文件纟皮移除時一起消失。在一些實施例中,組合二級增量編碼中的相同邏輯流的各dl 。如果應(yīng)用了增量組合,則應(yīng)當進行適當?shù)牟居?,從而可以隨后在增量分離過程中恢復(fù)組合的物理段中的單獨差異以供讀?。惶貏e地,從段存儲返回到內(nèi)容存儲的相關(guān)的段描述符應(yīng)當包括關(guān)于如何在增量分離期間從所述組合段恢復(fù)對應(yīng)的差異的信息。不管是否應(yīng)用了增量組合,從內(nèi)容存儲發(fā)送到段存儲的每一個邏輯段都應(yīng)當產(chǎn)生一個從段存儲發(fā)送回內(nèi)容存儲的段描述符。在增量組合過程中應(yīng)當保持對應(yīng)信息,從而使得從段存儲返回到內(nèi)容存儲的段描述符的數(shù)目和順序是適當?shù)摹?br> 在一些實施例中,計算段標識符。所述段標識符計算是為每一個新的物理段分配一個唯一標識符的過程。該標識符作為段描述符的一部分被返回到內(nèi)容存儲,從而可以在將來讀取所述物理l殳。在各種實施例中,所述段標識符包括所述物理段的指紋或者一個順序生成的數(shù)字。
      在一些實施例中,計算增量標識符。所述增量標識符計算是為每一個新的增量分配一個唯一標識符的過程。該標識符作為段描述符的一部分被返回到內(nèi)容存儲,從而可以在將來讀取所述增量。在各種實施例中,所述增量標識符包括所述增量的指紋或者一個順序生成的數(shù)字。在各種實施例中,所述增量包括一級增量、二級增量、或者任何其他適當?shù)脑隽俊?br> 在一些實施例中,所述段描述符被傳送到內(nèi)容存儲。這是針對從內(nèi)容存儲發(fā)送到段存儲的每一個邏輯段而把所述段描述符從段存儲返回到內(nèi)容存儲的過程。段描述符允許由內(nèi)容存儲從段存儲讀取邏輯段。每一個段描述符應(yīng)當包括對應(yīng)于在所述邏輯段的組成中所涉及的各物理段的所有段標識符;如果任何物理段是從多個差異組合的,則所述段描述符中還應(yīng)當存在用來找到該物理段內(nèi)的相關(guān)差異的偏移量和尺寸信息。在一些實施例中,期望所述偏移量描述符反饋在相應(yīng)的物理段已被
      13寫入到更為永久性的存儲器(例如NVRAM)之后發(fā)生,從而在內(nèi)容存 儲接收到來自段存儲的所述段描述符反饋時,所述邏輯段將經(jīng)受得住軟 件崩潰或硬件崩潰。
      在610中,所述段和增量被本地壓縮。本地壓縮是僅僅利用新物理 段本身內(nèi)的信息把所述物理段從未壓縮形式壓縮到本地壓縮形式的過 程。在各種實施例中,本地壓縮算法包括Ziv-Lempel壓縮、Lempel-Ziv (LZ)壓縮、Lempel-Ziv-Welch ( LZW)壓縮、或者任何其他適當?shù)膲?縮。
      在612中,所述本地壓縮的數(shù)據(jù)被打包到容器中。容器打包按照本
      地壓縮的形式從新物理段生成包括段和增量的容器。當已經(jīng)累積了來自 相同邏輯流的足夠多的新物理段從而近似一個容器的尺寸時,就把所述
      新物理段打包到一個容器中并且寫入到一個容器存儲中以供存儲到盤 上。新的物理段被適當?shù)赜白踊⑶掖鎯υ谟谰眯源鎯ζ?例如 NVRAM)中,以免由于軟件崩潰或硬件故障而導致數(shù)據(jù)丟失,直到把 這些物理段通過容器寫入到盤上為止。在把容器寫入到盤上之后,容器 存儲通知段存儲。段存儲可以從永久性存儲器(例如NVRAM)中安全 地移除所有相關(guān)的物理段。另外,與盤容器映射相關(guān)的段描述符被添加 到所述相似度索引和位置索引中,從而將來的邏輯段可以受益于與先前 的e0和el的相似度。
      圖7是示出相似度確定過程的一個實施例的流程圖。在一些實施例 中,圖7的過程實施圖6的600。在高等級上,段相似度確定過程找到 與新邏輯段最相似的先前邏輯段。所述相似度或者所采樣的逐字節(jié)相似 性表征兩個段之間的逐字節(jié)匹配的可能性;換句話說,高度相似的段可 能逐字節(jié)匹配。更精確地說,所述相似度確定過程對于新邏輯段確定以 下內(nèi)容是否存在具有一個或多個匹配特征的先前的e0以及哪一個e0 具有最多匹配特征或者處在二級增量編碼下,是否存在具有一個或多個 匹配特征的先前的el以及哪一個el具有最多匹配特征。如果上述兩個 問題的答案都是否定的,則所述新邏輯段就是一個新的e0。否則,所述 具有最多匹配特征的e0或el (在二級增量編碼的情況下)將被用于對 所述新邏輯段進行增量編碼。取決于所述增量的大小,所述新邏輯段是 一級增量編碼情況下的冗余eO或el, 二級增量編碼情況下的冗余eO、 冗余el、 e2或新的el。新的e0或el (僅僅在二級增量編碼的情況下)可以被用于對將來的邏輯段進行增量編碼。在一些實施例中,保持存儲
      器內(nèi)相似度索引以便執(zhí)行段相似度確定。所有新的e0 (以及在二級增量 編碼情況下的el )都被輸入到該索引中。該索引由多個特征子索引組成, 其中的每一個所述特征子索引對應(yīng)于一個特征,并且對于該特征表明是 否存在特定值以及哪些e0和el具有該值。
      在圖7所示出的例子中,所述先前存儲的先前的e0 (或el)潛在 地是與所述輸入邏輯段最緊密地匹配的段,并且在開始時被初始化到 Nil。在700中,確定是否存在具有至少一個與所述輸入段匹配的特征的 更多先前的e0 (或el),同時嘗試定位最緊密的匹配。如果沒有更多 的這種先前的e0 (或el),則所述過程結(jié)束。如果存在更多的這種先 前的e0(或el),則在701中選擇具有至少一個匹配特征的下一個先前 的e0 (或el ),并且控制轉(zhuǎn)到702。在702中,確定所述先前的e0 (或 el )是否在所述概要特征集合或概略中具有最多的與所述輸入段匹配的 特征。如果所述先前的e0 (或el)在所述概要特征集合或概略中具有 最多的與所述輸入段匹配的特征,這將表明該先前的eO (或el)本身 可能與所述輸入段最緊密地匹配。如果所述先前的eO (或el)不具有 最多匹配特征,則控制轉(zhuǎn)到700。如果所述先前的eO (或el )確實具有 最多匹配特征,則在704中將其保存為潛在的最緊密匹配,并且在706 中也保存相應(yīng)的的概要特征集合或概略,并且控制轉(zhuǎn)到700。
      在一些實施例中,對于每一個新l殳ns,通過下面的特征測試進行相 似度確定
      對于每一個特征k,確定以相同的特征值與ns匹配的相似度索引 中的eO和el的集合S[k],其中,S[k]中的每一個元素具有〈s, 1>的形式, s是段標識符;如果沒有基礎(chǔ)匹配,則S[k]為空。
      把對應(yīng)于所有特征(k)的S[k]合并到單個集合S中,其中的每一個 元素具有〈s,c〉的形式,s是段標識符,c是該s與ns匹配的特征值的計 數(shù)。如果沒有基礎(chǔ)匹配,則S為空。
      .如果S為空,則沒有eO或el與ns相似,并且應(yīng)當把ns作為新 的eO。
      否則,在S中找到其c最大的〈s, c>。為了打破具有相同的c的平 局,使用具有最近的s的〈s, c>。
      對于一級增量編碼,返回s以作為最相似,并且把ns編碼為s加
      15dl。注意,s在一級增量編碼情況下總是eO,并且如果ns是s的復(fù)制, 則dl將為空。
      否則,(對于二級增量編碼)如果來自上一步的c超出一個預(yù)定 閾值e2—feature (其用于確??梢园裯s增量編碼為s力。d2 ),則返回s 以作為最相似,并且4巴ns編碼為s加d2。注意,s可以是eO或el,并 且如果ns是s的復(fù)制,則d2為空。
      否則,在S中找到其s為eO并且其c最大的〈s, c〉。為了打破具 有相同的c的平局,使用具有最近的e0的〈s,c〉。
      如果不存在這種〈s, O或者c小于一個預(yù)定閾值e0—feature (其默 認地是1 ),則沒有e0或el與ns足夠相似,并且應(yīng)當把ns作為新的 e0。
      否則,返回s以作為最相似,并且應(yīng)當把ns作為新的el。 圖8是示出針對讀取的段存儲過程的一個實施例的流程圖。在一些 實施例中,圖8的過程^皮實施在圖2的段存儲204中。在一些實施例中, 圖8的過程被實施在圖6的604中。在所示出的例子中,在800中,按 照本地壓縮的形式讀出對應(yīng)于段描述符的數(shù)據(jù)(在一級增量編碼的情況 下是dO、可選的dl,或者在二級增量編碼的情況下是dO、可選的dl、 可選的d2)。在802中,對所述本地壓縮的數(shù)據(jù)進行本地解壓縮。所述 本地解壓縮的過程是把在800中讀取的所述本地壓縮的物理段形式轉(zhuǎn)換 成未壓縮形式。本地解壓縮是圖6的610中的本地壓縮的反轉(zhuǎn)。在804 中,如果需要的話則執(zhí)行增量分離。只有在相應(yīng)的差異被包括在某一組 合的物理段中時才執(zhí)行該步驟。增量組合在寫入期間把多個差異組合到 單個物理段中。特別地,可以組合一級增量編碼中的相同邏輯流的各dl, 并且可以組合二級增量編碼中的相同邏輯流的各d2 。增量分離是在讀取 期間從已經(jīng)本地解壓縮的組合段中獲得單獨差異(不管其是d 1還是d2 ) 的逆過程。在806中,如果需要的話對所述數(shù)據(jù)進行增量解碼。只有在 涉及dl或d2的情況下才應(yīng)用該步驟。它是從底層的dO和dl組成el、 從底層的d0和d2組成e2、或者從底層的d0、 dl和d2組成e2的過程。 有可能彼此接連地讀出某一組合段中的所有單獨差異以用于進行讀取。 有意義的是具有 一個未壓縮組合段高速緩存,從而把與所述組合段相關(guān) 聯(lián)的所有處理成本(在800和802中)分攤到所述組合段中的所有差異 而不是所述組合段中的僅僅一個差異。雖然出于理解清楚的目的描述了前面的實施例的一些細節(jié),但是本 發(fā)明并不限于所提供的細節(jié)??梢杂袑嵤┍景l(fā)明的許多替換方式。所公 開的實施例是說明性的而非限制性的。
      權(quán)利要求
      1、一種利用數(shù)據(jù)段的相似度進行存儲的方法,包括確定新段與先前存儲的段相似,其中所述先前存儲的段包括來自輸入數(shù)據(jù)流中的任何位置的先前存儲的段;確定所述新段與所述先前存儲的段之間的增量;以及至少部分地基于所述增量來存儲所述新段的表示。
      2、 如權(quán)利要求l所述的方法,其中,所述增量包括所述新段與所述 先前存儲的段之間的差異。
      3、 如權(quán)利要求l所述的方法,其中,確定相似度包括把所述新段 的概要特征集合與所述先前存儲的段的概要特征集合進行比較。
      4、 如權(quán)利要求l所述的方法,還包括如果新段與所述先前存儲的 段不相似,則存儲該新段。
      5、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包括 存儲所述增量以及所述先前存儲的段的指示。
      6、 如權(quán)利要求l所述的方法,其中,如果所述增量大于預(yù)定閾值則 存儲所述新段的所述表示包括存儲所述新段。
      7、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包括 存儲所述增量與第二增量的組合。
      8、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包括 對所述新段進行本地壓縮。
      9、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包括 對所述增量進行本地壓縮。
      10、 如權(quán)利要求l所述的方法,其中,對于所述新段計算標識符。
      11、 如權(quán)利要求l所述的方法,其中,對于所述新段計算標識符, 并且所述標識符包括指紋。
      12、 如權(quán)利要求l所述的方法,其中,對于所述新段計算標識符, 并且所述標識符包括順序生成的數(shù)字。
      13、 如權(quán)利要求l所述的方法,其中,對于所述增量計算標識符。
      14、 如權(quán)利要求l所述的方法,其中,對于所述增量計算標識符, 并且所述標識符包括指紋。
      15、 如權(quán)利要求l所述的方法,其中,對于所述增量計算標識符, 并且所述標識符包括順序生成的數(shù)字。
      16、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包 括把所述新段打包在容器中。
      17、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包 括把所述增量打包在容器中。
      18、 如權(quán)利要求l所述的方法,其中,存儲所述新段的所述表示包 括把所述新段的所述表示存儲在備份存儲系統(tǒng)中。
      19、 如權(quán)利要求l所述的方法,其中,新段與第一輸入數(shù)據(jù)流相關(guān) 聯(lián),以及所述先前存儲的段與第二輸入數(shù)據(jù)流相關(guān)聯(lián)。
      20、 如權(quán)利要求l所述的方法,其中,相似度包括所述新段與所述 先前存儲的段之間的逐字節(jié)相似性。
      21、 如權(quán)利要求l所述的方法,其中,在存儲所述新段的過程中沒 有信息損失。
      22、 一種利用數(shù)據(jù)段的相似度進行存儲的計算機程序產(chǎn)品,所述計 算機程序產(chǎn)品被具體實現(xiàn)在計算機可讀介質(zhì)中并且包括用于執(zhí)行以下 操作的指令確定新段與先前存儲的段相似,其中所述先前存儲的段包括來自輸 入數(shù)據(jù)流中的任何位置的先前存儲的段;確定所述新段與所述先前存儲的段之間的增量;以及 至少部分地基于所述增量來存儲所述新段的表示。
      23、 一種利用數(shù)據(jù)段的相似度進行存儲的系統(tǒng),包括 處理器;以及與所述處理器相耦合的存儲器,其中所述存儲器被配置成向所述處 理器提供指令,所述指令在被執(zhí)行時使得所迷處理器執(zhí)行以下操作確定新段與先前存儲的段相似,其中所述先前存儲的段包括來自輸 入數(shù)據(jù)流中的任何位置的先前存儲的段;確定所述新段與所述先前存儲的段之間的增量;以及至少部分地基于所述增量來存儲所述新段的表示。
      全文摘要
      公開了利用數(shù)據(jù)段的相似度進行存儲。確定新段與先前存儲的段相似。所述先前存儲的段包括來自輸入數(shù)據(jù)流中的任何位置的先前存儲的段。確定所述新段與所述先前存儲的段之間的增量。至少部分地基于所述增量來存儲所述新段的表示。
      文檔編號G06F17/30GK101467148SQ200780021765
      公開日2009年6月24日 申請日期2007年4月11日 優(yōu)先權(quán)日2006年4月11日
      發(fā)明者K·李, M·B·朱, U·馬赫什沃里, Z·楊 申請人:數(shù)據(jù)域公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1