亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于數(shù)據(jù)去重復(fù)的快速且低ram占用的索引的制作方法

文檔序號:6443572閱讀:152來源:國知局
專利名稱:用于數(shù)據(jù)去重復(fù)的快速且低ram占用的索引的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)去重復(fù)。
背景技術(shù)
數(shù)據(jù)去重復(fù)(有時也稱為數(shù)據(jù)優(yōu)化)是存儲系統(tǒng)中最近的趨勢,一般指的是減少需要被存儲在盤上或需要通過網(wǎng)絡(luò)上進(jìn)行傳送的數(shù)據(jù)的物理字節(jié)量,而不會損害原始數(shù)據(jù)的保真性和完整性,即字節(jié)上的減少是無損的并且原始數(shù)據(jù)可被完全恢復(fù)。通過減少存儲和/或傳送數(shù)據(jù)所需的資源,數(shù)據(jù)去重復(fù)因此導(dǎo)致(用于存儲和網(wǎng)絡(luò)傳輸?shù)?硬件成本以及數(shù)據(jù)管理成本(例如,備份)的節(jié)約。隨著數(shù)字存儲的數(shù)據(jù)的數(shù)量增長,這些成本節(jié)約變得重要。數(shù)據(jù)去重復(fù)通常使用用于消除持久存儲的文件內(nèi)部及其之間的冗余性的技術(shù)的組合。一種技術(shù)用于標(biāo)識一個或多個文件中的數(shù)據(jù)的相同部分,并在物理上只存儲一個唯一部分(塊),而維護(hù)對與文件相關(guān)聯(lián)的該塊的指針。另一技術(shù)是例如通過為每一唯一的塊存儲經(jīng)壓縮的塊來將數(shù)據(jù)去重復(fù)與壓縮混合。為了標(biāo)識這些塊,存儲這些塊的服務(wù)器維護(hù)系統(tǒng)中這些塊的散列的散列索引服務(wù)。散列唯一地標(biāo)識了塊并用作鍵、值對中的鍵。值對應(yīng)于塊存儲中塊的位置。因?yàn)楫?dāng)代的去重復(fù)系統(tǒng)可能需要擴(kuò)展到數(shù)十萬億字節(jié)至千萬億字節(jié)的數(shù)據(jù)量,所以塊散列索引太大以致不適合于主存儲設(shè)備(即,RAM)。由此,需要使用輔助存儲設(shè)備,諸如硬盤驅(qū)動器或固態(tài)驅(qū)動器。索引操作因此是吞吐量受限的,受在輔助存儲設(shè)備上執(zhí)行的相對緩慢的I/O操作的限制。所需要的是給定有限的主存儲資源的情況下盡可能多地減少 I/O訪問次數(shù)。

發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容以便以簡化形式介紹將在以下的具體實(shí)施方式
中進(jìn)一步描述的一些代表性概念。本發(fā)明內(nèi)容不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在以限制所要求保護(hù)的主題的范圍的任何方式來使用。簡言之,此處所描述的主題的各方面涉及去重復(fù)技術(shù),通過該去重復(fù)技術(shù)散列索引服務(wù)的索引被配置成在輔助存儲設(shè)備中維護(hù)基于日志的索引,并維護(hù)基于主存儲(例如,RAM)的緊湊索引表和/或基于RAM的前瞻高速緩存,訪問該緊湊索引表和/或前瞻高速緩存以減少輔助存儲設(shè)備I/O訪問?;赗AM的緊湊索引表包含緊湊簽名和用于將請求中提供的散列值映射至散列索引(可能)在其中被維護(hù)的輔助存儲設(shè)備中的索引位置的指針。如果散列在緊湊索引表中并沒有被找到,則該散列對應(yīng)于還沒有被索引的新的塊,并且響應(yīng)于該請求返回未找到結(jié)果。否則,遵循指針以定位散列值、塊元數(shù)據(jù)以供響應(yīng)于請求而返回;注意,在大多數(shù)情況下,所請求的散列值是經(jīng)由在索引中經(jīng)由指針找到的散列值來被匹配的,但是該散列值可能并沒有被找到,在該情況下影響于該請求返回未找到結(jié)果。
此外,可以使用基于RAM的前瞻高速緩存。只要在輔助存儲設(shè)備中找到匹配的散列值,某一數(shù)量k的散列值,元數(shù)據(jù)條目就被加載到前瞻高速緩存中。獲取來加載到高速緩存中的數(shù)字可對應(yīng)于文件邊界,例如,在散列索引中檢測到的如被置于每個文件的塊的結(jié)尾處。在一方面,日志結(jié)構(gòu)的散列索引的條目包括散列值以及與每一散列值相關(guān)聯(lián)的元數(shù)據(jù)。散列索引通過對日志結(jié)構(gòu)的散列索引追加新的條目來更新。在追加期間,諸如出于 I/o優(yōu)化的原因,條目可被安排在一個或多個條目頁面上。散列索引可以使用來自會話高速緩存的數(shù)據(jù)來更新,該來自會話高速緩存的數(shù)據(jù)表示對應(yīng)于在最后一個優(yōu)化會話中所處理的文件的條目。會話高速緩存還可被訪問來查找與請求的散列值相關(guān)聯(lián)的塊元數(shù)據(jù)。在每個周期性去重復(fù)會話的結(jié)尾,會話高速緩存的內(nèi)容被事務(wù)性地轉(zhuǎn)移至主散列索引。以此方式,散列索引在去重復(fù)會話持續(xù)時間中保持“崩潰一致”,即,如果在去重復(fù)會話期間發(fā)生服務(wù)崩潰或突然中斷,則輔助存儲保持完好并且在下一個去重復(fù)會話的開始時恢復(fù)。在另一方面,緊湊索引表可對應(yīng)于包括日志索引表的較小子集的子空間。如果子空間是滿的,則它可以成為密封的(只讀)并且緊湊索引表對應(yīng)于只讀模式。編碼器可訪問子空間以將緊湊索引編碼為縮小的存儲器大小的緊湊索引表。在一個方面,通過使用避免散列沖突的基于cuckoo散列的算法,緊湊簽名被插入至緊湊索引表中。如果基于cuckoo散列的算法無法為緊湊簽名找到可用的空位,這可能是因?yàn)闆]有或者因?yàn)樗试S的嘗試數(shù)量受限,則緊湊簽名可被寫至溢出表中。結(jié)合附圖閱讀以下具體實(shí)施方式
,本發(fā)明的其他優(yōu)點(diǎn)會變得顯而易見。


作為示例而非限制,在附圖中示出了本發(fā)明,附圖中相同的附圖標(biāo)記指示相同或相似的元素,附圖中圖I是表示被配置成使用配置有緊湊索引表和前瞻高速緩存的散列索引服務(wù)來去重復(fù)的數(shù)據(jù)存儲服務(wù)的示例組件的框圖。圖2是表示如何為了效率或在緊湊索引表已滿時使用溢出表的框圖。圖3是表示由散列索引服務(wù)執(zhí)行來處理對所請求的散列值的查找操作的示例操作的圖示,包括散列值的緊湊簽名在緊湊索引表中被找到時。圖4是表示由散列索引服務(wù)執(zhí)行來處理對所請求的散列值的查找操作的示例操作的圖示,包括散列值的緊湊簽名在緊湊索引表中并沒有被找到時。圖5是表示用于在給定散列值的情況下處理返回元數(shù)據(jù)或未找到響應(yīng)的請求的示例步驟的流程圖。圖6是表示其中可實(shí)現(xiàn)此處描述的各種實(shí)施例的示例性非限制聯(lián)網(wǎng)環(huán)境的框圖。圖7是表示其中可實(shí)現(xiàn)此處所描述各種實(shí)施例的一個或多個方面的示例性非限制計(jì)算系統(tǒng)或操作環(huán)境的框圖。
具體實(shí)施例方式此處所描述的技術(shù)的各方面一般涉及散列索引服務(wù),該散列索引服務(wù)將輔助存儲設(shè)備(例如,硬盤驅(qū)動器或固態(tài)驅(qū)動器)中的整個散列索引(例如,用于存儲去重復(fù)系統(tǒng))用作日志結(jié)構(gòu)的索引,同時在主存儲設(shè)備(例如,RAM)中維護(hù)被稱為“緊湊索引表”的相對較小的輔助索引。被稱為前瞻高速緩存的高速緩存也可以被用在主存儲中。一般而言,緊湊索引表和前瞻高速緩存用于在去重復(fù)操作期間盡可能減少訪問輔助存儲設(shè)備的1/0,以始終實(shí)現(xiàn)高度去重復(fù),并具有相對非常低的主存儲占用。同時,索引設(shè)計(jì)適應(yīng)對各種類型的更快的輔助存儲介質(zhì)(如閃存)的使用。在一個方面,數(shù)據(jù)去重復(fù)服務(wù)的全局散列索引(其可對應(yīng)于整個散列索引,或如上述名為“Using Index Partitioning and Reconciliation for Data Deduplication(使用索引劃分及協(xié)調(diào)來進(jìn)行數(shù)據(jù)去重復(fù))”的美國專利申請中所述的多個子空間的一組散列索引)存儲在輔助存儲設(shè)備中?;谏⒘斜淮娣藕?或被引用的次序,索引被按照基于日志的次序來存儲。前瞻高速緩存與散列索引相關(guān)聯(lián),并且在標(biāo)識到散列命中時,將日志文件中附近的散列條目加載至前瞻高速緩存中。如將會理解的,這減少了執(zhí)行后續(xù)散列查找操作所需的I/O量。此外,緊湊存儲器索引表被創(chuàng)建來幫助在輔助存儲器設(shè)備中進(jìn)行散列查找。如以下所述,緊湊索引表包括被刪減的散列簽名(例如,校驗(yàn)和),該被刪減的散列簽名可被訪問來確定散列何時并不存在于日志結(jié)構(gòu)的索引中,或者確定散列可能存在與日志結(jié)構(gòu)的索引中,在此情況下緊湊條目進(jìn)一步標(biāo)識日志結(jié)構(gòu)的索引中的位置,由此可找到此散列,如果它確實(shí)存在的話。通常,在被刪減的索引簽名中有足夠的信息使得假肯定(即,散列可能存在但實(shí)際上并不存在)的百分比相對較低。應(yīng)當(dāng)理解的是,此處的任何示例均是非限制的。實(shí)際上,此處所描述的技術(shù)適用于任何類型的易失性或非易失性存儲,包括本地的和遠(yuǎn)程的。此外,索引機(jī)制可以和任何鍵、 值類型存儲一起使用,并不限于數(shù)據(jù)去重復(fù)應(yīng)用。因此,本發(fā)明不限制于在此描述的任何具體的實(shí)施例、方面、概念、結(jié)構(gòu)、功能或示例。相反,這里所描述的任何一個實(shí)施例、方面、概念、結(jié)構(gòu)、功能或示例都是非限制性的,且本發(fā)明可以按一般而言在計(jì)算和數(shù)據(jù)索引和檢索方面提供好處和優(yōu)點(diǎn)的各種方式來使用。圖I示出內(nèi)容知曉數(shù)據(jù)去重復(fù)數(shù)據(jù)存儲系統(tǒng)的示例組件,諸如在數(shù)據(jù)/文件存儲服務(wù)102中實(shí)現(xiàn)。服務(wù)102接收數(shù)據(jù)104 (文件、團(tuán)塊等),去重復(fù)邏輯106處理該數(shù)據(jù)來去重復(fù);注意,該數(shù)據(jù)和/或服務(wù)可駐留在基本上任何地方,例如,本地、遠(yuǎn)程和/或在“云中去重復(fù)”場景中。為了處理數(shù)據(jù),去重復(fù)邏輯106將數(shù)據(jù)104提供給分塊模塊108,該模塊將內(nèi)容處理成各個塊,諸如根據(jù)文件的結(jié)構(gòu)(例如,將媒體文件劃分成媒體首部和媒體主體)、或者通過使用以非常小的間隔(通常是每一個字節(jié))計(jì)算的快速可計(jì)算弱散列函數(shù)(如,Rabin散列)。塊邊界一般在散列函數(shù)滿足特定條件的位置處以內(nèi)容相關(guān)方式來確定。接下來的描述針對一個塊110,但是可以理解,數(shù)據(jù)一般被劃分為多個塊。注意,“內(nèi)容相關(guān)” 一般指的是添加至文件的編輯或偏移僅對所生成的塊造成本地改變的概念,例如,因?yàn)镽abin指紋是從內(nèi)容本身生成的(分塊并非一定要知道文件的格式從而以格式知曉的方式來分塊)。去重復(fù)邏輯106將塊110傳遞給求散列機(jī)制112,求散列機(jī)制112計(jì)算塊的散列 (被稱為塊散列114)。強(qiáng)散列函數(shù),如密碼安全的SHA-256散列函數(shù)等可被用作唯一地標(biāo)識塊110的塊散列114。注意,使用這樣的安全散列,消除了散列沖突的可能性,如,散列沖突小于給定當(dāng)前可用的最可靠的硬件的硬件誤差約30倍大小。
塊散列114被提供給散列索引服務(wù)116,散列索引服務(wù)116如此處所述地經(jīng)由一個或多個各種結(jié)構(gòu)來查找塊散列。如果在散列索引服務(wù)116中找到了塊散列114( S卩,已經(jīng)存在),塊110的重復(fù)副本被認(rèn)為已經(jīng)被存放在塊存儲118中,無需再存儲當(dāng)前的塊。相反,對這個塊的任何引用可僅指向之前的、已經(jīng)存在的塊。如果在散列索引服務(wù)116中沒有找到塊散列114,塊110被存入塊存儲118中,且塊散列114被存入散列索引服務(wù)116??梢匀菀椎乩斫?,隨著時間給定充足的數(shù)據(jù),通過引用塊而不是維護(hù)同一數(shù)據(jù)塊的很多獨(dú)立實(shí)例可節(jié)省大量存儲。塊通常還被壓縮,節(jié)省了甚至更多的存儲。此處所描述的技術(shù)涉及散列索引服務(wù)116的體系結(jié)構(gòu)和算法,且更具體涉及維護(hù)主存儲124中的前瞻高速緩存120和緊湊索引表122以及輔助存儲128中的日志結(jié)構(gòu)的索引126。注意,諸如在基于子空間的散列索引服務(wù)中,日志結(jié)構(gòu)的索引126可以是單個全局索引,或者可以被劃分為多個索引,其中子空間是總體系統(tǒng)的全局索引的較小部分,如上述名為“Using Index Partitioning and Reconciliation for Data Deduplication(使用索引劃分及協(xié)調(diào)來進(jìn)行數(shù)據(jù)去重復(fù))”的美國專利申請中所述。一般而言,使用日志結(jié)構(gòu)的索引允許多個索引條目被捆綁在一起(例如,如以下所述,在緩沖區(qū)或會話高速緩存中)來追加到日志索引,例如基于達(dá)到特定的大小周期性地或者以其他所需的方式相對于將每個條目分別插入日志索引中減少I/o操作的數(shù)量。這也便于使用諸如基于閃存的存儲器設(shè)備之類的固態(tài)存儲設(shè)備,例如,其中數(shù)據(jù)是以頁為單位來寫入的,并且在其中以日志結(jié)構(gòu)的方式寫入數(shù)據(jù)更加高效。緊湊索引表122將每個散列映射至輔助存儲設(shè)備128中的索引的位置,該散列值 (可能)被維護(hù)在輔助存儲設(shè)備128中。此外,使用前瞻高速緩存120,使得只要在輔助存儲器128中確認(rèn)了命中,k個散列索引(被命中的鄰居)就被加載至前瞻高速緩存120中。 鄰居的數(shù)量可通過某個固定數(shù)量來確定,或者可對應(yīng)于文件邊界。用于鄰居選擇的文件邊界在許多場景中都是有用的,因?yàn)槲募K最初是按次序來索引的,由此任何類似的文件都將可能具有一些或全部的塊和因此的鄰近給定塊的散列散列。注意,日志結(jié)構(gòu)的索引可被配置成包括描繪對應(yīng)于每個不同文件的塊的散列的文件末尾標(biāo)記,例如全零條目(盡管塊散列可以是全零,但是塊標(biāo)識符(位置id)可被定義為非零,因而全零條目是無效的并可用作日志索引中的文件末尾標(biāo)記)。前瞻高速緩存120是基于局部性概念的,即,去重復(fù)的塊在源文件和目標(biāo)目的地中常常彼此相鄰(例如,塊存儲以及對應(yīng)的索引)。在這一情況發(fā)生時,一個散列值在輔助存儲設(shè)備128中被命中,存在以下合理的可能性接下來的一個或多個塊散列或多個散列將鄰近先前的塊,由此那些鄰居被加載至高速緩存中,在其中它們可以在快速的高速緩存查找中被命中,而非較慢的輔助索引查找。注意,前瞻高速緩存120在其使用中不需要是完全反應(yīng)式的,而是可以諸如基于統(tǒng)計(jì)數(shù)字或諸如為系統(tǒng)維護(hù)的計(jì)數(shù)之類的其他數(shù)據(jù),使用來自日志結(jié)構(gòu)的索引的散列值被主動地加載。例如,前瞻高速緩存120可以使用由去重復(fù)系統(tǒng)跟蹤的最流行的散列(大體上和/或相對于諸如最后三十天之類的某個時間窗口計(jì)算的)來預(yù)填充。另選地,或者除最流行的塊散列之外,在相同的塊常常在時間上傾向于集中在一起的基礎(chǔ)上,前瞻高速緩存120 可使用最近使用的散列來預(yù)填充。由此,前瞻高速緩存120根據(jù)塊局部性預(yù)抓取散列,并且還可存儲最流行和/或最頻繁使用的塊的散列,以進(jìn)一步減少盤訪問的概率并在查找操作期間查找。在新的散列通過以上所述的前瞻/鄰居散列加載技術(shù)被添加時,可使用公知的高速緩存管理技術(shù)(例如,LRU或SLRU)來驅(qū)逐散列。注意,出于效率考慮,關(guān)于高速緩存120 的散列加載和驅(qū)逐不需要被安排來每次處理單個散列,而改為可以以更大的單位來加載/ 驅(qū)逐,諸如每次一頁散列條目。至此概述,在一個實(shí)現(xiàn)中,散列索引服務(wù)116被用于支持?jǐn)?shù)據(jù)去重復(fù)系統(tǒng),其中數(shù)據(jù)項(xiàng)包括散列、元數(shù)據(jù)對,并且其中數(shù)據(jù)塊的每一散列被用于確定該塊是否是另一數(shù)據(jù)塊的重復(fù)。元數(shù)據(jù)是在塊存儲中定位塊的塊標(biāo)識符。散列、元數(shù)據(jù)對主要存儲在輔助存儲設(shè)備128中的日志結(jié)構(gòu)的索引126中。對于緊湊索引表122,散列的刪減版本被維護(hù)在主存儲設(shè)備中作為緊湊索引表。如以上概括描述地,緊湊索引表122存儲緊湊鍵簽名(被刪減的散列)而非完整的塊散列,從而在RAM使用和假讀取中達(dá)成折中。為了在最小化假閃存讀取時接近最大化散列表索引容量(條目數(shù)量),一個實(shí)現(xiàn)在緊湊索引表122的每一條目中存儲了緊湊的M比特/字節(jié)長度的鍵簽名(以若干字節(jié)的量級,例如兩個字節(jié))。此簽名可以從鍵和該鍵被存儲的候選位置號導(dǎo)出。在鍵X存儲在它的候選位置號i時,各散列表索引空位中的簽名從散列值的較高階的位hi (X)被導(dǎo)出。在搜索操作器件,在鍵I在它的候選空位號j中被查找時,相應(yīng)的簽名從hj (y)被計(jì)算出并與存儲在該空位中的簽名比較。僅當(dāng)匹配發(fā)生時,指向日志結(jié)構(gòu)的索引126的指針才跟著來檢查整個鍵(整個散列)是否匹配。假讀取的百分比相對較低,例如,候選空位的數(shù)量除以簽名空間(對于2字節(jié)簽名空間是65536)。緊湊索引表122的主存儲(例如,RAM)大小可在考慮應(yīng)用要求的情況下來確定。每條目具有2字節(jié)緊湊鍵簽名以及N比特/字節(jié)長度(例如,等于4字節(jié))的日志索引指針, 每條目總計(jì)6字節(jié),對于散列表索引,每機(jī)器4GB RAM中的典型RAM使用適應(yīng)最大約71500 萬個塊散列條目。以每個數(shù)據(jù)塊平均8KB大小,這適應(yīng)約6TB去重復(fù)的數(shù)據(jù)。另選地,考慮為塊散列和它的元數(shù)據(jù)分配64字節(jié),這對應(yīng)于約45GB的塊元數(shù)據(jù)。出于去重復(fù)的目的, 去重復(fù)系統(tǒng)被設(shè)計(jì)成每個條目使用RAM中相對較少數(shù)量的字節(jié)(例如,每個緊湊條目6字節(jié)),從而對于給定的RAM使用大小最大化RAM散列表索引容量。緊湊索引表122可對應(yīng)于只讀模式,并且如果子空間是在使用中則可存在有只讀緊湊索引表,例如在子空間是滿的并且可能變成"密封的”時該子空間成為只讀子空間。如以下所述,對于只讀緊湊索引表,可使用編碼機(jī)制(算法)來從子空間中已有的條目計(jì)算編碼的緊湊索引表(例如,如以下所述的被刪減的基于CUCk00散列的表),該編碼的緊湊索引表以更高的散列表填充率使用更少的存儲空間。然后可向緊湊索引表122咨詢以在子空間中定位散列,對于一個實(shí)現(xiàn)中的緊湊索引表每個散列條目僅使用6個字節(jié)。緊湊索引表122可對應(yīng)于寫模式,對于該寫模式可添加新的散列條目。刪減的 cuckoo散列表還可以用于寫模式。如下所述,為了減少在緊湊索引表中添加新的散列條目時沖突的復(fù)雜性,可使用相對較小的溢出散列表。更具體地,緊湊索引表可通過cuckoo散列來解決散列沖突。如圖2中所表示的, 緊湊散列表索引122被結(jié)構(gòu)化為空位陣列。在一個實(shí)現(xiàn)中,其中多個緊湊簽名映射至同一散列表索引空位的散列沖突由表插入邏輯230使用cuckoo散列或cuckoo散列的變型來解決。為此,cuckoo散列為每一緊湊簽名提供了位于n ^ 2個位置其中之一的靈活性; cuckoo散列變型保持上限為η的線性探測鏈序列,并如下所述可導(dǎo)致對溢出表的寫入。注意,cuckoo散列在將查找時間保持綁定為常量時增加了散列表負(fù)載因子。在用于一個實(shí)現(xiàn)的cuckoo散列變型中,使用η個隨機(jī)散列函數(shù)hi, h2 . . . hn來獲得給定緊湊簽名X的η個候選位置。緊湊簽名X的這些候選位置索引是從對應(yīng)于模運(yùn)算的hl(x),h2(x);——hn(x)的較低階的比特值來獲取的。在插入期間,緊湊簽名和它的元數(shù)據(jù)條目被插入在第一個可用的候選空位中。在給定的緊湊簽名X的全部空位在插入期間都被占據(jù)時(例如,被緊湊簽名yl,y2 ... yn), 可通過對這些被占據(jù)的空位中的緊湊簽名yi進(jìn)行重新定位來為緊湊簽名X的條目騰出空間,因?yàn)槊總€緊湊簽名yi可選擇放置在(η-I)個其他位置中的一個。注意,在原始的cuckoo 散列方案中,使用遞歸策略來對緊湊簽名yi中的一個進(jìn)行重新定位;然而在最壞情況下, 此策略可能進(jìn)行許多次重新定位,但是其概率可表現(xiàn)為非常小并且在η個中指數(shù)下降。由此,表插入邏輯230的過程可嘗試某個數(shù)量的條目重新定位,之后如果不成功的話,可根據(jù)多個選項(xiàng)來操作。其中一個選項(xiàng)是使去重復(fù)服務(wù)暫停去重復(fù),并在恢復(fù)去重復(fù)之前將緊湊索引表重建為更新、更大的緊湊索引表。另一選項(xiàng)是線性鏈,其在某個數(shù)量的嘗試之后插入/尋找線性后續(xù)的空位。又一選項(xiàng)是將緊湊簽名和元數(shù)據(jù)條目寫入至溢出表 232,該選項(xiàng)可避免重建寫模式緊湊索引表的開銷以及在線性鏈中增加的訪問1/0成本。在 cuckoo散列的變型中,一旦某個較小數(shù)量的嘗試已經(jīng)失敗就可向溢出表232寫入,以避免繼續(xù)進(jìn)一步的cuckoo散列嘗試所需的計(jì)算。如果溢出表232被使用,則表讀取邏輯(或者編碼器)234知道如果在緊湊索引表122中查找緊湊簽名不成功,或者如果索引表變?yōu)槊芊獾暮?或如下所述編碼的,就訪問溢出表232。轉(zhuǎn)向另一方面,諸如在離線編碼過程中,可對只讀緊湊索引表進(jìn)行編碼以節(jié)省額外的存儲器空間,以及減少假肯定。更具體地,在寫模式中,緊湊索引表必須保留一些額外的存儲器空間以幫助cuckoo散列有效地解決沖突(以避免太多計(jì)算/搜索開放的空位和 /或溢出表的過度使用等,這些加劇了低效)。占用率一般是百分之八十至九十的量級。然而,一旦只讀,則全部的鍵都是已知的,并且不需要這樣的額外空間,因?yàn)闆]有新的鍵要插入,并且大部分額外空間是可被回收的(在編碼后一些仍然可以保留);編碼后的占用率一般是百分之九十五至九十八的量級。為此,可處理密封的子空間,并且對于將放入對該子空間進(jìn)行索引的緊湊索引表中的全部條目,可生成二分圖以將每個鍵鏈接至它的候選位置。在移除沖突之后,可通過搜索匹配來計(jì)算編碼,如美國專利申請序列號12/725840 “用于存儲信標(biāo)參考數(shù)據(jù)的cuckoo 散列”所述,并通過引用結(jié)合于此。注意,不首先移除沖突而匹配將增加假肯定,由此移除沖突一般是更優(yōu)的,其增加了少量額外存儲器空間但是導(dǎo)致了消除假肯定的編碼的緊湊索引表。圖3和圖4示出了以上所述各組件之間的一些數(shù)據(jù)流操作,操作由使用圓環(huán)數(shù)字標(biāo)記的箭頭來表示。在圖3中,如箭頭一(I)所表示的,散列索引服務(wù)116首先檢查會話高速緩存330(是否有任何在使用中),以確定塊是否已經(jīng)被確定為此會話中的新的塊。更具體地,出于效率考慮,去重復(fù)服務(wù)可對多個文件進(jìn)行批處理(例如,在去重復(fù)會話中),然后將塊提交至塊存儲,并且(散列、塊元數(shù)據(jù))索引一起更新。出于此目的,去重復(fù)服務(wù)使用會話高速緩存330 (如果這樣的批處理正發(fā)生在給定的實(shí)現(xiàn)中)。由此,存在散列已經(jīng)被檢測為新的并由此駐留在會話高速緩存330中的可能性,該散列可被有效地查找因?yàn)樗v留在主存儲中供隨后提交至輔助存儲中的日志索引126。如果找到,則散列索引服務(wù)116返回該散列的元數(shù)據(jù),查找操作結(jié)束。在去重復(fù)會話的結(jié)尾處,會話高速緩存被周期性地“轉(zhuǎn)儲”至主索引中。這是通過迭代通過存儲至?xí)捀咚倬彺嬷械纳⒘?,并以事?wù)的、全部或沒有的方法將它們移至主索引來完成的保持散列索引和會話高速緩存分開的原因是在每一去重復(fù)會話的結(jié)尾處確保散列索引數(shù)據(jù)結(jié)構(gòu)的事務(wù)更新。如果在會話高速緩存330中沒有找到或者并沒有會話高速緩存在使用中,則散列索引服務(wù)訪問前瞻高速緩存120來查找該散列,如箭頭二(2)所表示以及如以上概括描述的。如果找到,則散列索引服務(wù)116返回該散列的元數(shù)據(jù),查找操作結(jié)束。如果在前瞻高速緩存120中沒有找到,則散列索引服務(wù)在緊湊索引表中查找散列值的緊湊簽名,如箭頭三(3)所表示的。如果沒找到,則這是新的散列,散列索引服務(wù)返回 “未找到”狀態(tài)至去重復(fù)服務(wù),之后可經(jīng)由插入操作來相應(yīng)地處理塊和索引條目,例如,從會話高速緩存插入或者直接插入至日志結(jié)構(gòu)的索引(或者該日志結(jié)構(gòu)的索引的緩沖區(qū),諸如基于頁面的緩沖區(qū),緩沖區(qū)可被認(rèn)為是索引的一部分,即使維護(hù)在主存儲中)。在追加散列索引時緊湊索引表被更新。在圖3的示例中,考慮在緊湊索引表122中找到一個或多個緊湊簽名,并返回(箭頭(4a))指向日志結(jié)構(gòu)的索引的對應(yīng)指針。散列索引服務(wù)使用每個指針(箭頭五(5))來查找完整散列值的日志結(jié)構(gòu)的索引126。如果沒找到,(全部緊湊簽名實(shí)際上都是假肯定),則向去重復(fù)服務(wù)返回“未找到”信息。如果找到,這就是命中,并返回(箭頭六(6))散列的塊元數(shù)據(jù)以及找到的散列的鄰近散列。鄰近散列可被添加至前瞻高速緩存120(箭頭七(7)), 在適當(dāng)時驅(qū)逐其他條目。在圖4的示例中,考慮在訪問緊湊索引表之后,發(fā)現(xiàn)散列并不存在(箭頭(4b))。 在此情況下,散列是新的,向去重復(fù)服務(wù)返回“未找到”結(jié)果,并且將進(jìn)行后續(xù)的插入。這可包括對會話高速緩存的寫入(箭頭八(8)),或者在箭頭九(9)處對日志結(jié)構(gòu)的索引(或者將要寫入的緩沖區(qū),其可被認(rèn)為是索引的一部分)的寫入。如果會話高速緩存并沒有在使用中,則可更新緊湊索引表(箭頭十(10))。圖5是以確定散列值是對應(yīng)于新的還是已有的塊的示例步驟的形式示出散列索引服務(wù)的一些邏輯的流程圖。步驟502檢查會話高速緩存來查找散列,如果該散列存在的話。如果找到(步驟504),則過程在步驟520返回隨附的塊元數(shù)據(jù)并結(jié)束。如果在步驟502沒有找到或者沒有會話高速緩存存在,則步驟506表示對前瞻高速緩存進(jìn)行訪問。如果找到(步驟506),則過程在步驟520返回隨附的塊元數(shù)據(jù)并結(jié)束。步驟510表示在緊湊簽名表中尋找散列的緊湊簽名。如果沒有找到(步驟512), 則知道此散列對應(yīng)于新的塊,并且在步驟522返回未找到響應(yīng)。步驟522還表示處理新的塊的其他方面,諸如響應(yīng)于對散列索引服務(wù)的插入調(diào)用。如上所述,如果在步驟512找到一個或多個緊湊簽名,則在步驟514處使用與每個緊湊簽名相關(guān)聯(lián)的指針來在日志結(jié)構(gòu)的索引中查找完整散列值(其可包括溢出表訪問或
10線性鏈處理)。如果沒有找到(步驟516),則緊湊簽名條目就是假肯定。如果全部緊湊簽名條目(或者一個條目,如果僅有一個的話)都是假肯定,則過程經(jīng)由步驟522返回未找到以作為新的塊來處理。如果在步驟516中散列在索引中被匹配,則經(jīng)由步驟520返回塊元數(shù)據(jù)。而且,獲取鄰居散列(步驟518)并將其添加至前瞻高速緩存中。可以看出,對日志結(jié)構(gòu)的索引、前瞻高速緩存和緊湊索引表的使用提供了高效的存儲器使用,同時在去重復(fù)系統(tǒng)中減少了對輔助存儲設(shè)備的I/o訪問。諸如會話高速緩存、 子空間的只讀緊湊索引表、對只讀緊湊索引表進(jìn)行編碼之類的其他方面在去重復(fù)系統(tǒng)中提供了進(jìn)一步的益處。示例性聯(lián)網(wǎng)以及分布式環(huán)境本領(lǐng)域技術(shù)人員可以理解,此處描述的各實(shí)施例和方法可結(jié)合任何計(jì)算機(jī)或其它客戶機(jī)或服務(wù)器設(shè)備來實(shí)現(xiàn),其可被部署為計(jì)算機(jī)網(wǎng)絡(luò)的部分或在分布式計(jì)算環(huán)境中,并且可以被連接到任何類型一個或多個數(shù)據(jù)存儲。在這一點(diǎn)上,此處描述的各實(shí)施例可在具有任何數(shù)量的存儲器或存儲單元的、并且任何數(shù)量的應(yīng)用和進(jìn)程跨任何數(shù)量的存儲單元發(fā)生的任何計(jì)算機(jī)系統(tǒng)或環(huán)境中實(shí)現(xiàn)。這包括但不限于具有部署在具有遠(yuǎn)程或本地存儲的網(wǎng)絡(luò)環(huán)境或分布式計(jì)算環(huán)境中的服務(wù)器計(jì)算機(jī)和客戶計(jì)算機(jī)的環(huán)境。分布式計(jì)算通過計(jì)算設(shè)備和系統(tǒng)之間的通信交換來提供計(jì)算機(jī)資源和服務(wù)的共享。這些資源和服務(wù)包括信息的交換、對于諸如文件之類的對象的高速高速緩存存儲和盤存儲。這些資源和服務(wù)還包括多個處理單元之間的處理能力共享以便進(jìn)行負(fù)載平衡、資源擴(kuò)展、處理專門化等等。分布式計(jì)算利用網(wǎng)絡(luò)連接,從而允許客戶機(jī)利用其集體力量來使整個企業(yè)受益。就此,各種設(shè)備可具有可如參考本發(fā)明的各實(shí)施例描述地參與資源管理機(jī)制的應(yīng)用、對象或資源。圖7提供了示例性的聯(lián)網(wǎng)或分布式計(jì)算環(huán)境的示意圖。該分布式計(jì)算環(huán)境包括計(jì)算對象710、712等以及計(jì)算對象或設(shè)備720、722、724、726、728等,這些計(jì)算對象或設(shè)備可包括如由示例應(yīng)用730、732、734、736、738表示的程序、方法、數(shù)據(jù)存儲、可編程邏輯等??梢岳斫猓?jì)算對象710、712等以及計(jì)算對象或設(shè)備720、722、724、726、728等可包括不同的設(shè)備,諸如個人數(shù)字助理(PDA)、音頻/視頻設(shè)備、移動電話、MP3播放器、個人計(jì)算機(jī)、膝上型計(jì)算機(jī)等。每個計(jì)算對象710、712等以及計(jì)算對象或設(shè)備720、722、724、726、728等可經(jīng)由通信網(wǎng)絡(luò)740直接或間接地與一個或多個其他計(jì)算對象710、712等以及計(jì)算對象或設(shè)備720、 722、724、726、728等通信。盡管在圖7中被示為單個元件,但通信網(wǎng)絡(luò)740可包括向圖7的系統(tǒng)提供服務(wù)的其他計(jì)算對象和計(jì)算設(shè)備和/或可表示未示出的多個互連網(wǎng)絡(luò)。每個計(jì)算對象710、712等或計(jì)算對象或設(shè)備720、722、724、726、728等還可以包含應(yīng)用,諸如可以利用API或其他對象、軟件、固件和/或硬件的、適于根據(jù)本發(fā)明的各實(shí)施例所提供的應(yīng)用實(shí)現(xiàn)與其進(jìn)行通信的應(yīng)用730、732、734、736、738。存在支持分布式計(jì)算環(huán)境的各種系統(tǒng)、組件和網(wǎng)絡(luò)配置。例如,計(jì)算系統(tǒng)可由有線或無線系統(tǒng)、本地網(wǎng)絡(luò)或廣泛分布的網(wǎng)絡(luò)連接在一起。當(dāng)前,許多網(wǎng)絡(luò)被耦合至因特網(wǎng),后者為廣泛分布的計(jì)算提供了基礎(chǔ)結(jié)構(gòu)并包含許多不同的網(wǎng)絡(luò),但任何網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)都可用于便于與如各實(shí)施例中所描述的系統(tǒng)的示例性通信。
由此,可使用諸如客戶機(jī)/服務(wù)器、對等、或混合體系結(jié)構(gòu)之類的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)的主機(jī)。“客戶機(jī)”是使用與其無關(guān)的另一類或組的服務(wù)的一類或組中的成員??蛻魴C(jī)可以是進(jìn)程,例如,大致上是請求另一程序或進(jìn)程所提供的服務(wù)的一組指令或任務(wù)??蛻魴C(jī)進(jìn)程使用所請求的服務(wù),而無需“知道”關(guān)于其他程序或服務(wù)本身的任何工作細(xì)節(jié)。在客戶機(jī)/服務(wù)器體系結(jié)構(gòu)中,尤其在聯(lián)網(wǎng)系統(tǒng)中,客戶機(jī)通常是訪問另一計(jì)算機(jī)(例如,服務(wù)器)所提供的共享網(wǎng)絡(luò)資源的計(jì)算機(jī)。在圖7的圖示中,作為非限制性示例,計(jì)算對象或設(shè)備720、722、724、726、728等可被認(rèn)為是客戶機(jī)而計(jì)算對象710、712等可被認(rèn)為是服務(wù)器,其中計(jì)算對象710、712等擔(dān)當(dāng)提供數(shù)據(jù)服務(wù)的服務(wù)器,諸如從客戶機(jī)計(jì)算對象或設(shè)備720、722、724、726、728等接收數(shù)據(jù)、存儲數(shù)據(jù)、處理數(shù)據(jù)、向客戶機(jī)計(jì)算對象或設(shè)備720、722、724、726、728等發(fā)送數(shù)據(jù),但任何計(jì)算機(jī)都可取決于環(huán)境而被認(rèn)為是客戶機(jī)、服務(wù)器、或兩者。服務(wù)器通常是可通過諸如因特網(wǎng)或無線網(wǎng)絡(luò)基礎(chǔ)架構(gòu)之類的遠(yuǎn)程網(wǎng)絡(luò)或本地網(wǎng)絡(luò)訪問的遠(yuǎn)程計(jì)算機(jī)系統(tǒng)??蛻魴C(jī)進(jìn)程可在第一計(jì)算機(jī)系統(tǒng)中活動,而服務(wù)器進(jìn)程可在第二計(jì)算機(jī)系統(tǒng)中活動,它們通過通信介質(zhì)相互通信,由此提供分布式功能并允許多個客戶機(jī)利用服務(wù)器的信息收集能力。在通信網(wǎng)絡(luò)740或總線是因特網(wǎng)的網(wǎng)絡(luò)環(huán)境中,例如,計(jì)算對象710、712等可以是其他計(jì)算對象或設(shè)備720、722、724、726、728等經(jīng)由諸如超文本傳輸協(xié)議(HTTP)之類的多種已知協(xié)議中的任一種與其通信的Web服務(wù)器。計(jì)算對象710、712等作為服務(wù)器還可用作例如計(jì)算對象或設(shè)備720、722、724、726、728等的客戶機(jī),這可以是如分布式計(jì)算環(huán)境的特性。示例性計(jì)算設(shè)備如上所述,有利地,本文所描述的技術(shù)可應(yīng)用于任何設(shè)備。因此,應(yīng)當(dāng)理解,構(gòu)想了結(jié)合各實(shí)施例使用的所有種類的手持式、便攜式和其它計(jì)算設(shè)備和計(jì)算對象。因此,以下在圖8中所述的通用遠(yuǎn)程計(jì)算機(jī)只是計(jì)算設(shè)備的一個示例。各實(shí)施例可部分地經(jīng)由操作系統(tǒng)來實(shí)現(xiàn),以供設(shè)備或?qū)ο蟮姆?wù)開發(fā)者使用和/ 或被包括在用于執(zhí)行此處所述的各實(shí)施例的一個或多個功能方面的應(yīng)用軟件內(nèi)。軟件可以在由諸如客戶機(jī)工作站、服務(wù)器或其它設(shè)備等一個或多個計(jì)算機(jī)執(zhí)行的諸如程序模塊等計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述。本領(lǐng)域的技術(shù)人員可以理解,計(jì)算機(jī)系統(tǒng)具有可用于傳遞數(shù)據(jù)的各種配置和協(xié)議,并且由此沒有特定配置或協(xié)議應(yīng)當(dāng)被認(rèn)為是限制性的。圖8由此示出了其中可實(shí)現(xiàn)本文所述的各實(shí)施例的一個或多個方面的合適的計(jì)算系統(tǒng)環(huán)境800的一個示例,盡管如上所述,計(jì)算系統(tǒng)環(huán)境800僅為合適的計(jì)算環(huán)境的一個示例,并非對使用范圍或功能提出任何限制。此外,也不應(yīng)當(dāng)將計(jì)算系統(tǒng)環(huán)境800解釋為對在示例性計(jì)算系統(tǒng)環(huán)境800中所示的組件中的任何一個或其組合有任何依賴。參考圖8,用于實(shí)現(xiàn)一個或多個實(shí)施例的示例性遠(yuǎn)程設(shè)備包括計(jì)算機(jī)810形式的通用計(jì)算設(shè)備。計(jì)算機(jī)810的組件可包括,但不限于,處理單元820、系統(tǒng)存儲器830、以及將包括系統(tǒng)存儲器的各種系統(tǒng)組件耦合到處理單元820的系統(tǒng)總線822。計(jì)算機(jī)810通常包括各種計(jì)算機(jī)可讀介質(zhì),并且可以是可由計(jì)算機(jī)810訪問的任何可用介質(zhì)。系統(tǒng)存儲器830可包括諸如只讀存儲器(ROM)和/或隨機(jī)存取存儲器(RAM)之類的易失性和/或非易失性存儲器形式的計(jì)算機(jī)存儲介質(zhì)。作為示例而非限制,系統(tǒng)存儲器830還可包括操作系統(tǒng)、應(yīng)用程序、其他程序模塊、以及程序數(shù)據(jù)。用戶可通過輸入設(shè)備840向計(jì)算機(jī)810輸入命令和信息。監(jiān)視器或其他類型的顯示設(shè)備也經(jīng)由諸如輸出接口 850之類的接口連接到系統(tǒng)總線822。除監(jiān)視器以外,計(jì)算機(jī)還可包括諸如揚(yáng)聲器和打印機(jī)之類的其他外圍輸出設(shè)備,它們可通過輸出接口 850連接。計(jì)算機(jī)810可使用到一個或多個其他遠(yuǎn)程計(jì)算機(jī)(諸如遠(yuǎn)程計(jì)算機(jī)870)的邏輯連接在聯(lián)網(wǎng)或分布式環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)870可以是個人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其他常見網(wǎng)絡(luò)節(jié)點(diǎn)、或者任何其他遠(yuǎn)程媒體使用或傳輸設(shè)備,并且可包括以上關(guān)于計(jì)算機(jī)810所述的任何或全部元件。圖8所示的邏輯連接包括諸如局域網(wǎng)(LAN) 或廣域網(wǎng)(WAN)之類的網(wǎng)絡(luò)872,但也可包括其他網(wǎng)絡(luò)/總線。這些聯(lián)網(wǎng)環(huán)境在家庭、辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。如上所述,盡管結(jié)合各種計(jì)算設(shè)備和網(wǎng)絡(luò)體系結(jié)構(gòu)描述了各示例性實(shí)施例,但基本概念可被應(yīng)用于其中期望改進(jìn)資源使用的效率的任何網(wǎng)絡(luò)系統(tǒng)和任何計(jì)算設(shè)備或系統(tǒng)。而且,存在實(shí)現(xiàn)相同或相似功能的多種方法,例如適當(dāng)?shù)腁PI、工具箱、驅(qū)動程序代碼、操作系統(tǒng)、控件、獨(dú)立或可下載軟件對象等,它們使得應(yīng)用和服務(wù)能夠使用此處提供的技術(shù)。由此,此處的各實(shí)施例從API (或其他軟件對象)的觀點(diǎn)以及從實(shí)現(xiàn)如此處描述的一個或多個實(shí)施例的軟件或硬件對象構(gòu)想。由此,此處所述的各實(shí)施例可具有完全采用硬件、 部分采用硬件并且部分采用軟件、以及采用軟件的方面。本文中所使用的詞語“示例性”意味著用作示例、實(shí)例、或說明。為避免疑惑,本文所公開的主題不限于這些示例。另外,在此所述的被描述為“示例性”的任意方面或設(shè)計(jì)并不一定要被解釋為相比其它方面或設(shè)計(jì)更優(yōu)選或有利。此外,在使用術(shù)語“包括”、“具有”、 “包含”和其他類似詞語的程度上,為避免疑惑,這些術(shù)語旨在當(dāng)用于權(quán)利要求中時以類似于術(shù)語“包括”作為開放的過渡詞的方式是包含性的而不排除任何附加或其他元素。如所述的,此處所述的各種技術(shù)可結(jié)合硬件或軟件或,在適當(dāng)時,以兩者的組合來實(shí)現(xiàn)。如此處所使用的,術(shù)語“組件”、“模塊”、“系統(tǒng)”等同樣旨在指計(jì)算機(jī)相關(guān)實(shí)體,或者是硬件、硬件和軟件的組合、軟件或者是執(zhí)行中的軟件。例如,組件可以是,但不限于,在處理器上運(yùn)行的進(jìn)程、處理器、對象、可執(zhí)行碼、執(zhí)行的線程、程序和/或計(jì)算機(jī)。作為說明,在計(jì)算機(jī)上運(yùn)行的應(yīng)用和計(jì)算機(jī)都可以是組件。一個或多個組件可駐留在進(jìn)程和/或執(zhí)行的線程內(nèi),并且組件可位于一個計(jì)算機(jī)上和/或分布在兩個或更多的計(jì)算機(jī)之間。如前所述的系統(tǒng)已經(jīng)參考若干組件之間的交互來描述??梢岳斫?,這些系統(tǒng)和組件可包括組件或指定的子組件、某些指定的組件或子組件和/或附加的組件,并且根據(jù)上述內(nèi)容的各種置換和組合。子組件還可作為通信地耦合到其他組件的組件來實(shí)現(xiàn),而不是被包括在父組件內(nèi)(層次性)。另外,應(yīng)注意到一個或多個組件可被組合成提供聚集功能的單個組件,或被分成若干單獨(dú)的子組件,且諸如管理層等任何一個或多個中間層可被設(shè)置成通信耦合到這樣的子組件以便提供集成功能。此處所述的任何組件也可與一個或多個此處未專門描述的但本領(lǐng)域技術(shù)人員一般已知的其他組件進(jìn)行交互。鑒于本文所述的示例性系統(tǒng),可根據(jù)參考各附圖的流程圖還可理解根據(jù)所述的主題來實(shí)現(xiàn)方法。盡管為了說明簡潔起見,作為一系列框示出和描述的方法,但是應(yīng)當(dāng)理解, 各實(shí)施例不僅僅限于框的次序,因?yàn)橐恍┛蚩梢耘c此處所描繪和描述的框不同的次序發(fā)生和/或與其他框并發(fā)地發(fā)生。盡管經(jīng)由流程圖示出了非順序或分支的流程,但可以理解,可實(shí)現(xiàn)達(dá)到相同或類似結(jié)果的各種其他分支、流程路徑和框的次序。此外,某些示出的框在實(shí)現(xiàn)下文所述的方法中是可選的。結(jié)論盡管本發(fā)明易于作出各種修改和替換構(gòu)造,但其某些說明性實(shí)施例在附圖中示出并在上面被詳細(xì)地描述。然而應(yīng)當(dāng)了解,這不旨在將本發(fā)明限于所公開的具體形式,而是相反地,旨在覆蓋落入本發(fā)明的精神和范圍之內(nèi)的所有修改、替換構(gòu)造和等效方案。除此處所述的各實(shí)施例以外,應(yīng)當(dāng)理解,可使用其他類似實(shí)施例,或者可對所述實(shí)施例作出修改和添加以便執(zhí)行對應(yīng)實(shí)施例的相同或等效功能而不背離這些實(shí)施例。此外, 多個處理芯片或多個設(shè)備可共享此處所述的一個或多個功能的性能,并且類似地,存儲可跨多個設(shè)備實(shí)現(xiàn)。因此,本發(fā)明不應(yīng)限于任何單個實(shí)施例,而是應(yīng)當(dāng)根據(jù)所附權(quán)利要求書的廣度、精神和范圍來解釋。
權(quán)利要求
1.一種在計(jì)算環(huán)境中的系統(tǒng),包括在輔助存儲設(shè)備(128)中維護(hù)的日志結(jié)構(gòu)的散列索引(126),其中所述日志結(jié)構(gòu)的散列索引的條目包括數(shù)據(jù)塊的散列值以及與每個散列值相關(guān)聯(lián)的元數(shù)據(jù),所述散列索引通過對所述日志結(jié)構(gòu)的散列索引追加新的條目來更新;以及散列索引服務(wù)(116),被配置成訪問所述日志結(jié)構(gòu)的散列索引以基于為塊(110)計(jì)算的散列值(114)來執(zhí)行查找,并且如果找到則返回與該散列值相關(guān)聯(lián)的元數(shù)據(jù),或者如果沒找到則返回未找到結(jié)果。
2.如權(quán)利要求I所述的系統(tǒng),其特征在于,所述散列索引通過在對所述日志結(jié)構(gòu)的散列索引進(jìn)行追加時使用條目頁來更新。
3.如權(quán)利要求I所述的系統(tǒng),其特征在于,所述散列索引服務(wù)被進(jìn)一步配置成訪問主存儲設(shè)備中的會話高速緩存以查找散列值,并且如果在所述會話高速緩存中找到則返回與該散列值相關(guān)聯(lián)的元數(shù)據(jù),以使得如果在會話高速緩存中找到則不需要訪問所述日志結(jié)構(gòu)的散列索引來查找所述元數(shù)據(jù)。
4.如權(quán)利要求I所述的系統(tǒng),其特征在于,還包括主存儲設(shè)備中的緊湊索引表,所述緊湊簽名表包括表示所述散列值的緊湊簽名、以及對于每一緊湊簽名的指向散列值的對應(yīng)位置的指針、輔助存儲上的日志中的元數(shù)據(jù)條目,其中所述散列索引服務(wù)被進(jìn)一步配置成訪問所述緊湊索引表以查找對應(yīng)于請求查找的散列值的緊湊簽名,并且如果在所述緊湊索引表中沒找到所述緊湊簽名則返回未找到結(jié)果,并且如果在所述緊湊索引表中找到了所述緊湊簽名則遵循所述指針在所述日志結(jié)構(gòu)的散列索引中尋找可能包含所請求的散列值的條目。
5.如權(quán)利要求I所述的系統(tǒng),其特征在于,還包括主存儲設(shè)備中的前瞻高速緩存,所述前瞻高速緩存包括從所述日志索引表中高速緩存的散列值和元數(shù)據(jù)條目,其中所述散列索引服務(wù)進(jìn)一步被設(shè)置為訪問所述前瞻高速緩存來查找散列值并且如果在所述前瞻高速緩存中找到所述散列值,則返回與所述散列值相關(guān)聯(lián)的所述元數(shù)據(jù),以使得如果在所述前瞻高速緩存中找到的話則不需要訪問所述日志結(jié)構(gòu)的散列索引來查找所述元數(shù)據(jù)。
6.一種計(jì)算環(huán)境中的至少部分地在至少一個處理器上執(zhí)行的方法,包括在輔助存儲設(shè)備(128)中維護(hù)散列索引(126),其中所述散列索引的條目包括散列值, 每一散列值從去重復(fù)的數(shù)據(jù)塊計(jì)算出并且與元數(shù)據(jù)相關(guān)聯(lián),由此可定位所述去重復(fù)的數(shù)據(jù)塊;在主存儲設(shè)備(124)中維護(hù)緊湊索引表(122),所述緊湊索引表包括表示所述散列索引中的散列值的緊湊簽名,以及對于每一緊湊簽名的指向所述散列索引中對應(yīng)的散列值的位置的指針。將每一散列值映射至所述緊湊索引表(122)中多達(dá)兩個或更多個條目,其中每一條目包含唯一的簽名;以及訪問(510)所述緊湊索引表以查找對應(yīng)于一請求中提供的所請求的散列值的緊湊簽名,并且如果在所述緊湊索引表中沒有找到所述緊湊簽名,則響應(yīng)于所述請求返回未找到結(jié)果,或者如果在所述緊湊索引表中找到所述緊湊簽名,則遵循一個或多個指針來確定所述散列索引中的條目是否包含所請求的散列值。
7.如權(quán)利要求6所述的方法,其特征在于,還包括通過使用避免散列沖突的基于cuckoo散列的算法,將緊湊簽名插入至所述緊湊索引表。
8.如權(quán)利要求7所述的方法,其特征在于,還包括在所述緊湊索引表的全部條目都被占據(jù)時,或者在已經(jīng)嘗試了足夠數(shù)量的cuckoo重新定位時,或者兩者都發(fā)生時,將至少一個緊湊簽名寫入至溢出表而非將所述緊湊簽名插入至所述緊湊索引表中。
9.一個或多個具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令在被執(zhí)行時執(zhí)行以下步驟,包括在輔助存儲設(shè)備(128)中維護(hù)散列索引(126),其中所述散列索引的條目包括散列值, 每一散列值從去重復(fù)的數(shù)據(jù)塊計(jì)算出并且與元數(shù)據(jù)相關(guān)聯(lián),由此可定位所述去重復(fù)的數(shù)據(jù)塊;在主存儲設(shè)備(124)中維護(hù)前瞻高速緩存(120),所述前瞻高速緩存包括從所述索引表高速緩存的散列值和元數(shù)據(jù)條目;以及訪問(506)所述前瞻高速緩存以查找一請求中提供的所請求的散列值,并且如果所請求的散列值在所述前瞻高速緩存中被找到,則響應(yīng)于所述請求返回元數(shù)據(jù)。
10.如權(quán)利要求9所述的一個或多個計(jì)算機(jī)可讀介質(zhì),其特征在于,具有進(jìn)一步的計(jì)算機(jī)可執(zhí)行指令,包括如果在所述前瞻高速緩存中未找到所請求的散列值,則訪問所述散列索引以查找所請求的散列值,并且如果所述散列索引包含所請求的散列值,則使用所請求的散列值的鄰居條目來加載所述前瞻高速緩存。
全文摘要
本發(fā)明公開了用于數(shù)據(jù)去重復(fù)的快速且低RAM占用的索引。本發(fā)明涉及數(shù)據(jù)去重復(fù)技術(shù),其中散列索引服務(wù)的索引在諸如硬盤驅(qū)動器之類的輔助存儲設(shè)備中維護(hù)散列索引,以及在RAM中維護(hù)用于在去重復(fù)操作期間減少訪問輔助存儲設(shè)備的I/O的緊湊索引表和前瞻高速緩存。還描述了用于在去重復(fù)會話期間維護(hù)數(shù)據(jù)的會話高速緩存,以及出于效率考慮對只讀緊湊索引表進(jìn)行的編碼。
文檔編號G06F17/30GK102591947SQ20111044528
公開日2012年7月18日 申請日期2011年12月27日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者B·德布納斯, J·李, P·A·奧爾泰安, R·N·德塞, S·森古普塔 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1