本公開內(nèi)容涉及數(shù)據(jù)存儲、取回和通信。更具體來說,本公開內(nèi)容涉及使用內(nèi)容關(guān)聯(lián)濾篩(content-associativesieve)的數(shù)據(jù)的無損簡化。
背景技術(shù):
當(dāng)今的信息時代以巨量數(shù)據(jù)的產(chǎn)生、捕獲和分析為標(biāo)志。新的數(shù)據(jù)從多樣的來源產(chǎn)生,這方面的實例包括購買交易記錄、企業(yè)及政府記錄和通信、電子郵件、社交媒體發(fā)帖、數(shù)字圖片和視頻、機器日志、來自嵌入式設(shè)備的信號、數(shù)字傳感器、蜂窩電話全球定位衛(wèi)星、航天衛(wèi)星、科學(xué)計算以及大挑戰(zhàn)科學(xué)。數(shù)據(jù)以多樣的格式生成,其中得許多數(shù)據(jù)是無結(jié)構(gòu)的,并且不適合輸入到傳統(tǒng)的數(shù)據(jù)庫中。企業(yè)、政府和個人以前所未有的速度生成數(shù)據(jù),并且在存儲、分析和傳送該數(shù)據(jù)方面遇到困難。為了保存累積的數(shù)據(jù),每年在購買存儲系統(tǒng)方面要花費數(shù)百億美元。在用以處理數(shù)據(jù)的計算機系統(tǒng)上也要花費類似地巨大金額。
在最現(xiàn)代的計算機和存儲系統(tǒng)中,在被組織成存儲分級結(jié)構(gòu)的多層存儲上容納和部署數(shù)據(jù)。需要被經(jīng)常并且快速地存取的數(shù)據(jù)被放置在最快速但是也最昂貴的層級,大多數(shù)數(shù)據(jù)(包括用于備份的拷貝)則優(yōu)選地被存儲在最密集并且最便宜的存儲介質(zhì)中。最快速并且最昂貴的數(shù)據(jù)存儲層級是計算機系統(tǒng)的非易失性隨機存取存儲器或ram,其駐留在緊鄰微處理器核心的位置并且為隨機數(shù)據(jù)存取給出最低等待時間和最高帶寬。逐漸地更密集并且更便宜但是也更慢的各層(其對于隨機存取具有逐漸地更高的等待時間和更低的帶寬)包括非易失性固態(tài)存儲器或閃存存儲裝置、硬盤驅(qū)動器(hdd)并且最后是磁帶驅(qū)動器。
為了更加有效地存儲和處理不斷增加的數(shù)據(jù),計算機行業(yè)持續(xù)對數(shù)據(jù)存儲介質(zhì)的密度和速度以及對計算機的處理能力作出改進(jìn)。但是數(shù)據(jù)量的增加速度遠(yuǎn)遠(yuǎn)超出計算和數(shù)據(jù)存儲系統(tǒng)的容量和密度的改進(jìn)。來自2014年的數(shù)據(jù)存儲行業(yè)的統(tǒng)計數(shù)據(jù)表明,在過去的幾年里所產(chǎn)生并捕獲的新數(shù)據(jù)構(gòu)成全世界至今所捕獲的數(shù)據(jù)的一大部分。全世界至今為止所產(chǎn)生的數(shù)據(jù)的數(shù)量估計超出多個澤字節(jié)(一個澤字節(jié)是1021個字節(jié))。數(shù)據(jù)的大量增加對于必須可靠地存儲、處理和傳送該數(shù)據(jù)的數(shù)據(jù)存儲、計算和通信系統(tǒng)提出了高要求。這就促使更多地使用無損數(shù)據(jù)簡化或壓縮技術(shù)來緊縮(compact)數(shù)據(jù),從而能夠以更低的成本來存儲并且同樣高效地處理和傳送數(shù)據(jù)。
已經(jīng)出現(xiàn)了多種無損數(shù)據(jù)簡化(reduction)或壓縮技術(shù),并且近年來發(fā)生了演進(jìn)。這些技術(shù)對數(shù)據(jù)進(jìn)行檢查以尋找數(shù)據(jù)中的某種形式的冗余,并且利用該冗余在沒有任何信息損失的情況下實現(xiàn)數(shù)據(jù)足跡(datafootprint)的簡化。對于期望利用數(shù)據(jù)中的特定形式的冗余的給定技術(shù),所實現(xiàn)的數(shù)據(jù)簡化的程度取決于在數(shù)據(jù)中找到該特定形式的冗余的頻度。所希望的是數(shù)據(jù)簡化技術(shù)能夠靈活地發(fā)現(xiàn)并且利用數(shù)據(jù)中的任何可用的冗余。由于數(shù)據(jù)源自多種來源和環(huán)境并且具有多種格式,因此對于用以應(yīng)對這一多樣數(shù)據(jù)的通用無損數(shù)據(jù)簡化技術(shù)的開發(fā)和采用的興趣很大。除了字母表之外通用數(shù)據(jù)簡化技術(shù)不需要關(guān)于輸入數(shù)據(jù)的先驗知識;因此通用數(shù)據(jù)簡化技術(shù)一般可以被應(yīng)用于任何和所有數(shù)據(jù),而不需要事先知道數(shù)據(jù)的結(jié)構(gòu)和統(tǒng)計分布特性。
可以被用來比較數(shù)據(jù)壓縮技術(shù)的不同實現(xiàn)方式的優(yōu)度(goodness)量度包括在目標(biāo)數(shù)據(jù)集上實現(xiàn)的數(shù)據(jù)簡化的程度,實現(xiàn)壓縮或簡化的效率,以及解壓縮并取回數(shù)據(jù)以供未來使用的效率。效率量度評估解決方案的性能和成本有效性。性能量度包括新數(shù)據(jù)可以被消耗并簡化的吞吐量或攝取速率,對輸入數(shù)據(jù)進(jìn)行簡化所需要的等待時間或時間,數(shù)據(jù)可以被解壓縮并取回的吞吐量或速率,以及解壓縮并取回數(shù)據(jù)所需要的等待時間或時間。成本量度包括任何所需的專用硬件組件的成本,比如微處理器核心或微處理器利用(中央處理單元利用),專用暫時存儲器的數(shù)量和存儲器帶寬,以及對于保存數(shù)據(jù)的各個存儲層級所需要的存取次數(shù)和帶寬。應(yīng)當(dāng)提到的是,在簡化數(shù)據(jù)足跡的同時提供高效且快速的壓縮以及解壓縮和取回不僅具有降低存儲和傳送數(shù)據(jù)的總體成本的好處,而且還具有高效地允許對于數(shù)據(jù)的后續(xù)處理的好處。
當(dāng)前在業(yè)內(nèi)所使用的許多通用數(shù)據(jù)壓縮技術(shù)是從在1977年由abrahamlempel和jacobziv開發(fā)的lempel-ziv壓縮方法導(dǎo)出的,例如參見jacobziv和abrahamlempel的“auniversalalgorithmforsequentialdatacompression(用于順序數(shù)據(jù)壓縮的通用算法)”,ieeetransactionsoninformationtheory,vol.it-23,no.3,1977年5月。這種方法成為允許通過因特網(wǎng)的高效數(shù)據(jù)傳輸?shù)幕A(chǔ)。lempel-ziv方法(也就是lz77、lz78及其變體)通過用引用替換串的重復(fù)出現(xiàn)而簡化數(shù)據(jù)足跡,其中所述引用是針對在順序呈現(xiàn)的輸入數(shù)據(jù)流的滑動窗口內(nèi)所見到的所述串的先前的出現(xiàn)。在消耗來自輸入數(shù)據(jù)流的給定數(shù)據(jù)塊的新鮮串時,這些技術(shù)搜索過先前在直到窗口長度的當(dāng)前和先前塊內(nèi)所見到的所有串。如果所述新鮮串是重復(fù),則用對原始串的后向引用將其替換。如果通過重復(fù)串所消除的字節(jié)數(shù)目大于后向引用所需的字節(jié)數(shù)目,則實現(xiàn)了數(shù)據(jù)的簡化。為了搜索過在窗口中所見到的所有串,并且為了提供最大串匹配,這些技術(shù)的實現(xiàn)方式采用多種方案,其中包括迭代掃描以及建立包含在窗口中見到的所有串的字典的臨時簿記結(jié)構(gòu)。在消耗新的輸入字節(jié)以組裝新鮮串時,這些技術(shù)或者掃描過現(xiàn)有窗口中的所有字節(jié),或者對串的字典進(jìn)行引用(隨后是一些計算)以便判定是否找到重復(fù)并且用后向引用將其替換(或者判定是否需要對字典進(jìn)行添加)。
lempel-ziv壓縮方法常常伴隨有應(yīng)用于數(shù)據(jù)的第二優(yōu)化,其中基于其在正被壓縮的數(shù)據(jù)塊中的出現(xiàn)頻率或概率對源符號進(jìn)行動態(tài)重編碼,所述動態(tài)重編碼常常采用可變寬度編碼方案從而對于頻率更高的符號使用長度更短的代碼,從而導(dǎo)致數(shù)據(jù)的簡化。例如參見davida.huffman的“amethodfortheconstructionofminimum-redundancycodes(用于構(gòu)造最小冗余代碼的方法)”,proceedingsoftheire–instituteofradioengineers,1952年9月,pp.1098-1101。這種技術(shù)被稱作huffman重編碼,并且通常需要第一遍經(jīng)過數(shù)據(jù)以計算頻率以及第二遍經(jīng)過數(shù)據(jù)以實際編碼數(shù)據(jù)。圍繞這一主題的幾種變型也在使用之中。
使用這些技術(shù)的一個實例是一種被稱作“deflate”的方案,該方案將lempel-zivlz77壓縮方法與huffman重編碼相組合。deflate提供了壓縮流數(shù)據(jù)格式規(guī)范,所述規(guī)范規(guī)定一種用于把字節(jié)序列表示成(通常更短的)比特序列的方法,以及一種用于把所述比特序列打包成字節(jié)的方法。deflate方案最初由pkware,inc.的phillipw.katz設(shè)計用于pkzip歸檔實用程序。例如參見phillipw.katz的標(biāo)題為“stringsearcher,andcompressorusingsame(串搜索器以及使用串搜索器的壓縮器)”的美國專利5,051,745,1991年9月24日。美國專利5,051,745描述了一種用于針對預(yù)定目標(biāo)串(輸入串)搜索符號矢量(窗口)的方法。所述解決方案采用具有針對窗口中的每一個符號的指針的指針陣列,并且使用一種散列方法對窗口中的可能位置進(jìn)行過濾,其中需要在所述可能位置處搜索輸入串的完全相同的拷貝。隨后是在這些位置處進(jìn)行掃描和串匹配。
deflate方案被實施在用于數(shù)據(jù)壓縮的zlib庫中。zlib是作為例如linux、macosx、ios之類的幾種軟件平臺以及多種游戲機的關(guān)鍵組件的軟件庫。zlib庫提供deflate壓縮和解壓縮代碼以供zip(文件歸檔)、gzip(單文件壓縮)、png(用于無損壓縮圖像的便攜式網(wǎng)絡(luò)圖形格式)以及許多其他應(yīng)用來使用。zlib現(xiàn)在被廣泛用于數(shù)據(jù)傳輸和存儲。服務(wù)器和瀏覽器的大多數(shù)http事務(wù)使用zlib來壓縮和解壓縮數(shù)據(jù)。類似的實現(xiàn)方式正越來越多地被數(shù)據(jù)存儲系統(tǒng)使用。
由intelcorp.在2014年4月公布的一篇標(biāo)題為“highperformancezlibcompressionon
現(xiàn)有的數(shù)據(jù)壓縮方案通常使用當(dāng)代微處理器上的單一處理器核心操作在從10mb/秒到200mb/秒的攝取速率下。為了進(jìn)一步提升攝取速率,采用多個核心,或者減小窗口大小。使用定制硬件加速器會實現(xiàn)攝取速率的進(jìn)一步改進(jìn),但是成本會增加。
前面所描述的現(xiàn)有數(shù)據(jù)壓縮方法在通常具有單一消息或文件或者幾個文件的大小的本地窗口中能夠有效地利用較短的串和符號等級的細(xì)粒度冗余。但是當(dāng)在操作于較大或極大的數(shù)據(jù)集上并且需要高數(shù)據(jù)攝取和數(shù)據(jù)取回速率的應(yīng)用中使用這些方法時則存在嚴(yán)重的限制和缺陷。
一個重要的限制是這些方法的實用實現(xiàn)方式只能在本地窗口內(nèi)高效地利用冗余。雖然這些實現(xiàn)方式可以接受任意長的輸入數(shù)據(jù)流,但是效率決定在將于其中發(fā)現(xiàn)細(xì)粒度冗余的窗口的大小方面存在限制。這些方法是高度計算密集型的,并且需要對于窗口中的所有數(shù)據(jù)的頻繁和快速的存取。在消耗產(chǎn)生新鮮輸入串的輸入數(shù)據(jù)的每一個新鮮字節(jié)(或幾個字節(jié))時觸發(fā)各種簿記結(jié)構(gòu)的串匹配和查找。為了達(dá)到所期望的攝取速率,用于串匹配的窗口和相關(guān)聯(lián)的機器必須主要駐留在處理器高速緩存子系統(tǒng)中,從而在實踐中對窗口大小構(gòu)成約束。
例如為了在單一處理器核心上達(dá)到200mb/秒的攝取速率,每個所攝取字節(jié)的平均可用時間預(yù)算(包括所有數(shù)據(jù)存取和計算)是5ns,這在使用具有3.4ghz操作頻率的當(dāng)代處理器的情況下意味著17個時鐘。這一預(yù)算容許對于芯片上高速緩存的存取(花費少量循環(huán))以及隨后的一些串匹配。當(dāng)前的處理器具有幾兆字節(jié)容量的芯片上高速緩存。對于主存儲器的存取花費超出200個循環(huán)(~70ns),因此主要駐留在存儲器中的更大窗口將使得攝取速率進(jìn)一步變慢。此外,隨著窗口大小增大以及去到重復(fù)串的距離增大,規(guī)定后向引用的長度的成本也增加,從而只能致使在更大的范圍內(nèi)搜索更長的串的重復(fù)。
在大多數(shù)當(dāng)代數(shù)據(jù)存儲系統(tǒng)上,存儲在存儲分級結(jié)構(gòu)的各個層級上的數(shù)據(jù)的足跡比系統(tǒng)中的存儲器容量大幾個數(shù)量級。舉例來說,雖然系統(tǒng)可以提供數(shù)百吉字節(jié)的存儲器,但是駐留在閃存存儲裝置中的活躍數(shù)據(jù)的數(shù)據(jù)足跡可以是數(shù)十太字節(jié),并且存儲系統(tǒng)中的總數(shù)據(jù)可以處于數(shù)百太字節(jié)到多個拍字節(jié)的范圍。此外,對于每一個相繼層級,對于后續(xù)存儲層級的可實現(xiàn)的數(shù)據(jù)存取吞吐量下降一個數(shù)量級或更多。當(dāng)滑動窗口變大到無法容納在存儲器中時,這些技術(shù)受到對于接下來的數(shù)據(jù)存儲等級的隨機io(輸入或輸出操作)存取的顯著更低的帶寬和更高等待時間的節(jié)制。
例如考慮具有4千字節(jié)的傳入數(shù)據(jù)的一個文件或頁面,所述文件或頁面可以通過對已經(jīng)存在于數(shù)據(jù)中并且分散在256太字節(jié)足跡上的例如100個平均長度為40字節(jié)的串進(jìn)行引用而從現(xiàn)有數(shù)據(jù)組裝。每一項引用將花費6個字節(jié)來規(guī)定其地址以及用于串長度的1個字節(jié),同時有望節(jié)省40個字節(jié)。雖然在本例中描述的頁面可以被壓縮多于五倍,但是對應(yīng)于該頁面的攝取速率將受到獲取并驗證100個重復(fù)串所需的對于存儲系統(tǒng)的100次或更多次io存取的限制(即使可以完美地以低成本預(yù)測這些串駐留在何處)。在用盡存儲系統(tǒng)的所有帶寬的情況下,給出250000次隨機io存取/秒(這意味著對于4kb頁面的1gb/秒的隨機存取帶寬)的存儲系統(tǒng)只能以10mb/秒的攝取速率每秒壓縮2500個這樣的4kb大小的頁面,從而使其不可用作存儲系統(tǒng)。
具有太字節(jié)或拍字節(jié)量級的大窗口大小的傳統(tǒng)壓縮方法的實現(xiàn)方式將受到對存儲系統(tǒng)的減小的數(shù)據(jù)存取帶寬的困擾,并且將是不可接受地緩慢。因此,這些技術(shù)的實用實現(xiàn)方式只有在能夠容納于處理器高速緩存或系統(tǒng)存儲器中的窗口大小上本地存在冗余的情況下才能高效地發(fā)現(xiàn)和利用所述冗余。如果冗余數(shù)據(jù)在空間上或時間上與傳入數(shù)據(jù)分開多個太字節(jié)、拍字節(jié)或艾字節(jié),這些實現(xiàn)方式由于受到存儲存取帶寬的限制將無法以可接受的速度發(fā)現(xiàn)冗余。
傳統(tǒng)方法的另一個限制在于其不合適于隨機數(shù)據(jù)存取。跨越被壓縮的整個窗口的各個數(shù)據(jù)塊需要在能夠?qū)θ魏螇K內(nèi)的任何組塊進(jìn)行存取之前被解壓縮。這就對窗口的大小構(gòu)成了實用限制。此外,傳統(tǒng)上在未壓縮數(shù)據(jù)上實施的操作(例如搜索操作)無法高效地在已壓縮數(shù)據(jù)上實施。
傳統(tǒng)方法(特別是基于lempel-ziv的方法)的另一個限制在于其僅僅沿著一個維度搜索冗余——也就是用后向引用替換完全相同的串。huffman重編碼方案的限制在于其需要經(jīng)過數(shù)據(jù)兩遍以便計算頻率并且隨后進(jìn)行重編碼。這樣在更大的塊上就變得較慢。
在全局?jǐn)?shù)據(jù)存儲庫上檢測長重復(fù)串的數(shù)據(jù)壓縮方法使用數(shù)字指紋處理與散列方案的組合。這種壓縮處理被稱作數(shù)據(jù)去重復(fù)(deduplication)。最基本的數(shù)據(jù)去重復(fù)技術(shù)把文件分解成固定大小塊,并且在數(shù)據(jù)儲存庫中尋找重復(fù)塊。如果創(chuàng)建了文件的拷貝,則第一文件中的每一個塊將在第二文件中具有重復(fù),并且可以用針對原始塊的引用替換所述重復(fù)。為了加快潛在地重復(fù)塊的匹配,采用一種散列方法。散列函數(shù)是把一個串轉(zhuǎn)換成被稱作其散列值的數(shù)字值的函數(shù)。如果兩個串相等,其散列值也相等。散列函數(shù)把多個串映射到給定的散列值,從而可以把長串簡化成長度短得多的散列值。散列值的匹配將比兩個長串的匹配快得多;因此首先進(jìn)行散列值的匹配以便過濾掉可能是重復(fù)的可能串。如果輸入串或塊的散列值匹配存在于儲存庫中的串或塊的散列值,隨后則可以把輸入串與儲存庫中的具有相同散列值的每一個串進(jìn)行比較以便證實重復(fù)的存在。
把文件分解成固定大小塊是簡單且方便的,并且固定大小塊在高性能存儲系統(tǒng)中是高度期望的。但是這種技術(shù)在其所能夠發(fā)現(xiàn)的冗余的數(shù)量方面存在限制,這意味著這些技術(shù)的壓縮等級較低。舉例來說,如果對第一文件進(jìn)行拷貝以創(chuàng)建第二文件,并且即使如果只把單一字節(jié)的數(shù)據(jù)插入到第二文件中,則所有下游塊的對準(zhǔn)都將改變,每一個新塊的散列值將被重新計算,并且所述數(shù)據(jù)去重復(fù)方法將不再能找到所有重復(fù)。
為了解決數(shù)據(jù)去重復(fù)方法中的這一限制,行業(yè)內(nèi)采用了使用指紋處理在匹配內(nèi)容的位置處同步和對準(zhǔn)數(shù)據(jù)流。后面的這種方案導(dǎo)致基于指紋的可變大小塊。michaelrabin展示出如何能夠使用隨機選擇的不可約多項式對比特串進(jìn)行指紋處理,例如參見michaelo.rabin的“fingerprintingbyrandompolynomials(通過隨機多項式進(jìn)行指紋處理)”,centerforresearchincomputingtechnology,harvarduniversity,tr-15-81,1981年。在這種方案中,隨機選擇的素數(shù)p被用來對長字符串進(jìn)行指紋處理,這是通過計算被視為大整數(shù)對p取模的該串的余數(shù)。這種方案需要在k比特整數(shù)上實施整數(shù)運算,其中k=log2(p)?;蛘呖梢允褂胟次隨機不可約多項式,指紋則是數(shù)據(jù)的多項式表示對素多項式取模。
這種指紋處理方法被使用在數(shù)據(jù)去重復(fù)系統(tǒng)中以便識別將在該處建立組塊邊界的適當(dāng)位置,從而使得系統(tǒng)可以在全局儲存庫中尋找這些組塊的重復(fù)。可以在找到特定值的指紋時設(shè)定組塊邊界。作為這種用法的一個實例,通過采用32次或更低次多項式,可以對于輸入數(shù)據(jù)中的每一個48字節(jié)串計算指紋(在輸入的第一字節(jié)處開始,并且在隨后的每一個相繼字節(jié)處進(jìn)行)。隨后可以檢查32比特指紋的13個低位比特,并且每當(dāng)這13個比特的值是預(yù)先規(guī)定的值(例如值1)時則設(shè)定斷點。對于隨機數(shù)據(jù),所述13個比特具有該特定值的概率將是213分之1,因此對于每8kb可能會遇到近似一個這樣的斷點,從而導(dǎo)致平均大小為8kb的可變大小組塊。所述斷點或組塊邊界將會有效地對準(zhǔn)到取決于數(shù)據(jù)內(nèi)容的指紋。當(dāng)很久沒有找到指紋時,可以在某一預(yù)先規(guī)定的閾值處強制斷點,從而使得系統(tǒng)確保為儲存庫創(chuàng)建短于預(yù)先規(guī)定的大小的組塊。例如參見athichamuthitacharoen、benjiechen和davidmazières的“alow-bandwidthnetworkfilesystem(低帶寬網(wǎng)絡(luò)文件系統(tǒng))”,sosp‘01,proceedingsoftheeighteenthacmsymposiumonoperatingsystemsprinciples,10/21/2001,pp.174-187。
由michaelrabin和richardkarp開發(fā)的rabin-karp串匹配技術(shù)提供了對于指紋處理和串匹配的效率的進(jìn)一步改進(jìn)(例如參見michaelo.rabin和r.karp的“efficientrandomizedpattern-matchingalgorithms(高效的隨機化模式匹配算法)”,ibmjour.ofres.anddev.,vol.31,1987年,pp.249-260)。應(yīng)當(dāng)提到的是,檢查m字節(jié)子串的指紋的指紋處理方法可以在o(m)的時間內(nèi)評估指紋處理多項式函數(shù)。由于這種方法將需要被應(yīng)用在開始于例如n字節(jié)輸入流的每一個字節(jié)的子串上,因此在整個數(shù)據(jù)流上實施指紋處理所需的總工作量將是o(n×m)。rabin-karp識別出被稱作滾動散列(rollinghash)的散列函數(shù),在所述滾動散列上,通過獨立于子串的長度僅僅進(jìn)行恒定次數(shù)的運算,有可能從前一個子串計算下一個子串的散列值。因此,在向右移位一個字節(jié)之后,可以在新的m字節(jié)串上遞增進(jìn)行指紋計算。這樣就把用以計算指紋的工作量減少到o(1),并且把用于對整個數(shù)據(jù)流進(jìn)行指紋處理的總工作量減少到o(n),從而與數(shù)據(jù)的大小成線性。這樣就大大加快了指紋的計算和識別。
對于前面描述的數(shù)據(jù)去重復(fù)方法的典型的數(shù)據(jù)存取和計算要求可以被如下描述。對于給定的輸入,一旦完成指紋處理從而創(chuàng)建組塊,并且在計算出用于該組塊的散列值之后,這些方法首先需要針對存儲器和后續(xù)存儲層級的一個存取集合,以便搜索并且查找保持儲存庫中的所有組塊的散列值的全局散列表。這通常將需要針對存儲的第一io存取。在散列表中找到匹配之后是第二存儲io集合(取決于在儲存庫中存在多少具有相同散列值的組塊,這通常是一次但是也可以多于一次),以便獲取具有相同散列值的實際數(shù)據(jù)組塊。最后實施逐字節(jié)匹配以便把輸入組塊與所獲取的潛在匹配組塊進(jìn)行比較,從而確認(rèn)并且識別重復(fù)。隨后是用對原始塊的引用替換新的重復(fù)塊的第三存儲io存取(針對元數(shù)據(jù)空間)。如果在全局散列表中沒有匹配(或者如果沒有找到復(fù)制),系統(tǒng)需要一次io以把新的塊輸入到儲存庫中,并且需要另一次io來更新全局散列表以便輸入新的散列值。因此,對于較大的數(shù)據(jù)集(其中元數(shù)據(jù)和全局散列表無法容納在存儲器中,因此需要存儲io對其進(jìn)行存取),這樣的系統(tǒng)對于每個輸入組塊可能需要平均三次io。通過采用多種過濾器可能實現(xiàn)進(jìn)一步的改進(jìn),從而常??梢栽跓o需用以對全局散列表進(jìn)行存取的第一存儲io的情況下檢測到全局散列表中的缺失,從而把對其中一些組塊進(jìn)行處理所需的io次數(shù)減少到兩次。
給出250000次隨機io存取/秒(這意味著對于4kb頁面的1gb/秒的隨機存取帶寬)的存儲系統(tǒng)每秒可以攝取大約83333(250000除以每個輸入組塊3次io)個平均大小為4kb的輸入組塊并且對其進(jìn)行去重復(fù),從而在用盡存儲系統(tǒng)的所有帶寬的情況下允許333mb/秒的攝取速率。如果僅使用存儲系統(tǒng)的一半帶寬(從而使得另一半可用于對所存儲的數(shù)據(jù)進(jìn)行存取),這樣的去重復(fù)系統(tǒng)仍然可以給出166mb/秒的攝取速率。如果在系統(tǒng)中有足夠的處理能力可用,則(受到i/o帶寬限制的)這些攝取速率是可以實現(xiàn)的。因此,在給定足夠處理能力的情況下,數(shù)據(jù)去重復(fù)系統(tǒng)能夠以經(jīng)濟的io在全局?jǐn)?shù)據(jù)范圍內(nèi)找到較大的數(shù)據(jù)重復(fù),并且在當(dāng)代存儲系統(tǒng)上以每秒數(shù)百兆字節(jié)的攝取速率給出數(shù)據(jù)簡化。
基于前面的描述應(yīng)當(dāng)清楚的是,雖然這些去重復(fù)方法在全局范圍內(nèi)找到長串的重復(fù)方面是有效的,但是其主要在找到大的重復(fù)方面是有效的。如果數(shù)據(jù)在更細(xì)的粒度上存在變化或修改,則使用這種方法將不會找到可用的冗余。這大大減小了這些方法對其有效的數(shù)據(jù)集的廣度。這些方法已被使用在特定的數(shù)據(jù)存儲系統(tǒng)和應(yīng)用中,例如對于數(shù)據(jù)的定期備份,其中正被備份的新數(shù)據(jù)只有幾個文件被修改,其余部分都是已被保存在先前的備份中的文件的重復(fù)。同樣地,基于數(shù)據(jù)去重復(fù)的系統(tǒng)常常被部署在其中產(chǎn)生數(shù)據(jù)或代碼的多份精確拷貝的環(huán)境中,比如數(shù)據(jù)中心中的虛擬化環(huán)境。但是隨著數(shù)據(jù)演進(jìn)并且更加一般地或者在更細(xì)的粒度上被修改,基于數(shù)據(jù)去重復(fù)的技術(shù)則失去其有效性。
一些方法(其通常被采用在數(shù)據(jù)備份應(yīng)用中)不實施輸入數(shù)據(jù)與其散列值匹配輸入的串之間的實際的逐字節(jié)比較。這樣的解決方案依賴于使用例如sha-1之類的強散列函數(shù)的低沖突概率。但是由于沖突(其中多個不同的串可以映射到相同的散列值)的有限非零概率,這樣的方法不能被視為提供無損數(shù)據(jù)簡化,因此將不滿足主存儲和通信的高數(shù)據(jù)完整性要求。
一些方法組合多種現(xiàn)有的數(shù)據(jù)壓縮技術(shù)。在這樣的設(shè)置中,通常首先對數(shù)據(jù)應(yīng)用全局?jǐn)?shù)據(jù)去重復(fù)方法。隨后在經(jīng)過去重復(fù)的數(shù)據(jù)集上并且采用小窗口,應(yīng)用與huffman重編碼相組合的lempel-ziv串壓縮方法以實現(xiàn)進(jìn)一步的數(shù)據(jù)簡化。
但是盡管采用了所有至此已知的技術(shù),在不斷增長和累積的數(shù)據(jù)的需求與世界經(jīng)濟使用最佳可用現(xiàn)代存儲系統(tǒng)所能可負(fù)擔(dān)地適應(yīng)的情況之間仍然存在幾個數(shù)量級的差距。在給定不斷增長的數(shù)據(jù)所需要的非常高的存儲容量需求的情況下,仍然需要進(jìn)一步簡化數(shù)據(jù)足跡的改進(jìn)的方式。仍然需要開發(fā)解決現(xiàn)有技術(shù)的限制或者沿著尚未被現(xiàn)有技術(shù)解決的維度利用數(shù)據(jù)中的可用冗余的方法。與此同時,能夠以可接受的速度并且以可接受的處理成本高效地存取和取回數(shù)據(jù)仍然非常重要。
總而言之,長期以來一直需要能夠利用較大和極大的數(shù)據(jù)集中的冗余并且提供高數(shù)據(jù)攝取和數(shù)據(jù)取回速率的無損數(shù)據(jù)減損解決方案。
技術(shù)實現(xiàn)要素:
這里所描述的實施例涉及可以在較大和極大的數(shù)據(jù)集上實施無損數(shù)據(jù)簡化并且同時提供高數(shù)據(jù)攝取和數(shù)據(jù)取回速率的技術(shù)和系統(tǒng),并且不受困于現(xiàn)有數(shù)據(jù)壓縮系統(tǒng)的缺點和限制。
具體來說,一些實施例可以基于數(shù)據(jù)組塊識別一個或多個基本數(shù)據(jù)單元,其中所述識別包括使用數(shù)據(jù)組塊的內(nèi)容導(dǎo)航經(jīng)過基于基本數(shù)據(jù)單元的內(nèi)容組織基本數(shù)據(jù)單元的數(shù)據(jù)結(jié)構(gòu)。接下來,所述實施例可以基于數(shù)據(jù)組塊以及所識別出的一個或多個基本數(shù)據(jù)單元確定重建程序,從而可以通過對所述一個或多個基本數(shù)據(jù)單元應(yīng)用所述重建程序而重建數(shù)據(jù)組塊。所述實施例隨后可以生成數(shù)據(jù)組塊的無損簡化表示,其中所述無損簡化表示包括對所識別出的一個或多個基本數(shù)據(jù)單元當(dāng)中的每一個基本數(shù)據(jù)單元的引用以及對重建程序的描述。
附圖說明
圖1a示出了根據(jù)這里所描述的一些實施例的用于數(shù)據(jù)簡化的方法和裝置,其把輸入數(shù)據(jù)因式分解成各個單元并且從駐留在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元導(dǎo)出這些單元。
圖1b-1g示出了根據(jù)這里所描述的一些實施例的圖1a中所示的方法和裝置的各種變型。
圖1h給出了根據(jù)這里所描述的一些實施例的描述蒸餾數(shù)據(jù)(distilleddata)的結(jié)構(gòu)的格式和規(guī)范的一個實例。
圖1i到1p示出了對應(yīng)于圖1a到圖1g中示出的用于數(shù)據(jù)簡化的方法和裝置的各種變型的輸入數(shù)據(jù)到無損簡化形式的概念性變換。
圖2示出了根據(jù)這里所描述的一些實施例的通過把輸入數(shù)據(jù)因式分解成各個單元并且從駐留在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元導(dǎo)出這些單元而進(jìn)行數(shù)據(jù)簡化的處理。
圖3a、3b、3c、3d和3e示出了根據(jù)這里所描述的一些實施例的可以被用來基于其名稱對基本數(shù)據(jù)單元進(jìn)行組織的不同的數(shù)據(jù)組織系統(tǒng)。
圖3f給出了根據(jù)這里所描述的一些實施例的自描述樹節(jié)點數(shù)據(jù)結(jié)構(gòu)。
圖3g給出了根據(jù)這里所描述的一些實施例的自描述葉節(jié)點數(shù)據(jù)結(jié)構(gòu)。
圖3h給出了根據(jù)這里所描述的一些實施例的包括導(dǎo)航前瞻字段的自描述葉節(jié)點數(shù)據(jù)結(jié)構(gòu)。
圖4示出了根據(jù)這里所描述的一些實施例的如何可以把256tb的基本數(shù)據(jù)組織成樹形式的一個實例,并且呈現(xiàn)出如何可以把樹布置在存儲器和存儲裝置中。
圖5a-5c示出了關(guān)于如何可以使用這里所描述的實施例組織數(shù)據(jù)的一個實際的實例。
圖6a-6c分別示出了根據(jù)這里所描述的一些實施例的如何可以把樹數(shù)據(jù)結(jié)構(gòu)用于參照圖1a-1c描述的內(nèi)容關(guān)聯(lián)映射器。
圖7a提供了根據(jù)這里所描述的一些實施例的可以在重建程序中規(guī)定的變換的一個實例。
圖7b示出了根據(jù)這里所描述的一些實施例的從基本數(shù)據(jù)單元導(dǎo)出候選單元的結(jié)果的實例。
圖8a-8e示出了根據(jù)這里所描述的一些實施例的如何通過把輸入數(shù)據(jù)因式分解成固定大小單元并且把所述單元組織在參照圖3d和3e描述的樹數(shù)據(jù)結(jié)構(gòu)中而實施數(shù)據(jù)簡化。
圖9a-9c示出了根據(jù)這里所描述的一些實施例的基于圖1c中示出的系統(tǒng)的datadistillationtm(數(shù)據(jù)蒸餾)方案的一個實例。
圖10a提供了根據(jù)這里所描述的一些實施例的關(guān)于如何對基本數(shù)據(jù)單元應(yīng)用在重建程序中規(guī)定的變換以產(chǎn)生導(dǎo)出單元(derivativeelement)的一個實例。
圖10b-10c示出了根據(jù)這里所描述的一些實施例的數(shù)據(jù)取回處理。
圖11a-11g示出了根據(jù)這里所描述的一些實施例的包括datadistillationtm機制(可以利用軟件、硬件或者其組合來實施)的系統(tǒng)。
圖11h示出了根據(jù)這里所描述的一些實施例的datadistillationtm裝置如何可以與范例通用計算平臺進(jìn)行接口。
圖12a-12b示出了根據(jù)這里所描述的一些實施例的使用datadistillationtm裝置在受到帶寬約束的通信介質(zhì)上傳送數(shù)據(jù)。
圖12c-12k示出了根據(jù)這里所描述的一些實施例的由datadistillationtm裝置對于各種使用模型所產(chǎn)生的簡化數(shù)據(jù)的各個分量(或組成部分)。
具體實施方式
給出后面的描述是為了使得本領(lǐng)域技術(shù)人員能夠制作和使用本發(fā)明,并且是在特定應(yīng)用及其需求的情境中所提供的。本領(lǐng)域技術(shù)人員將很容易認(rèn)識到針對所公開的實施例的各種修改,并且這里所定義的一般原理可以被應(yīng)用于其他實施例和應(yīng)用而不會背離本發(fā)明的精神和范圍。因此,本發(fā)明不限于所示出的實施例,而是應(yīng)當(dāng)符合與這里所公開的原理和特征相一致的最寬泛的范圍。在本公開內(nèi)容中,當(dāng)某一短語對于一個實體集合使用術(shù)語“和/或”時,除非另行表明,否則所述短語涵蓋所述實體集合的所有可能組合。舉例來說,短語“x、y和/或z”涵蓋以下其中組合:“只有x”,“只有y”,“只有z”,“x和y,但是沒有z”,“x和z,但是沒有y”,“y和z,但是沒有x”,以及“x、y和z”。
使用內(nèi)容關(guān)聯(lián)濾篩的數(shù)據(jù)的高效無損簡化
在這里所描述的一些實施例中,數(shù)據(jù)被組織和存儲,以便在整個數(shù)據(jù)集的全局范圍內(nèi)高效地發(fā)現(xiàn)和利用冗余。輸入數(shù)據(jù)流被分解成被稱作單元的構(gòu)成片段或組塊,并且以比單元本身更細(xì)的粒度檢測和利用各個單元當(dāng)中的冗余,從而減縮所存儲的數(shù)據(jù)的總體足跡。識別出被稱作基本數(shù)據(jù)單元的一個單元集合并且將其用作數(shù)據(jù)集的共同的共享構(gòu)建塊,并且將其存儲在被稱作基本數(shù)據(jù)存儲庫或濾篩的結(jié)構(gòu)中。基本數(shù)據(jù)單元簡單地是具有特定大小的比特、字節(jié)或數(shù)位的序列。取決于實現(xiàn)方式,基本數(shù)據(jù)單元可以是固定大小或可變大小。輸入數(shù)據(jù)的其他構(gòu)成單元從基本數(shù)據(jù)單元導(dǎo)出,并且被稱作導(dǎo)出單元。因此,輸入數(shù)據(jù)被因式分解成基本數(shù)據(jù)單元和導(dǎo)出單元。
基本數(shù)據(jù)存儲庫對基本數(shù)據(jù)單元進(jìn)行排序和組織,從而使得可以按照內(nèi)容關(guān)聯(lián)方式對基本數(shù)據(jù)存儲庫進(jìn)行搜索和存取。在給定一些輸入內(nèi)容和一些限制的情況下可以對基本數(shù)據(jù)存儲庫進(jìn)行查詢以取回包含該內(nèi)容的基本數(shù)據(jù)單元。在給定輸入單元的情況下,可以使用所述單元的值或者所述單元中的特定字段的值對基本數(shù)據(jù)存儲庫進(jìn)行搜索,以便快速地提供一個基本數(shù)據(jù)單元或者較小的基本數(shù)據(jù)單元集合,從中可以導(dǎo)出輸入單元并且只利用規(guī)定所述導(dǎo)出所需的最小存儲。在一些實施例中,基本數(shù)據(jù)存儲庫中的單元被組織成樹形式。通過在基本數(shù)據(jù)單元上實施變換從基本數(shù)據(jù)單元導(dǎo)出導(dǎo)出單元,這樣的變換被規(guī)定在重建程序中,所述重建程序描述如何從一個或多個基本數(shù)據(jù)單元生成導(dǎo)出單元。距離閾值規(guī)定關(guān)于導(dǎo)出單元的所存儲足跡的大小的限制。該閾值有效地規(guī)定導(dǎo)出單元與基本數(shù)據(jù)單元的最大可允許距離,并且還對可以被用來生成導(dǎo)出單元的重建程序的大小作出限制。
導(dǎo)出數(shù)據(jù)的取回是通過在由所述導(dǎo)出規(guī)定的一個或多個基本數(shù)據(jù)單元上執(zhí)行重建程序而實現(xiàn)的。
在本公開內(nèi)容中,前面描述的通用無損數(shù)據(jù)簡化技術(shù)可以被稱作datadistillationtm處理。所述處理實施類似于化學(xué)中的蒸餾的功能——把混合物分離成其構(gòu)成單元?;緮?shù)據(jù)存儲庫也被稱作濾篩或datadistillationtm濾篩。
在這種方案中,輸入數(shù)據(jù)流被因式分解成一個單元序列,其中每一個單元是基本數(shù)據(jù)單元或者從一個或多個基本數(shù)據(jù)單元導(dǎo)出的導(dǎo)出單元。每一個單元被變換成無損簡化表示,所述無損簡化表示在基本數(shù)據(jù)單元的情況下包括對基本數(shù)據(jù)單元的引用,并且在導(dǎo)出單元的情況下包括對所述導(dǎo)出中所涉及的一個或多個基本數(shù)據(jù)單元的引用,以及關(guān)于重建程序的描述。因此,輸入數(shù)據(jù)流被因式分解成處于無損簡化表示中的單元序列。(出現(xiàn)在無損簡化表示中的)該單元序列被稱作蒸餾數(shù)據(jù)流或蒸餾數(shù)據(jù)。蒸餾數(shù)據(jù)中的單元序列與輸入數(shù)據(jù)中的單元序列具有一一對應(yīng)關(guān)系,也就是說蒸餾數(shù)據(jù)中的單元序列中的第n個單元對應(yīng)于輸入數(shù)據(jù)中的單元序列中的第n個單元。
在本公開內(nèi)容中描述的通用無損數(shù)據(jù)簡化技術(shù)接收輸入數(shù)據(jù)流并且將其轉(zhuǎn)換成蒸餾數(shù)據(jù)流與基本數(shù)據(jù)存儲庫的組合,從而使得蒸餾數(shù)據(jù)流和基本數(shù)據(jù)存儲庫的足跡的總和通常小于輸入數(shù)據(jù)流的足跡。在本公開內(nèi)容中,蒸餾數(shù)據(jù)流和基本數(shù)據(jù)存儲庫被統(tǒng)稱作無損簡化數(shù)據(jù),并且將被可互換地稱作“簡化數(shù)據(jù)流”或“簡化數(shù)據(jù)”或“reduceddata(簡化數(shù)據(jù))”。同樣地,對于通過本公開內(nèi)容中描述的無損數(shù)據(jù)簡化技術(shù)所產(chǎn)生的出現(xiàn)在無損簡化格式中的單元序列,可互換地使用以下術(shù)語:“簡化輸出數(shù)據(jù)流”、“簡化輸出數(shù)據(jù)”、“蒸餾數(shù)據(jù)流”、“蒸餾數(shù)據(jù)”以及“distilleddata(蒸餾數(shù)據(jù))”。
圖1a示出了根據(jù)這里所描述的一些實施例的用于數(shù)據(jù)簡化的方法和裝置,其把輸入數(shù)據(jù)因式分解成各個單元并且從駐留在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元導(dǎo)出這些單元。該圖示出了數(shù)據(jù)簡化或datadistillationtm方法和裝置的總體方塊圖,并且提供了功能組件、結(jié)構(gòu)和操作的總覽。圖1a中示出的組件和/或操作可以使用軟件、硬件或其組合來實現(xiàn)。
從輸入數(shù)據(jù)流接收字節(jié)序列并且將其作為輸入數(shù)據(jù)102給出到數(shù)據(jù)簡化裝置103,其也被稱作datadistillationtm裝置。解析器和因式分解器104對傳入數(shù)據(jù)進(jìn)行解析并且將其分解成組塊或候選單元。因式分解器決定將在輸入流中的何處插入中斷以便把該流切分成候選單元。一旦識別出數(shù)據(jù)中的兩處接連的中斷,則由解析器和因式分解器創(chuàng)建候選單元105并且將其給出到基本數(shù)據(jù)存儲庫106,所述基本數(shù)據(jù)存儲庫也被稱作datadistillationtm濾篩。
datadistillationtm濾篩或基本數(shù)據(jù)存儲庫106包含所有基本數(shù)據(jù)單元(在圖1a中被標(biāo)記成pde),并且基于其值或內(nèi)容對其進(jìn)行排序和組織。所述濾篩提供對于兩種存取的支持。首先,可以通過對基本數(shù)據(jù)單元駐留在濾篩中的位置的位置的引用對每一個基本數(shù)據(jù)單元進(jìn)行直接存取。其次,可以通過使用內(nèi)容關(guān)聯(lián)映射器121按照內(nèi)容關(guān)聯(lián)方式對各個單元進(jìn)行存取,所述內(nèi)容關(guān)聯(lián)映射器121可以通過軟件、硬件或其組合來實施。針對濾篩的這種第二存取形式是一項重要的特征,并且由所公開的實施例使用來識別與候選單元105精確地匹配的基本數(shù)據(jù)單元,或者用來識別可以從中導(dǎo)出候選單元的基本數(shù)據(jù)單元。具體來說,在給定候選單元(例如候選單元105)的情況下,可以對基本數(shù)據(jù)存儲庫106進(jìn)行搜索(基于候選單元105的值或者基于候選單元105中的特定字段的值),以便快速地提供一個基本數(shù)據(jù)單元107或者基本數(shù)據(jù)單元107的較小集合,從中可以導(dǎo)出候選單元并且只利用規(guī)定所述導(dǎo)出所需的最小存儲。
可以利用其值分散在數(shù)據(jù)空間內(nèi)的一個基本數(shù)據(jù)單元集合對所述濾篩或基本數(shù)據(jù)存儲庫106進(jìn)行初始化。或者根據(jù)這里參照圖1a-c和圖2所描述的datadistillationtm處理,所述濾篩最初可以是空的,并且可以隨著攝取數(shù)據(jù)將基本數(shù)據(jù)單元動態(tài)地添加到所述濾篩。
導(dǎo)出器110接收候選單元105以及所取回的適合于導(dǎo)出的基本數(shù)據(jù)單元107(從基本數(shù)據(jù)存儲庫106相關(guān)聯(lián)地取回的內(nèi)容),確定是否可以從這些基本數(shù)據(jù)單元當(dāng)中的一個或多個導(dǎo)出候選單元105,生成簡化數(shù)據(jù)分量115(由對相關(guān)的基本數(shù)據(jù)單元的引用和重建程序構(gòu)成),并且向基本數(shù)據(jù)存儲庫提供更新114。如果候選單元是所取回的基本數(shù)據(jù)單元的重復(fù),則導(dǎo)出器在蒸餾數(shù)據(jù)108中放入對位于基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元的引用(或指針),并且還有表明這是基本數(shù)據(jù)單元的指示。如果沒有找到重復(fù),則導(dǎo)出器把候選單元表達(dá)成在一個或多個所取回的基本數(shù)據(jù)單元上實施的一項或多項變換的結(jié)果,其中所述變換序列被統(tǒng)稱作重建程序,例如重建程序119a。每一項導(dǎo)出可能需要由導(dǎo)出器構(gòu)造該項導(dǎo)出自身所獨有的程序。重建程序規(guī)定可以對基本數(shù)據(jù)單元應(yīng)用的例如插入、刪除、替換、串聯(lián)、算術(shù)以及邏輯運算之類的變換。如果導(dǎo)出單元的足跡(被計算成重建程序的大小加上針對所需的基本數(shù)據(jù)單元的引用的大小)處在關(guān)于候選單元的特定的指定距離閾值之內(nèi)(以便允許數(shù)據(jù)簡化),則把候選單元改訂成導(dǎo)出單元并且由重建程序與對(多個)相關(guān)基本數(shù)據(jù)單元的引用的組合替換——這些形成本例中的簡化數(shù)據(jù)分量115。如果超出所述閾值,或者如果沒有從基本數(shù)據(jù)存儲庫取回適當(dāng)?shù)幕緮?shù)據(jù)單元,則可以指示基本數(shù)據(jù)存儲庫把所述候選安裝成新鮮基本數(shù)據(jù)單元。在這種情況下,導(dǎo)出器在蒸餾數(shù)據(jù)中放入對新添加的基本數(shù)據(jù)單元的引用,并且還有表明這是基本數(shù)據(jù)單元的指示。
對數(shù)據(jù)取回的請求(例如取回請求109)可以采取對基本數(shù)據(jù)存儲庫中的包含基本數(shù)據(jù)單元的位置的引用的形式,或者在導(dǎo)出項的情況下可以采取對基本數(shù)據(jù)單元的此類引用與相關(guān)聯(lián)的重建程序的組合的形式(或者在基于多個基本數(shù)據(jù)單元的導(dǎo)出項的情況下是對多個基本數(shù)據(jù)單元的引用與相關(guān)聯(lián)的重建程序的組合)。通過使用對基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元的一項或多項引用,取回器111可以對基本數(shù)據(jù)存儲庫進(jìn)行存取以便取回一個或多個基本數(shù)據(jù)單元,并且把所述一個或多個基本數(shù)據(jù)單元以及重建程序提供到重建器112,所述重建器112在所述一個或多個基本數(shù)據(jù)單元上執(zhí)行(在重建程序中規(guī)定的)變換以便生成重建數(shù)據(jù)116(也就是所請求的數(shù)據(jù)),并且響應(yīng)于數(shù)據(jù)取回請求將其遞送到取回數(shù)據(jù)輸出113。
在該實施例的一種變型中,基本數(shù)據(jù)單元可以通過壓縮形式(使用本領(lǐng)域內(nèi)已知的技術(shù),包括huffman編碼和lempelziv方法)被存儲在濾篩中,并且在需要時被解壓縮。這樣做的優(yōu)點是簡化了基本數(shù)據(jù)存儲庫的總體足跡。唯一的約束在于內(nèi)容關(guān)聯(lián)映射器121必須像以前一樣繼續(xù)提供對于基本數(shù)據(jù)單元的內(nèi)容關(guān)聯(lián)存取。
圖1b和1c示出了根據(jù)這里所描述的一些實施例的圖1a中所示的方法和裝置的變型。在圖1b中,重建程序可以被存儲在基本數(shù)據(jù)存儲庫中,并且像基本數(shù)據(jù)單元那樣被對待。對重建程序的引用或指針119b被提供在蒸餾數(shù)據(jù)108中,而不是提供重建程序119a本身。如果重建程序由其他導(dǎo)出項共享,并且如果對重建程序的引用或指針(加上在重建程序與對重建程序的引用之間作出區(qū)分所需的任何元數(shù)據(jù))所需的存儲空間小于重建程序本身,則實現(xiàn)進(jìn)一步的數(shù)據(jù)簡化。
在圖1b中,重建程序可以像基本數(shù)據(jù)單元那樣被對待和存取,并且作為基本數(shù)據(jù)單元被存儲在基本數(shù)據(jù)存儲庫中,從而允許從基本數(shù)據(jù)存儲庫對重建程序進(jìn)行內(nèi)容關(guān)聯(lián)搜索和取回。在用以創(chuàng)建導(dǎo)出單元的導(dǎo)出處理期間,一旦導(dǎo)出器110確定對于導(dǎo)出所需要的重建程序,其隨后可以確定該候選重建程序是否已經(jīng)存在于基本數(shù)據(jù)存儲庫中,或者確定是否可以從已經(jīng)存在于基本數(shù)據(jù)存儲庫中的另一個條目導(dǎo)出該候選重建程序。如果候選重建程序已經(jīng)存在于基本數(shù)據(jù)存儲庫中,則導(dǎo)出器110可以確定對所述預(yù)先存在的條目的引用,并且把所述引用包括在蒸餾數(shù)據(jù)108中。如果可以從已經(jīng)駐留在基本數(shù)據(jù)存儲庫中的現(xiàn)有條目導(dǎo)出候選重建程序,則導(dǎo)出器可以把候選重建程序的導(dǎo)出項或改訂遞送到蒸餾數(shù)據(jù),也就是說導(dǎo)出器在蒸餾數(shù)據(jù)中放入對預(yù)先存在于基本數(shù)據(jù)存儲庫中的條目的引用連同從所述預(yù)先存在的條目導(dǎo)出候選重建程序的增量重建程序。如果候選重建程序既不存在于基本數(shù)據(jù)存儲庫中也無法從基本數(shù)據(jù)存儲庫中的條目導(dǎo)出,則導(dǎo)出器110可以把重建程序添加到基本數(shù)據(jù)存儲庫中(把重建程序添加到存儲庫的操作可以返回對新添加的條目的引用),并且把對重建程序的引用包括在蒸餾數(shù)據(jù)108中。
圖1c給出了根據(jù)這里所描述的一些實施例的圖1b中所示的方法和裝置的一種變型。具體來說,圖1c中的被用來存儲和查詢重建程序的機制類似于被用來存儲和查詢基本數(shù)據(jù)單元的機制,但是重建程序被保持在與包含基本數(shù)據(jù)單元的結(jié)構(gòu)分開的結(jié)構(gòu)中。這樣的結(jié)構(gòu)中的條目被稱作基本重建程序(在圖1c中被標(biāo)記為prp)?;叵氲交緮?shù)據(jù)存儲庫106包括支持快速內(nèi)容關(guān)聯(lián)查找操作的內(nèi)容關(guān)聯(lián)映射器121。圖1c中示出的實施例包括類似于內(nèi)容關(guān)聯(lián)映射器121的內(nèi)容關(guān)聯(lián)映射器122。在圖1c中,內(nèi)容關(guān)聯(lián)映射器122和內(nèi)容關(guān)聯(lián)映射器121被顯示成基本數(shù)據(jù)存儲庫或濾篩106的一部分。在其他實施例中,內(nèi)容關(guān)聯(lián)映射器122和重建程序可以與基本數(shù)據(jù)存儲庫或濾篩106分開存儲。
在該實施例的一種變型中,基本數(shù)據(jù)單元可以通過壓縮形式(使用本領(lǐng)域內(nèi)已知的技術(shù),包括huffman編碼和lempelziv方法)被存儲在濾篩中,并且在需要時被解壓縮。同樣地,基本重建程序可以通過壓縮形式(使用本領(lǐng)域內(nèi)已知的技術(shù),包括huffman編碼和lempelziv方法)被存儲在基本重建程序濾篩中,并且在需要時被解壓縮。這樣做的優(yōu)點是減縮了基本數(shù)據(jù)濾篩和基本重建程序濾篩的總體足跡。唯一的約束在于內(nèi)容關(guān)聯(lián)映射器121和122必須像以前一樣繼續(xù)提供對于基本數(shù)據(jù)單元和基本重建程序的內(nèi)容關(guān)聯(lián)存取。
圖1d給出了根據(jù)這里所描述的一些實施例的圖1a中所示的方法和裝置的一種變型。具體來說,在圖1d所描述的實施例中,基本數(shù)據(jù)單元被內(nèi)聯(lián)存儲在蒸餾數(shù)據(jù)中?;緮?shù)據(jù)濾篩或基本數(shù)據(jù)存儲庫106繼續(xù)提供對于基本數(shù)據(jù)單元的內(nèi)容關(guān)聯(lián)存取,并且繼續(xù)在邏輯上包含基本數(shù)據(jù)單元。其保持對內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中的基本數(shù)據(jù)單元的引用或鏈接。例如在圖1d中,基本數(shù)據(jù)單元130內(nèi)聯(lián)位于蒸餾數(shù)據(jù)108中?;緮?shù)據(jù)濾篩或基本數(shù)據(jù)存儲庫106保持對基本數(shù)據(jù)單元130的引用131。同樣地,在這種設(shè)置中,導(dǎo)出單元的無損簡化表示將包含對所需的基本數(shù)據(jù)單元的引用。在數(shù)據(jù)取回期間,取回器111將從所需的基本數(shù)據(jù)單元所處的位置獲取所述基本數(shù)據(jù)單元。
圖1e給出了根據(jù)這里所描述的一些實施例的圖1d中所示的方法和裝置的一種變型。具體來說,在圖1e所描述的實施例中,與圖1b中所示出的設(shè)置一樣,重建程序可以從其他基本重建程序?qū)С觯⑶冶灰?guī)定為增量重建程序加上對基本重建程序的引用。這樣的基本重建程序像基本數(shù)據(jù)單元一樣被對待,并且在邏輯上被安裝在基本數(shù)據(jù)濾篩中。此外,在這種設(shè)置中,基本數(shù)據(jù)單元和基本重建程序都被內(nèi)聯(lián)存儲在蒸餾數(shù)據(jù)中?;緮?shù)據(jù)濾篩或基本數(shù)據(jù)存儲庫106繼續(xù)提供對于基本數(shù)據(jù)單元和基本重建程序的內(nèi)容關(guān)聯(lián)存取,并且繼續(xù)在邏輯上包含這些基本數(shù)據(jù)單元和基本重建程序,同時保持對這些基本數(shù)據(jù)單元和基本重建程序內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中的位置的引用或鏈接。例如在圖1e中,基本數(shù)據(jù)單元130內(nèi)聯(lián)位于蒸餾數(shù)據(jù)108中。同樣地在圖1e中,基本重建程序132內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中?;緮?shù)據(jù)濾篩或基本數(shù)據(jù)存儲庫106保持對基本數(shù)據(jù)單元130(即pde_i)的引用131(即reference_to_pde_i),以及對基本重建程序132(即prime_recon_program_l)的引用133(即reference_to_pde_j)。同樣地,在這種設(shè)置中,導(dǎo)出單元的無損簡化表示將包含對所需的基本數(shù)據(jù)單元和所需的基本重建程序的引用。在數(shù)據(jù)取回期間,取回器111將從所需的分量在相應(yīng)的蒸餾數(shù)據(jù)中所處的位置獲取所述分量。
圖1f給出了根據(jù)這里所描述的一些實施例的圖1e中所示的方法和裝置的一種變型。具體來說,在圖1f所描述的實施例中,與圖1c中所示出的設(shè)置一樣,基本數(shù)據(jù)濾篩108包含分開的映射器——用于基本數(shù)據(jù)單元的內(nèi)容關(guān)聯(lián)映射器121和用于基本重建程序的內(nèi)容關(guān)聯(lián)映射器122。
圖1g給出了圖1a到1f中所示的方法和裝置的一種更加一般化的變型。具體來說,在圖1g所描述的實施例中,基本數(shù)據(jù)單元可以位于基本數(shù)據(jù)濾篩中或者內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中。一些基本數(shù)據(jù)單元可以位于基本數(shù)據(jù)濾篩中,其他的基本數(shù)據(jù)單元則內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中。同樣地,基本重建程序可以位于基本數(shù)據(jù)濾篩中或者內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中。一些基本重建程序可以位于基本數(shù)據(jù)濾篩中,其他的基本重建程序則內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中?;緮?shù)據(jù)濾篩在邏輯上包含所有基本數(shù)據(jù)單元和基本重建程序,并且在基本數(shù)據(jù)單元或基本重建程序內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中的情況下,基本數(shù)據(jù)濾篩提供對其位置的引用。
前面對于把輸入數(shù)據(jù)因式分解成各個單元并且從駐留在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元導(dǎo)出這些單元的用于數(shù)據(jù)簡化的方法和裝置的描述僅僅是出于說明和描述的目的而給出的。所述描述不意圖進(jìn)行窮舉或者把本發(fā)明限制到所公開的形式。因此,本領(lǐng)域技術(shù)人員將會想到許多修改和變型。
圖1h給出了根據(jù)這里所描述的一些實施例的描述用于datadistillationtm處理的方法和裝置的圖1a中的蒸餾數(shù)據(jù)119a的結(jié)構(gòu)的格式和規(guī)范的一個實例。由于datadistillationtm處理把輸入數(shù)據(jù)因式分解成基本數(shù)據(jù)單元和導(dǎo)出單元,因此用于數(shù)據(jù)的無損簡化表示的格式在蒸餾數(shù)據(jù)中標(biāo)識這些單元并且描述這些單元的各個分量。自描述格式標(biāo)識蒸餾數(shù)據(jù)中的每一條記錄,表明其是基本數(shù)據(jù)單元還是導(dǎo)出單元,并且描述各個分量,也就是對安裝在濾篩中的一個或多個基本數(shù)據(jù)單元的引用,對安裝在基本數(shù)據(jù)存儲庫中的重建程序的引用(如圖1b的119b),或者對存儲在重建程序(rp)存儲庫中的重建程序的引用(如圖1c的119c),以及內(nèi)聯(lián)重建程序(rp)。重建程序(rp)存儲庫也被可互換地稱作基本重建程序(prp)存儲庫。圖1h中的格式通過在多個基本數(shù)據(jù)單元上執(zhí)行重建程序而規(guī)定導(dǎo)出,其中導(dǎo)出單元和每一個基本數(shù)據(jù)單元的大小是獨立地可規(guī)定的。圖1h中的格式還規(guī)定內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中而不是位于基本數(shù)據(jù)存儲庫內(nèi)的基本數(shù)據(jù)單元。這是通過操作碼編碼7規(guī)定的,其規(guī)定單元的類型是內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中的基本數(shù)據(jù)單元。蒸餾數(shù)據(jù)使用該格式被存儲在數(shù)據(jù)存儲系統(tǒng)中。該格式中的數(shù)據(jù)被數(shù)據(jù)取回器111消耗,從而可以獲取并且隨后重建數(shù)據(jù)的各個分量。
圖1i到1p示出了對應(yīng)于圖1a到圖1g中示出的用于數(shù)據(jù)簡化的方法和裝置的各種變型的輸入數(shù)據(jù)到無損簡化形式的概念性變換。圖1i示出了輸入數(shù)據(jù)流如何被因式分解成候選單元,并且隨后候選單元被視為基本數(shù)據(jù)單元或?qū)С鰡卧?。最后,?shù)據(jù)被變換成無損簡化形式。圖1i到1n示出了對應(yīng)于各個實施例的無損簡化形式的各種變型。
圖1i和圖1j示出了通過圖1a中所示的方法和裝置所產(chǎn)生的數(shù)據(jù)的無損簡化形式的實例。圖1i中的無損簡化形式包括內(nèi)容關(guān)聯(lián)映射器,并且是允許連續(xù)的進(jìn)一步數(shù)據(jù)攝取以及針對現(xiàn)有的基本數(shù)據(jù)單元簡化該數(shù)據(jù)的形式,與此同時,圖1j中的無損簡化形式不再保留內(nèi)容關(guān)聯(lián)映射器,從而導(dǎo)致更小的數(shù)據(jù)足跡。圖1k和圖1l示出了通過圖1c中所示的方法和裝置所產(chǎn)生的數(shù)據(jù)的無損簡化形式的實例。圖1k中的無損簡化形式包括內(nèi)容關(guān)聯(lián)映射器,并且是允許連續(xù)的進(jìn)一步數(shù)據(jù)攝取以及針對現(xiàn)有的基本數(shù)據(jù)單元和基本重建程序簡化該數(shù)據(jù)的形式,與此同時,圖1l中的無損簡化形式不再保留內(nèi)容關(guān)聯(lián)映射器,從而導(dǎo)致更小的數(shù)據(jù)足跡。
圖1m和圖1n示出了通過圖1f中所示的方法和裝置所產(chǎn)生的數(shù)據(jù)的無損簡化形式的實例,其中基本數(shù)據(jù)單元和基本重建程序內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中。圖1m中的無損簡化形式包括內(nèi)容關(guān)聯(lián)映射器,并且是允許連續(xù)的進(jìn)一步數(shù)據(jù)攝取以及針對現(xiàn)有的基本數(shù)據(jù)單元和基本重建程序簡化該數(shù)據(jù)的形式,與此同時,圖1n中的無損簡化形式不再保留內(nèi)容關(guān)聯(lián)映射器,從而導(dǎo)致更小的數(shù)據(jù)足跡。圖1o和圖1p示出了通過圖1g中所示的方法和裝置所產(chǎn)生的數(shù)據(jù)的無損簡化形式的實例,其中基本數(shù)據(jù)單元和基本重建程序可以內(nèi)聯(lián)位于蒸餾數(shù)據(jù)中或者位于基本數(shù)據(jù)濾篩中。圖1o中的無損簡化形式包括內(nèi)容關(guān)聯(lián)映射器,并且是允許連續(xù)的進(jìn)一步數(shù)據(jù)攝取以及針對現(xiàn)有的基本數(shù)據(jù)單元和基本重建程序簡化該數(shù)據(jù)的形式,與此同時,圖1p中的無損簡化形式不再保留內(nèi)容關(guān)聯(lián)映射器,從而導(dǎo)致更小的數(shù)據(jù)足跡。
在圖1a到p所示出的實施例的變型中,簡化數(shù)據(jù)的各個分量可以使用本領(lǐng)域內(nèi)已知的技術(shù)(比如huffman編碼和lempelziv方法)被進(jìn)一步簡化或壓縮,并且通過該壓縮形式被存儲。這些分量可以隨后在需要被使用在數(shù)據(jù)蒸餾裝置中時被解壓縮。這樣做的好處是進(jìn)一步簡化了數(shù)據(jù)的總體足跡。
圖2示出了根據(jù)這里所描述的一些實施例的通過把輸入數(shù)據(jù)因式分解成各個單元并且從駐留在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元導(dǎo)出這些單元而進(jìn)行數(shù)據(jù)簡化的處理。隨著輸入數(shù)據(jù)到達(dá),其可以被解析和因式分解或者分解成一系列候選單元(操作202)。從輸入消耗下一個候選單元(操作204),并且基于候選單元的內(nèi)容對基本數(shù)據(jù)存儲庫實施內(nèi)容關(guān)聯(lián)查找,以便查看是否存在可以從中導(dǎo)出候選單元的任何適當(dāng)?shù)膯卧?操作206)。如果基本數(shù)據(jù)存儲庫沒有找到任何這樣的單元(操作208的“否”分支),則候選單元將作為新的基本數(shù)據(jù)單元被分配并且輸入到濾篩中,并且在蒸餾數(shù)據(jù)中為候選單元創(chuàng)建的條目將是對新創(chuàng)建的基本數(shù)據(jù)單元的引用(操作216)。如果對基本數(shù)據(jù)存儲庫的內(nèi)容關(guān)聯(lián)查找確實產(chǎn)生可以潛在地從中導(dǎo)出候選單元的一個或多個適當(dāng)?shù)膯卧?操作208的“是”分支),則在所取回的基本數(shù)據(jù)單元上實施分析和計算以便從中導(dǎo)出候選單元。應(yīng)當(dāng)提到的是,在一些實施例中,首先僅獲取用于適當(dāng)?shù)幕緮?shù)據(jù)單元的元數(shù)據(jù)并且在所述元數(shù)據(jù)上實施分析,并且只有在認(rèn)為有用的情況下才隨后獲取適當(dāng)?shù)幕緮?shù)據(jù)單元(在這些實施例中,用于基本數(shù)據(jù)單元的元數(shù)據(jù)提供關(guān)于基本數(shù)據(jù)單元的內(nèi)容的一些信息,從而允許系統(tǒng)基于元數(shù)據(jù)快速地排除匹配或者評估可導(dǎo)出性)。在其他實施例中,基本數(shù)據(jù)存儲庫直接取回基本數(shù)據(jù)單元(也就是說在取回基本數(shù)據(jù)單元之前并不首先取回元數(shù)據(jù)以便對元數(shù)據(jù)進(jìn)行分析),從而在所取回的基本數(shù)據(jù)單元上實施分析和計算。
實施第一檢查以便查看候選是否任何這些單元的重復(fù)(操作210)??梢允褂萌魏芜m當(dāng)?shù)纳⒘屑夹g(shù)加速這一檢查。如果候選與從基本數(shù)據(jù)存儲庫取回的基本數(shù)據(jù)單元完全相同(操作210的“是”分支),則蒸餾數(shù)據(jù)中的為候選單元創(chuàng)建的條目由對該基本數(shù)據(jù)單元的引用以及表明該條目是基本數(shù)據(jù)單元的指示所替換(操作220)。如果沒有找到重復(fù)(操作210的“否”分支),則基于候選單元從基本數(shù)據(jù)存儲庫取回的條目被視為潛在地可以從中導(dǎo)出候選單元的條目。以下是基本數(shù)據(jù)存儲庫的重要、新穎而且并非是顯而易見的特征:當(dāng)沒有在基本數(shù)據(jù)存儲庫中找到重復(fù)時,基本數(shù)據(jù)存儲庫可以返回基本數(shù)據(jù)單元,所述基本數(shù)據(jù)單元雖然并非與候選單元完全相同,卻是可以潛在地通過對(多個)基本數(shù)據(jù)單元應(yīng)用一項或多項變換而導(dǎo)出候選單元的單元。所述處理隨后可以實施分析和計算,以便從最適當(dāng)?shù)幕緮?shù)據(jù)單元或者適當(dāng)?shù)幕緮?shù)據(jù)單元的集合導(dǎo)出候選單元(操作212)。在一些實施例中,所述導(dǎo)出把候選單元表達(dá)成在一個或多個基本數(shù)據(jù)單元上實施的變換的結(jié)果,這樣的變換被統(tǒng)稱作重建程序。每一項導(dǎo)出可能需要構(gòu)造其自身獨有的程序。除了構(gòu)造重建程序之外,所述處理還可以計算通常表明存儲候選單元的改訂以及從所述改訂重建候選單元所需要的存儲資源和/或計算資源的水平的距離量度。在一些實施例中,導(dǎo)出單元的足跡被用作從(多個)基本數(shù)據(jù)單元到候選的距離度量——具體來說,距離量度可以被定義成重建程序的大小加上對在導(dǎo)出中所涉及的一個或多個基本數(shù)據(jù)單元的引用的大小的總和。可以選擇具有最短距離的導(dǎo)出。把對應(yīng)于該導(dǎo)出的距離與距離閾值進(jìn)行比較(操作214),如果該距離沒有超出距離閾值,則接受該導(dǎo)出(操作214的“是”分支)。為了產(chǎn)生數(shù)據(jù)簡化,所述距離閾值必須總是小于候選單元的大小。舉例來說,距離閾值可以被設(shè)定到候選單元大小的50%,從而使得只有在導(dǎo)出項的足跡小于或等于候選單元足跡的一半時才接收導(dǎo)出項,從而對于為之存在適當(dāng)導(dǎo)出的每一個候選單元確保2x或更大的簡化。距離閾值可以是預(yù)定的百分比或分?jǐn)?shù),其或者是基于用戶規(guī)定的輸入或者是由系統(tǒng)選擇。距離閾值可以由系統(tǒng)基于系統(tǒng)的靜態(tài)或動態(tài)參數(shù)確定。一旦導(dǎo)出被接收,候選單元被改訂并且被重建程序與對一個或多個基本數(shù)據(jù)單元的引用的組合所替換。蒸餾數(shù)據(jù)中的為候選單元創(chuàng)建的條目被所述導(dǎo)出所替換,也就是說被表明這是導(dǎo)出單元的指示連同重建程序加上對在導(dǎo)出中所涉及的一個或多個基本數(shù)據(jù)單元的引用所替換(操作218)。另一方面,如果對應(yīng)于最佳導(dǎo)出的距離超出距離閾值(操作214中的“否”分支),則將不會接收任何可能的導(dǎo)出項。在這種情況下,候選單元可以作為新的基本數(shù)據(jù)單元被分配并且輸入到濾篩中,并且在蒸餾數(shù)據(jù)中為候選單元創(chuàng)建的條目將是對新創(chuàng)建的基本數(shù)據(jù)單元的引用連同表明這是基本數(shù)據(jù)單元的指示(操作216)。
最后,所述處理可以檢查是否存在任何附加的候選單元(操作222),并且如果還有更多候選單元則返回操作204(操作222的“是”分支),或者如果沒有更多候選單元則終止處理(操作222的“否”分支)。
可以采用多種方法來實施圖2中的操作202,也就是對傳入數(shù)據(jù)進(jìn)行解析并且將其分解成候選單元。因式分解算法需要決定將在字節(jié)流中的何處插入中斷以便把該流切分成候選單元??赡艿募夹g(shù)包括(而不限于)把流分解成固定大小塊(比如4096字節(jié)的頁面),或者應(yīng)用指紋處理方法(比如對輸入流的子串應(yīng)用隨機素多項式的技術(shù))以便在數(shù)據(jù)流中定位變成單元邊界的指紋(這種技術(shù)可以導(dǎo)致可變大小單元),或者對輸入進(jìn)行解析以便檢測報頭或者某種預(yù)先聲明的結(jié)構(gòu)并且基于該結(jié)構(gòu)來界定單元??梢詫斎脒M(jìn)行解析以便檢測通過圖式(schema)聲明的特定結(jié)構(gòu)??梢詫斎脒M(jìn)行解析以便在數(shù)據(jù)中檢測預(yù)先聲明的模式、語法或規(guī)則表達(dá)法的存在。一旦識別出數(shù)據(jù)中的兩處接連的中斷,則創(chuàng)建候選單元(所述候選單元是位于所述兩處接連的中斷之間的數(shù)據(jù))并且將其呈現(xiàn)到基本數(shù)據(jù)存儲庫以供內(nèi)容關(guān)聯(lián)查找。如果創(chuàng)建了可變大小單元,則需要規(guī)定候選單元的長度并且作為元數(shù)據(jù)與候選單元一起攜帶。
基本數(shù)據(jù)存儲庫的一項重要功能是基于為之給出的候選單元而提供內(nèi)容關(guān)聯(lián)查找并且快速地提供一個基本數(shù)據(jù)單元或者較小的基本數(shù)據(jù)單元集合,從中可以導(dǎo)出候選單元并且只利用規(guī)定所述導(dǎo)出所需的最小存儲。在給定較大數(shù)據(jù)集的情況下,這是一個困難的問題。在給定以太字節(jié)計的數(shù)據(jù)的情況下,即使對于千字節(jié)大小的單元,仍然要搜索數(shù)以十億計的單元并且從中作出選擇。這一問題在更大的數(shù)據(jù)集上甚至?xí)訃?yán)重。因此變得很重要的是使用適當(dāng)?shù)募夹g(shù)對單元進(jìn)行組織和排序,并且隨后在單元的該組織內(nèi)檢測相似性和可導(dǎo)出性,以便能夠快速地提供適當(dāng)?shù)幕緮?shù)據(jù)單元的較小集合。
可以基于每一個單元(也就是基本數(shù)據(jù)單元)的值對濾篩中的條目進(jìn)行排序,從而可以按照升序或降序通過值來安排所有的條目?;蛘呖梢匝刂趩卧械奶囟ㄗ侄蔚闹档闹鬏S對條目進(jìn)行排序,隨后是使用單元的其余內(nèi)容的次要軸。在本上下文中,字段是來自單元的內(nèi)容的鄰接字節(jié)的集合。可以通過對單元的內(nèi)容應(yīng)用指紋處理方法來定位字段,從而使得指紋的位置標(biāo)識字段的位置。或者可以選擇單元內(nèi)容內(nèi)部的特定的固定偏移量以便定位字段。還可以采用其他方法以定位字段,其中包括而不限于對單元進(jìn)行解析以便檢測所聲明的特定結(jié)構(gòu)并且定位該結(jié)構(gòu)內(nèi)的字段。
在另一種形式的組織中,單元內(nèi)的特定字段或字段組合可以被視為維度,從而可以使用這些維度的串聯(lián)以及隨后的每一個單元的剩余內(nèi)容對數(shù)據(jù)單元進(jìn)行排序和組織。一般來說,字段與維度之間的對應(yīng)性或映射可以是任意地復(fù)雜。例如在一些實施例中,確切地一個字段可以映射到確切地一個維度。在其他實施例中,多個字段的組合(例如f1、f2和f3)可以映射到一個維度??梢酝ㄟ^串聯(lián)兩個字段或者通過對其應(yīng)用任何其他適當(dāng)?shù)墓δ芏鴮崿F(xiàn)字段的組合。重要的要求是被用來對單元進(jìn)行組織的字段、維度以及單元的剩余內(nèi)容的安排必須允許通過其內(nèi)容唯一地識別所有基本數(shù)據(jù)單元并且在濾篩中對其進(jìn)行排序。
在一些實施例中,單元的內(nèi)容可以被表示成下面的表達(dá)法:單元=頭部.*sig1.*sig2.*…sigi.*…sign.*尾部,其中“頭部”是包括單元的開頭字節(jié)的字節(jié)序列,“尾部”是包括單元的結(jié)尾字節(jié)的字節(jié)序列,“sig1”、“sig2”、“sigi”和“sign”是表征單元的單元內(nèi)容主體內(nèi)的特定長度的各個簽名或模式或規(guī)則表達(dá)法或字節(jié)序列。各個簽名之間的表達(dá)法“.*”是通配符表達(dá)法,也就是允許除了表達(dá)法“.*”之后的簽名之外的其他任何值的任意數(shù)目的中間字節(jié)的規(guī)則表達(dá)法標(biāo)記。在一些實施例中,n元組(sig1,sig2,…sigi,…sign)被稱作單元的骨架數(shù)據(jù)結(jié)構(gòu)或骨架,并且可以被視為單元的簡化實質(zhì)子集或?qū)嵸|(zhì)。在其他實施例中,(n+2)元組(頭部,sig1,sig2,…sigi,…sign,尾部)被稱作單元的骨架數(shù)據(jù)結(jié)構(gòu)或骨架?;蛘呖梢圆捎妙^部或尾部連同其余簽名的n+1元組。
可以對單元的內(nèi)容應(yīng)用指紋處理方法,以便確定單元內(nèi)容內(nèi)的骨架數(shù)據(jù)結(jié)構(gòu)的各個分量(或簽名)的位置。或者可以選擇單元內(nèi)容內(nèi)部的特定的固定偏移量以便定位分量。還可以采用其他方法來定位骨架數(shù)據(jù)結(jié)構(gòu)的分量,其中包括而不限于對單元進(jìn)行解析以便檢測所聲明的特定結(jié)構(gòu)并且定位該結(jié)構(gòu)內(nèi)的分量??梢曰谄涔羌軘?shù)據(jù)結(jié)構(gòu)在濾篩中對基本數(shù)據(jù)單元進(jìn)行排序。換句話說,單元的骨架數(shù)據(jù)結(jié)構(gòu)的各個分量可以被視為維度,從而可以使用這些維度的串聯(lián)以及隨后的每一個單元的剩余內(nèi)容對濾篩中的基本數(shù)據(jù)單元進(jìn)行排序和組織。
一些實施例把輸入數(shù)據(jù)因式分解成候選單元,其中每一個候選單元的大小顯著大于對全局?jǐn)?shù)據(jù)集中的所有此類單元進(jìn)行存取所需要的引用的大小。關(guān)于被分解成此類數(shù)據(jù)組塊(并且按照內(nèi)容關(guān)聯(lián)方式被存取)的數(shù)據(jù)的一項觀察是,實際的數(shù)據(jù)關(guān)于數(shù)據(jù)組塊所能規(guī)定的全部可能值是非常稀疏的。例如考慮1澤字節(jié)數(shù)據(jù)集。需要大約70個比特對數(shù)據(jù)集中的每一個字節(jié)進(jìn)行尋址。在128字節(jié)(1024比特)的組塊大小下,在1澤字節(jié)數(shù)據(jù)集中近似有263個組塊,因此需要63個比特(少于8個字節(jié))對所有組塊進(jìn)行尋址。應(yīng)當(dāng)提到的是,1024比特的單元或組塊可以具有21024個可能值當(dāng)中的一個,而數(shù)據(jù)集中的給定組塊的實際值的數(shù)目最多是263個(如果所有組塊都不同的話)。這表明實際的數(shù)據(jù)關(guān)于通過一個單元的內(nèi)容所能達(dá)到或命名的值的數(shù)目是極為稀疏的。這就允許使用非常適合于組織非常稀疏的數(shù)據(jù)的樹結(jié)構(gòu),從而允許高效的基于內(nèi)容的查找,允許把新的單元高效地添加到樹結(jié)構(gòu),并且在對于樹結(jié)構(gòu)本身所需要的增量存儲方面是成本有效的。雖然在1澤字節(jié)數(shù)據(jù)集中僅有263個不同的組塊,從而只需要63個區(qū)分信息比特將其區(qū)別開,但是相關(guān)的區(qū)分比特可能分散在單元的整個1024個比特上,并且對于每一個單元出現(xiàn)在不同的位置處。因此,為了完全區(qū)分所有單元,僅僅檢查來自內(nèi)容的固定的63比特是不夠的,相反,整個單元內(nèi)容都需要參與單元的分揀,特別在提供對于數(shù)據(jù)集中的任一個和每一個單元的真實內(nèi)容關(guān)聯(lián)存取的解決方案中尤其是如此。在datadistillationtm框架中,希望能夠在被用來對數(shù)據(jù)進(jìn)行排序和組織的框架內(nèi)檢測可導(dǎo)出性??紤]到所有前述內(nèi)容,基于內(nèi)容的樹結(jié)構(gòu)(其隨著檢查更多內(nèi)容逐漸地區(qū)分?jǐn)?shù)據(jù))是對經(jīng)過因式分解的數(shù)據(jù)集中的所有單元進(jìn)行排序和區(qū)分的適當(dāng)組織。這樣的結(jié)構(gòu)提供了可以被作為可導(dǎo)出單元的分組或者具有類似的可導(dǎo)出性屬性的單元分組來對待的許多中間子樹等級。這樣的結(jié)構(gòu)可以利用表征每一個子樹的元數(shù)據(jù)或者利用表征每一個數(shù)據(jù)單元的元數(shù)據(jù)通過分級方式被加強。這樣的結(jié)構(gòu)可以有效地傳達(dá)其所包含的整個數(shù)據(jù)的構(gòu)成,包括數(shù)據(jù)中的實際值的密度、鄰近性和分布。
一些實施例把基本數(shù)據(jù)單元按照樹形式組織在濾篩中。每一個基本數(shù)據(jù)單元具有從該基本數(shù)據(jù)單元的整個內(nèi)容構(gòu)造的獨特“名稱”。該名稱被設(shè)計成足以唯一地標(biāo)識基本數(shù)據(jù)單元,并且將其與樹中的所有其他單元作出區(qū)分??梢酝ㄟ^幾種方式從基本數(shù)據(jù)單元的內(nèi)容構(gòu)造名稱。名稱可以簡單地由基本數(shù)據(jù)單元的所有字節(jié)構(gòu)成,這些字節(jié)按照其存在于基本數(shù)據(jù)單元中的相同順序出現(xiàn)在名稱中。在另一個實施例中,被稱作維度的特定字段或字段組合(其中字段和維度在前面作了描述)被用來形成名稱的開頭字節(jié),基本數(shù)據(jù)單元的其余內(nèi)容則形成名稱的其余部分,從而使得基本數(shù)據(jù)單元的整個內(nèi)容都參與創(chuàng)建單元的完整并且唯一的名稱。在另一個實施例中,單元的骨架數(shù)據(jù)結(jié)構(gòu)的字段被選擇成維度(其中字段和維度在前面作了描述),并且被用來形成名稱的開頭字節(jié),基本數(shù)據(jù)單元的其余內(nèi)容形成名稱的其余部分,從而使得基本數(shù)據(jù)單元的整個內(nèi)容都參與創(chuàng)建單元的完整并且唯一的名稱。
每一個基本數(shù)據(jù)單元的名稱被用來在樹中對基本數(shù)據(jù)單元進(jìn)行排序和組織。對于大多數(shù)實際的數(shù)據(jù)集,即使是大小非常大的那些數(shù)據(jù)集(比如由258個4kb大小單元構(gòu)成的1澤字節(jié)數(shù)據(jù)集),也預(yù)期到名稱的較小字節(jié)子集將常??梢杂脕韺渲械拇蟛糠只緮?shù)據(jù)單元進(jìn)行分揀和排序。
圖3a、3b、3c、3d和3e示出了根據(jù)這里所描述的一些實施例的可以被用來基于其名稱對基本數(shù)據(jù)單元進(jìn)行組織的不同的數(shù)據(jù)組織系統(tǒng)。
圖3a示出了前綴樹(trie)數(shù)據(jù)結(jié)構(gòu),其中基于來自每一個基本數(shù)據(jù)單元的相繼字節(jié)的值把基本數(shù)據(jù)單元組織在逐漸更小的群組中。在圖3a所示的實例中,每一個基本數(shù)據(jù)單元具有從該基本數(shù)據(jù)單元的整個內(nèi)容構(gòu)造的獨特名稱,該名稱簡單地由基本數(shù)據(jù)單元的所有字節(jié)構(gòu)成,這些字節(jié)按照其存在于基本數(shù)據(jù)單元中的相同順序出現(xiàn)在名稱中。前綴樹的根節(jié)點表示所有基本數(shù)據(jù)單元。前綴樹的其他節(jié)點表示基本數(shù)據(jù)單元的子集或群組。從前綴樹的根節(jié)點或第1級(在圖3a中被標(biāo)記成根302)開始,基于其名稱的最高有效字節(jié)(在圖3a中被標(biāo)記成n1)的值把基本數(shù)據(jù)單元分組到子樹中。在其名稱的最高有效字節(jié)中具有相同值的所有基本數(shù)據(jù)單元將被一起分組到共同的子樹中,并且通過該值標(biāo)示的鏈接將從根節(jié)點存在到表示該子樹的節(jié)點。例如在圖3a中,節(jié)點303表示分別在其對應(yīng)名稱的最高有效字節(jié)n1中具有相同的值2的基本數(shù)據(jù)單元的子樹或群組。在圖3a中,該群組包括基本數(shù)據(jù)單元305、306和307。
在前綴樹的第二級,每一個基本數(shù)據(jù)單元的名稱的第二最高有效字節(jié)被用來把每一個基本數(shù)據(jù)單元群組進(jìn)一步劃分成更小的子組。例如在圖3a中,使用第二最高有效字節(jié)n2把由節(jié)點303表示的基本數(shù)據(jù)單元群組進(jìn)一步細(xì)分成各個子組。節(jié)點304表示在其對應(yīng)名稱的最高有效字節(jié)n1中具有值2并且在第二最高有效字節(jié)n2中具有值1的基本數(shù)據(jù)單元的子組。該子組包括基本數(shù)據(jù)單元305和306。
所述細(xì)分處理在前綴樹的每一級繼續(xù),從而創(chuàng)建從親代節(jié)點到每一個子代節(jié)點的鏈接,其中子代節(jié)點表示通過親代節(jié)點表示的基本數(shù)據(jù)單元的一個子集。這一處理繼續(xù)到在前綴樹的葉子處只有單獨的基本數(shù)據(jù)單元為止。葉節(jié)點表示葉子的群組。在圖3a中,節(jié)點304是葉節(jié)點。由節(jié)點304表示的基本數(shù)據(jù)單元的群組包括基本數(shù)據(jù)單元305和306。在圖3a中,通過使用其名稱的第三最高有效字節(jié),該群組被進(jìn)一步細(xì)分成單獨的基本數(shù)據(jù)單元305和306。值n3=3導(dǎo)致基本數(shù)據(jù)單元305,值n3=5則導(dǎo)致基本數(shù)據(jù)單元306。在該例中,其完整名稱當(dāng)中的僅僅3個有效字節(jié)就足以完全標(biāo)識基本數(shù)據(jù)單元305和306。同樣地,來自名稱的僅僅兩個有效字節(jié)就足以標(biāo)識基本數(shù)據(jù)單元307。
該例示出了在基本數(shù)據(jù)單元的給定混合中如何只有名稱的一個字節(jié)子集用來在樹中標(biāo)識基本數(shù)據(jù)單元,并且不需要整個名稱以到達(dá)獨有的基本數(shù)據(jù)單元。此外,基本數(shù)據(jù)單元或者基本數(shù)據(jù)單元的群組可能分別需要不同數(shù)目的有效字節(jié)以便能夠?qū)ζ溥M(jìn)行唯一標(biāo)識。因此,從根節(jié)點到基本數(shù)據(jù)單元的前綴樹深度對于不同的基本數(shù)據(jù)單元可以是不同的。此外,在前綴樹中,每一個節(jié)點可能具有下降到下方的子樹的不同數(shù)目的鏈接。
在這樣的前綴樹中,每一個節(jié)點具有由規(guī)定如何到達(dá)該節(jié)點的字節(jié)序列構(gòu)成的名稱。舉例來說,對應(yīng)于節(jié)點304的名稱是“21”。此外,在樹中的當(dāng)前單元分布中唯一地標(biāo)識單元的來自單元名稱的字節(jié)子集是從根節(jié)點去到該基本數(shù)據(jù)單元的“路徑”。例如在圖3a中,具有值213的路徑301標(biāo)識基本數(shù)據(jù)單元305。
這里所描述的前綴樹結(jié)構(gòu)可能會產(chǎn)生很深的樹(也就是具有許多等級的樹),這是因為樹中的單元名稱的每一個區(qū)分字節(jié)都為前綴樹增加了一級深度。
應(yīng)當(dāng)提到的是,圖3a-3e中的樹數(shù)據(jù)結(jié)構(gòu)是從左向右繪制的。因此當(dāng)我們從圖的左側(cè)向圖的右側(cè)移動時,我們從樹的更高等級移動到樹的較低等級。在給定節(jié)點的下方(也就是說朝向圖3a-3e中的給定節(jié)點的右側(cè)),對于通過來自名稱的區(qū)分字節(jié)的特定值所選擇的任何子代,駐留在該子代下方的各個子樹中的所有單元在單元名稱中的該相應(yīng)字節(jié)中都將具有相同的值。
現(xiàn)在我們將描述一種在給定輸入候選單元的情況下對前綴樹進(jìn)行內(nèi)容關(guān)聯(lián)查找的方法。此方法涉及使用候選單元的名稱對前綴樹結(jié)構(gòu)進(jìn)行導(dǎo)航,隨后進(jìn)行后續(xù)的分析和篩選以便決定作為總體內(nèi)容關(guān)聯(lián)查找的結(jié)構(gòu)將返回什么。換句話說,前綴樹導(dǎo)航處理返回第一結(jié)果,隨后在該結(jié)果上實施分析和篩選以便確定總體內(nèi)容關(guān)聯(lián)查找的結(jié)果。
為了開始前綴樹導(dǎo)航處理,來自候選單元的名稱的最高有效字節(jié)的值將被用來選擇從根節(jié)點到一個后續(xù)節(jié)點的鏈接(由該值表示),所述后續(xù)節(jié)點表示在其名稱的最高有效字節(jié)中具有該相同值的基本數(shù)據(jù)單元的子樹。從該節(jié)點繼續(xù),檢查來自候選單元的名稱的第二字節(jié)并且選擇由該值標(biāo)示的鏈接,從而前進(jìn)到前綴樹中的更深(或更低)一級,并且選擇現(xiàn)在與候選單元共享來自其名稱的至少兩個有效字節(jié)的基本數(shù)據(jù)單元的更小子組。這一處理繼續(xù)到到達(dá)單一基本數(shù)據(jù)單元為止,或者繼續(xù)到?jīng)]有鏈接與來自候選單元的名稱的相應(yīng)字節(jié)的值相匹配為止。在這些條件當(dāng)中的任一條件下,樹導(dǎo)航處理終止。如果到達(dá)單一基本數(shù)據(jù)單元,則可以將其返回以作為前綴樹導(dǎo)航處理的結(jié)果。如果沒有,一種替換方案是報告“錯失(miss)”。另一種替換方案是返回以導(dǎo)航終止的節(jié)點為根部的子樹中的多個基本數(shù)據(jù)單元。
一旦前綴樹導(dǎo)航處理終止,可以使用其他標(biāo)準(zhǔn)或要求對前綴樹導(dǎo)航處理的結(jié)果進(jìn)行分析和篩選,以便確定作為內(nèi)容關(guān)聯(lián)查找的結(jié)果應(yīng)當(dāng)返回什么。舉例來說,當(dāng)由前綴樹導(dǎo)航處理返回單一基本數(shù)據(jù)單元或多個基本數(shù)據(jù)單元時,在有資格作為內(nèi)容關(guān)聯(lián)查找的結(jié)果被返回之前,可以附加地要求其與候選單元的名稱共享特定最小數(shù)目的字節(jié)(否則內(nèi)容關(guān)聯(lián)查找返回錯失)。篩選要求的另一個實例可以是如果前綴樹導(dǎo)航處理在沒有到達(dá)單一基本數(shù)據(jù)單元的情況下終止從而返回多個基本數(shù)據(jù)單元(以前綴樹導(dǎo)航終止的節(jié)點為根部)以作為前綴樹導(dǎo)航處理的結(jié)果,則只有在所述多個基本數(shù)據(jù)單元的數(shù)目少于所規(guī)定的特定限制的情況下,這些單元才將有資格作為總體內(nèi)容關(guān)聯(lián)查找的結(jié)果被返回(否則內(nèi)容關(guān)聯(lián)查找返回錯失)。可以采用多項要求的組合來確定內(nèi)容關(guān)聯(lián)查找的結(jié)果。通過這種方式,查找處理將報告“錯失”或返回單一基本數(shù)據(jù)單元,或者如果不是單一基本數(shù)據(jù)單元,則是可能作為用于導(dǎo)出候選單元的良好起點的基本數(shù)據(jù)單元的集合。
下面描述的圖3b-3e涉及圖3a中示出的樹數(shù)據(jù)結(jié)構(gòu)的變型和修改。雖然這些變型提供了優(yōu)于圖3a中示出的前綴樹數(shù)據(jù)結(jié)構(gòu)的改進(jìn)和優(yōu)點,但是用于對所述數(shù)據(jù)結(jié)構(gòu)進(jìn)行導(dǎo)航的處理類似于前面參照圖3a所描述的處理。也就是說,在對于圖3b-3e中示出的樹數(shù)據(jù)結(jié)構(gòu)的樹導(dǎo)航終止之后,實施后續(xù)分析和篩選以便確定總體內(nèi)容關(guān)聯(lián)查找的結(jié)果,所述總體處理返回錯失、單一基本數(shù)據(jù)單元或者可能作為用于導(dǎo)出候選單元的良好起點的基本數(shù)據(jù)單元的集合。
圖3b示出了可以被用來基于其名稱對基本數(shù)據(jù)單元進(jìn)行組織的另一種數(shù)據(jù)組織系統(tǒng)。在圖3b所示出的實例中,每一個基本數(shù)據(jù)單元具有從該基本數(shù)據(jù)單元的整個內(nèi)容構(gòu)造的獨特名稱,該名稱簡單地由基本數(shù)據(jù)單元的所有字節(jié)構(gòu)成,這些字節(jié)按照其存在于基本數(shù)據(jù)單元中的相同順序出現(xiàn)在名稱中。圖3b示出了一種更加緊湊的結(jié)構(gòu),其中單一鏈接采用來自下方子樹中的基本數(shù)據(jù)單元的名稱的多個字節(jié)(而不是使用在圖3a的前綴樹中的單一字節(jié)),以便產(chǎn)生細(xì)分或下一級的分組。從親代節(jié)點到子代節(jié)點的鏈接現(xiàn)在由多個字節(jié)標(biāo)示。此外,來自任何給定親代節(jié)點的每一個鏈接可以采用不同數(shù)目的字節(jié)以便區(qū)分和標(biāo)識與該鏈接相關(guān)聯(lián)的子樹。例如在圖3b中,從根節(jié)點到節(jié)點308的鏈接通過使用來自名稱的4個字節(jié)(n1n2n3n4=9845)來區(qū)分,從根節(jié)點到節(jié)點309的鏈接則通過使用來自名稱的3個字節(jié)(n1n2n3=347)來區(qū)分。
應(yīng)當(dāng)提到的是,在(使用來自給定候選單元的)樹導(dǎo)航期間,當(dāng)?shù)竭_(dá)樹中的任何親代節(jié)點時,樹導(dǎo)航處理需要確保檢查來自候選單元的名稱的足夠多的字節(jié)以便明確地決定將要選擇哪一個鏈接。為了選擇給定的鏈接,來自候選項的名稱的字節(jié)必須與標(biāo)示去到該特定鏈接的過渡的所有字節(jié)相匹配。同樣地,在這樣的樹中,樹的每一個節(jié)點具有由規(guī)定如何到達(dá)該節(jié)點的字節(jié)序列構(gòu)成的名稱。舉例來說,節(jié)點309的名稱可以是“347”,這是因為其表示一個基本數(shù)據(jù)單元的群組(例如單元311和312),其中所述基本數(shù)據(jù)單元的名稱的3個開頭字節(jié)是“347”。在使用其名稱的開頭3個字節(jié)是347的候選單元對樹進(jìn)行查找時,該數(shù)據(jù)模式導(dǎo)致樹導(dǎo)航處理到達(dá)如圖3b中示出的節(jié)點309。同樣地,在樹中的當(dāng)前單元混合當(dāng)中唯一地標(biāo)識單元的來自該單元的字節(jié)子集是從根節(jié)點去到該基本數(shù)據(jù)單元的“路徑”。例如在圖3b中,字節(jié)序列3475導(dǎo)致基本數(shù)據(jù)單元312,并且在該例中示出的基本數(shù)據(jù)單元混合當(dāng)中唯一地標(biāo)識基本數(shù)據(jù)單元312。
對于多樣并且稀疏的數(shù)據(jù),可以證明圖3b中的樹結(jié)構(gòu)比圖3a的前綴樹結(jié)構(gòu)更加靈活和緊湊。
圖3c示出了可以被用來基于其名稱對基本數(shù)據(jù)單元進(jìn)行組織的另一種數(shù)據(jù)組織系統(tǒng)。在圖3c所示出的實例中,每一個基本數(shù)據(jù)單元具有從該基本數(shù)據(jù)單元的整個內(nèi)容構(gòu)造的獨特名稱,該名稱簡單地由基本數(shù)據(jù)單元的所有字節(jié)構(gòu)成,這些字節(jié)按照其存在于基本數(shù)據(jù)單元中的相同順序出現(xiàn)在名稱中。圖3c示出了(針對圖3b中所描述的組織的)另一種變型,其使得樹更加緊湊,并且(在必要和/或有用時)通過使用規(guī)則表達(dá)法來規(guī)定導(dǎo)致各種鏈接的來自基本數(shù)據(jù)單元名稱的值而對子樹中的單元進(jìn)行分組。通過使用規(guī)則表達(dá)法允許對相同子樹下的在相應(yīng)字節(jié)上共享相同表達(dá)法的單元進(jìn)行高效的分組;隨后可以是對于子樹內(nèi)的不同基本數(shù)據(jù)單元的更加局部的歧義消除。此外,通過使用規(guī)則表達(dá)法允許以更加緊湊的方式來描述把單元映射到任何下方的子樹所需要的字節(jié)的值。這樣進(jìn)一步減少了規(guī)定樹所需要的字節(jié)數(shù)目。舉例來說,規(guī)則表達(dá)法318規(guī)定28個接連的“f”的模式;如果在樹導(dǎo)航期間遵循該鏈接,我們可以到達(dá)包括模式320的單元314,所述模式320具有依照規(guī)則表達(dá)法318的28個接連的“f”。同樣地,到達(dá)單元316的路徑具有使用規(guī)定具有16個接連的“0”的模式的規(guī)則表達(dá)法的鏈接或分支。對于這樣的樹,樹導(dǎo)航處理需要檢測并執(zhí)行這樣的規(guī)則表達(dá)法以便確定將要選擇哪一個鏈接。
圖3d示出了可以被用來基于其名稱對基本數(shù)據(jù)單元進(jìn)行組織的另一種數(shù)據(jù)組織系統(tǒng)。在圖3d所示出的實例中,每一個基本數(shù)據(jù)單元具有從該基本數(shù)據(jù)單元的整個內(nèi)容構(gòu)造的獨特名稱。對每一個單元應(yīng)用指紋處理方法,以便識別包含評估到所選指紋的內(nèi)容的字段的位置。在單元中找到的第一指紋的位置處的字段被作為維度對待,來自該字段的特定數(shù)目的字節(jié)(例如x個字節(jié),其中x顯著小于單元中的字節(jié)數(shù)目)被提取出來并且被用作單元名稱的開頭字節(jié),名稱的其余字節(jié)由基本數(shù)據(jù)單元的其余字節(jié)構(gòu)成,并且按照其存在于基本數(shù)據(jù)單元中的相同循環(huán)順序出現(xiàn)。該名稱被用來對樹中的基本數(shù)據(jù)單元進(jìn)行組織。在該例中,當(dāng)在單元中沒有檢測到指紋時,通過簡單地按照其存在于單元中的順序使用單元的所有字節(jié)而制訂名稱。一個單獨的子樹(通過表明沒有找到指紋的指示標(biāo)示)基于其名稱保持并組織所有這樣的單元。
如圖3d中所示,可以對單元338(其包含t個字節(jié)的數(shù)據(jù),也就是b1b2b3…bt)應(yīng)用指紋處理技術(shù),以便在標(biāo)識將被選擇成“維度1”的字節(jié)bi+1處獲得指紋位置“指紋1”。接下來,可以提取來自由“指紋1”標(biāo)識的位置的x個字節(jié)以形成“維度1”,并且這x個字節(jié)可以被用作圖3d中的每一個單元的名稱的開頭字節(jié)n1n2…nx。隨后串聯(lián)來自單元338的t-x個字節(jié)(從bi+x+1開始并且隨后繞回到b1b2b3…bi)并且將其用作名稱的其余字節(jié)nx+1nx+2…nt。當(dāng)在單元中沒有找到指紋時,名稱n1n2…nt簡單地是來自單元338的b1b2b3…bt。使用其名稱在樹中對基本數(shù)據(jù)單元進(jìn)行分揀和組織。舉例來說,在使用路徑13654…06經(jīng)歷樹的兩個等級之后識別出并且到達(dá)基本數(shù)據(jù)單元(pde)330,其中字節(jié)13654…0是作為來自維度1的字節(jié)的n1n2…nx。從根部沿著鏈接334(通過表明沒有找到指紋的指示標(biāo)示)到達(dá)的節(jié)點335處的單獨子樹保持并組織其內(nèi)容未評估到所選指紋的所有基本數(shù)據(jù)單元。因此,在這種組織中,一些鏈接(例如鏈接336)可以使用由按照與單元中相同的順序出現(xiàn)的單元的字節(jié)構(gòu)成的名稱對單元進(jìn)行組織,其他鏈接(例如鏈接340)則可以使用利用指紋制訂的名稱對單元進(jìn)行組織。
在接收到候選單元時,所述處理應(yīng)用前面描述的相同技術(shù)來確定候選單元的名稱,并且使用該名稱對樹進(jìn)行導(dǎo)航以進(jìn)行內(nèi)容關(guān)聯(lián)查找。因此,對基本數(shù)據(jù)單元(在其被安裝到樹中時)和候選單元(在從解析器和因式分解器接收到候選單元時)應(yīng)用相同并且一直的處理,以便創(chuàng)建其名稱。樹導(dǎo)航處理使用候選單元的名稱對樹進(jìn)行導(dǎo)航。在該實施例中,如果在候選單元中沒有找到指紋,則樹導(dǎo)航處理沿著組織并包含其內(nèi)容未評估到指紋的基本數(shù)據(jù)單元的子樹向下導(dǎo)航。
圖3e示出了可以被用來基于其名稱對基本數(shù)據(jù)單元進(jìn)行組織的另一種數(shù)據(jù)組織系統(tǒng)。在圖3e所示出的實例中,每一個基本數(shù)據(jù)單元具有從該基本數(shù)據(jù)單元的整個內(nèi)容構(gòu)造的獨特名稱。對每一個單元應(yīng)用指紋處理方法,以便識別包含評估到兩個指紋當(dāng)中的任一個的內(nèi)容的字段的位置。單元中的第一指紋(圖3e中的指紋1)的第一次出現(xiàn)位置處的字段被作為第一維度(維度1)對待,第二指紋(圖3e中的指紋2)的第一次出現(xiàn)位置處的字段被作為第二維度(維度2)對待。使用指紋處理尋找單元上的兩個不同指紋導(dǎo)致四種可能的情形:(1)在單元中找到全部兩個指紋,(2)找到指紋1但是沒有找到指紋2,(3)找到指紋2但是沒有找到指紋1,以及(4)沒有找到指紋?;緮?shù)據(jù)單元可以被分組到對應(yīng)于每一種情形的4個子樹中。在圖3e中,“fp1”標(biāo)示指紋1的存在,“fp2”標(biāo)示指紋2的存在,“~fp1”標(biāo)示指紋1的缺失,并且“~fp2”標(biāo)示指紋2的缺失。
對于所述4種情形當(dāng)中的每一種,如下創(chuàng)建單元的名稱:(1)當(dāng)找到全部兩個指紋時,可以提取來自由“指紋1”標(biāo)識的位置的x個字節(jié)以形成“維度1”,并且可以提取來自由“指紋2”標(biāo)識的位置的y個字節(jié)以形成“維度2”,這x+y個字節(jié)可以被用作圖3e中的每一個這樣的單元的名稱的開頭字節(jié)n1n2…nx+y。隨后通過循環(huán)方式提取來自單元348的其余的t-(x+y)個字節(jié)(在來自第一維度的字節(jié)之后開始),并且將其串聯(lián)并且用作名稱的其余字節(jié)nx+y+1nx+y+2…nt。(2)當(dāng)找到指紋1但是沒有找到指紋2時,可以提取來自由“指紋1”標(biāo)識的位置的x個字節(jié)以形成在前維度,并且這x個字節(jié)可以被用作每一個這樣的單元的名稱的開頭字節(jié)n1n2…nx。隨后串聯(lián)來自單元348的其余的t-x個字節(jié)(從bi+x+1開始并且隨后繞回到b1b2b3…bi),并且將其用作名稱的其余字節(jié)nx+1nx+2…nt。(3)當(dāng)找到指紋2但是沒有找到指紋1時,可以提取來自由“指紋2”標(biāo)識的位置的y個字節(jié)以形成在前維度,并且這y個字節(jié)可以被用作每一個這樣的單元的名稱的開頭字節(jié)n1n2…ny。隨后串聯(lián)來自單元348的其余的t-y個字節(jié)(從bj+y+1開始并且隨后繞回到b1b2b3…bj),并且將其用作名稱的其余字節(jié)ny+1ny+2…nt。(4)當(dāng)在單元中沒有找到指紋時,名稱n1n2…nt簡單地是來自單元348的b1b2b3…bt。因此對于這4種情形當(dāng)中的每一種存在單獨的子樹。對于所述四種情形可以如下概括用以提取針對單元348的名稱(n1n2n3…nt)的處理:
(1)指紋1和指紋2都被找到:
n1-nx←bi+1–bi+x=來自維度1的x個字節(jié)
nx+1–nx+y←bj+1–bj+y=來自維度2的y個字節(jié)
nx+y+1…nt=其余的字節(jié)(來自大小為t個字節(jié)的候選單元)=bi+x+1bi+x+2bi+x+3...bjbj+y+1bj+y+2bj+y+3...btb1b2b3...bi
(2)找到指紋1但是沒有找到指紋2:
n1-nx←bi+1–bi+x=來自維度1的x個字節(jié)
nx+1…nt=其余的字節(jié)(來自大小為t個字節(jié)的候選單元)=bi+x+1bi+x+2bi+x+3...btb1b2b3...bi
(3)找到指紋2但是沒有找到指紋1:
n1–ny←bj+1–bj+y=來自維度2的y個字節(jié)
ny+1…nt=其余的字節(jié)(來自大小為t個字節(jié)的候選單元)=bj+y+1bj+y+2bj+y+3...btb1b2b3...bj
(4)沒有找到指紋:
n1-nx←b1–bt
在接收到候選單元時,所述處理應(yīng)用前面描述的相同技術(shù)以確定候選單元的名稱。在該實施例中,對候選單元應(yīng)用前面描述的4種名稱構(gòu)造方法(取決于是否找到指紋1和指紋2),正如在被輸入到濾篩中時對其所應(yīng)用的那樣。因此,對基本數(shù)據(jù)單元(在其被安裝到樹中時)和候選單元(在從解析器和因式分解器接收到候選單元時)應(yīng)用相同并且一致的處理,以便創(chuàng)建其名稱。樹導(dǎo)航處理使用候選單元的名稱對樹進(jìn)行導(dǎo)航以便進(jìn)行內(nèi)容關(guān)聯(lián)查找。
如果內(nèi)容關(guān)聯(lián)查找是成功的,則將產(chǎn)生在特定維度的位置處于候選單元具有相同模式的基本數(shù)據(jù)單元。舉例來說,如果在候選單元中找到全部兩個指紋,則樹導(dǎo)航處理將從根節(jié)點開始沿著樹的鏈接354向下。如果候選單元具有作為“維度1”的模式“99…3”和作為“維度2”的模式“7…5”,則樹導(dǎo)航處理將到達(dá)節(jié)點334。這樣就到達(dá)包含可能是導(dǎo)出目標(biāo)的兩個基本數(shù)據(jù)單元(pde352和pde353)的子樹。實施附加的分析和篩選(通過首先檢查元數(shù)據(jù),并且需要的話通過隨后獲取和檢查實際的基本數(shù)據(jù)單元)以便確定哪一個基本數(shù)據(jù)單元最適合于導(dǎo)出。因此,這里所描述的實施例識別出可以被使用在濾篩中的多種樹結(jié)構(gòu)??梢圆捎眠@樣的結(jié)構(gòu)或者其變型的組合以便對基本數(shù)據(jù)單元進(jìn)行組織。一些實施例通過樹形式來組織基本數(shù)據(jù)單元,其中單元的整個內(nèi)容被用作該單元的名稱。但是各個字節(jié)出現(xiàn)在單元名稱中的序列不一定是所述字節(jié)出現(xiàn)在單元中的序列。單元的特定字段被作為維度提取出來,并且被用來形成名稱的開頭字節(jié),單元的其余字節(jié)構(gòu)成名稱的其余部分。使用這些名稱在濾篩中通過樹形式對單元進(jìn)行排序。名稱的開頭數(shù)位被用來區(qū)分樹的更高分支(或鏈接),其余數(shù)位被用來逐漸地區(qū)分樹的所有分支(或鏈接)。樹的每一個節(jié)點可以具有從該節(jié)點發(fā)出的不同數(shù)目的鏈接。此外,來自一個節(jié)點的每一個鏈接可以通過不同數(shù)目的字節(jié)被區(qū)分和標(biāo)示,并且通過使用規(guī)則表達(dá)法以及用以表達(dá)其規(guī)范的其他有力方式可以實現(xiàn)對于這些字節(jié)的描述。所有這些特征導(dǎo)致緊湊的樹結(jié)構(gòu)。對各個單元基本數(shù)據(jù)單元的引用駐留在樹的葉節(jié)點處。
在一個實施例中,可以對構(gòu)成基本數(shù)據(jù)單元的字節(jié)應(yīng)用指紋處理方法。駐留在通過指紋識別出的位置處的一定數(shù)目的字節(jié)可以被用來構(gòu)成單元名稱的一個分量??梢越M合一個或多個分量以便提供一個維度。多個指紋可以被用來識別多個維度。這些維度被串聯(lián)并且被用作單元名稱的開頭字節(jié),單元的其余字節(jié)構(gòu)成單元名稱的其余部分。由于維度位于通過指紋識別出的位置處,因此提高了從來自每一個單元的一致的內(nèi)容形成名稱的可能性。在通過指紋定位的字段處具有相同內(nèi)容值的單元將沿著樹的相同枝干被分組在一起。通過這種方式,類似的單元將在樹數(shù)據(jù)結(jié)構(gòu)中被分組在一起。通過使用其名稱的替換制訂,可以把沒有在其中找到指紋的單元一起分組在單獨的子樹中。
在一個實施例中,可以對單元的內(nèi)容應(yīng)用指紋處理方法,以便確定單元內(nèi)容內(nèi)的(前面所描述的)骨架數(shù)據(jù)結(jié)構(gòu)的各個分量(或簽名)的位置?;蛘呖梢赃x擇單元內(nèi)容內(nèi)部的特定的固定偏移量以定位分量。還可以采用其他方法來定位單元的骨架數(shù)據(jù)結(jié)構(gòu)的分量,其中包括而不限于對單元進(jìn)行解析以便檢測所聲明的特定結(jié)構(gòu)并且定位該結(jié)構(gòu)內(nèi)的分量。骨架數(shù)據(jù)結(jié)構(gòu)的各個分量可以被視為維度,從而使用這些維度的串聯(lián)以及隨后的每一個單元的其余內(nèi)容來創(chuàng)建每一個單元的名稱。名稱被用來對樹中的基本數(shù)據(jù)單元進(jìn)行排序和組織。
在另一個實施例中,對單元進(jìn)行解析以便檢測單元中的特定結(jié)構(gòu)。該結(jié)構(gòu)中的特定字段被識別成維度。多個這樣的維度被串聯(lián)并且被用作名稱的開頭字節(jié),單元的其余字節(jié)構(gòu)成單元名稱的其余部分。由于維度位于通過對單元進(jìn)行解析并且檢測其結(jié)構(gòu)而識別出的位置處,因此提高了從來自每一個單元的一致的內(nèi)容形成名稱的可能性。在通過所述解析定位的字段處具有相同內(nèi)容值的單元將沿著樹的相同枝干被分組在一起。通過這種方式,同樣地,類似的單元將在樹數(shù)據(jù)結(jié)構(gòu)中被分組在一起。
在一些實施例中,樹數(shù)據(jù)結(jié)構(gòu)中的每一個節(jié)點包括自描述規(guī)范。樹節(jié)點具有一個或多個子代。每一個子代條目包含關(guān)于去到該子代的鏈接上的區(qū)分字節(jié)的信息以及對該子代節(jié)點的引用。子代節(jié)點可以是樹節(jié)點或葉節(jié)點。圖3f給出了根據(jù)這里所描述的一些實施例的自描述樹節(jié)點數(shù)據(jù)結(jié)構(gòu)。圖3f中示出的樹節(jié)點數(shù)據(jù)結(jié)構(gòu)規(guī)定(a)關(guān)于從根節(jié)點到該樹節(jié)點的路徑的信息,包括所有以下分量或者其中的一個子集:用以到達(dá)該樹節(jié)點的來自名稱的實際字節(jié)序列,從根節(jié)點到達(dá)該節(jié)點所消耗的名稱的字節(jié)數(shù)目,關(guān)于所消耗的該字節(jié)數(shù)目是否大于某一預(yù)先規(guī)定的閾值的指示,以及描述去到該節(jié)點的路徑并且對于樹的內(nèi)容關(guān)聯(lián)搜索以及對于涉及樹的構(gòu)造的決定是有用的其他元數(shù)據(jù),(b)該節(jié)點所具有的子代的數(shù)目,以及(c)對于每一個子代(其中每一個子代對應(yīng)于樹的一個分支)規(guī)定(1)子代id,(2)為了沿著樹的該鏈接向下過渡所需要的來自名稱的后繼字節(jié)的區(qū)分字節(jié)的數(shù)目,(3)對于沿著該鏈接向下的來自名稱的字節(jié)的實際值的規(guī)定,以及(4)對該子代節(jié)點的引用。
圖3g給出了根據(jù)這里所描述的一些實施例的自描述葉節(jié)點數(shù)據(jù)結(jié)構(gòu)。葉節(jié)點具有一個或多個子代。每一個子代是去到一個基本數(shù)據(jù)單元的鏈接。每一個子代條目包含關(guān)于去到該基本數(shù)據(jù)單元的鏈接上的區(qū)分字節(jié)的信息,對該基本數(shù)據(jù)單元的引用,重復(fù)和導(dǎo)出項的計數(shù),以及關(guān)于該基本數(shù)據(jù)單元的其他元數(shù)據(jù)。圖3g中示出的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)規(guī)定(a)關(guān)于從根節(jié)點到該葉節(jié)點的路徑的信息,包括所有以下組成部分或者其中的一個子集:用以到達(dá)該葉節(jié)點的來自名稱的實際字節(jié)序列,從根節(jié)點到達(dá)該節(jié)點所消耗的名稱的字節(jié)數(shù)目,關(guān)于所消耗的該字節(jié)數(shù)目是否大于某一預(yù)先規(guī)定的閾值的指示,以及描述去到該節(jié)點的路徑并且對于樹的內(nèi)容關(guān)聯(lián)搜索以及對于涉及樹的構(gòu)造的決定是有用的其他元數(shù)據(jù),(b)該節(jié)點所具有的子代的數(shù)目,以及(c)對于每一個子代(其中每一個子代對應(yīng)于該葉節(jié)點下方的一個基本數(shù)據(jù)單元)規(guī)定(1)子代id,(2)為了沿著樹的該鏈接向下過渡到一個基本數(shù)據(jù)單元所需要的來自名稱的后繼字節(jié)的區(qū)分字節(jié)的數(shù)目,(3)對于沿著該枝干向下的來自名稱的字節(jié)的實際值的規(guī)定,(4)對在樹的該路徑上終止樹的基本數(shù)據(jù)單元的引用,(5)關(guān)于多少重復(fù)和導(dǎo)出項指向該基本數(shù)據(jù)單元的計數(shù)(這被用來確定在刪除存儲系統(tǒng)中的數(shù)據(jù)時是否可以從濾篩中刪除條目),以及(6)包括基本數(shù)據(jù)單元的大小等等的對應(yīng)于基本數(shù)據(jù)單元的其他元數(shù)據(jù)。
為了提高新鮮的基本數(shù)據(jù)單元被安裝到樹中的效率,一些實施例把一個附加的字段合并到被保持在樹的葉節(jié)點處的對應(yīng)于每一個基本數(shù)據(jù)單元的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)中。應(yīng)當(dāng)提到的是,當(dāng)必須把新鮮的單元插入到樹中時,可能需要所討論的子樹中的每一個基本數(shù)據(jù)單元的名稱或內(nèi)容的附加字節(jié)以便決定將把所述新鮮單元插入到子樹中的何處,或者是否觸發(fā)子樹的進(jìn)一步分割。對于這些附加字節(jié)的需求可能需要獲取其中幾個所討論的基本數(shù)據(jù)單元,以便對于這些單元當(dāng)中的每一個提取出關(guān)于所述新鮮單元的相關(guān)區(qū)分字節(jié)。為了減少并且優(yōu)化(并且在某些情況下完全消除)對于這一任務(wù)所需的io的次數(shù),葉節(jié)點中的數(shù)據(jù)結(jié)構(gòu)包括來自該葉節(jié)點下方的每一個基本數(shù)據(jù)單元的名稱的特定數(shù)目的附加字節(jié)。這些附加字節(jié)被稱作導(dǎo)航前瞻字節(jié),并且?guī)椭P(guān)于新鮮的傳入單元對基本數(shù)據(jù)單元進(jìn)行分揀。對應(yīng)于給定的基本數(shù)據(jù)單元的導(dǎo)航前瞻字節(jié)在該基本數(shù)據(jù)單元被安裝到濾篩中時被安裝到葉節(jié)點結(jié)構(gòu)中。可以使用多種標(biāo)準(zhǔn)靜態(tài)地或者動態(tài)地選擇將為此目的保留的字節(jié)數(shù)目,其中包括所涉及的子樹的深度以及該子樹中的基本數(shù)據(jù)單元的密度。例如對于正被安裝在樹的較淺等級的基本數(shù)據(jù)單元,解決方案可以添加比駐留在非常深的樹中的基本數(shù)據(jù)單元更長的導(dǎo)航前瞻字節(jié)。此外,當(dāng)新鮮的單元正被安裝到濾篩中時,并且如果在現(xiàn)有的目標(biāo)子樹中已經(jīng)有許多導(dǎo)航前瞻字節(jié)(從而提高了即將發(fā)生再分割的可能性),則在所述新鮮的基本數(shù)據(jù)單元被安裝到子樹中時可以為之保留附加的導(dǎo)航前瞻字節(jié)。
圖3h給出了包括導(dǎo)航前瞻字段的對應(yīng)于葉節(jié)點的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)規(guī)定(a)關(guān)于從根節(jié)點到該葉節(jié)點的路徑的信息,包括所有以下組成部分或者其中的一個子集:用以到達(dá)該葉節(jié)點的來自名稱的實際字節(jié)序列,從根節(jié)點到達(dá)該節(jié)點所消耗的名稱的字節(jié)數(shù)目,關(guān)于所消耗的該字節(jié)數(shù)目是否大于某一預(yù)先規(guī)定的閾值的指示,以及描述去到該節(jié)點的路徑并且對于樹的內(nèi)容關(guān)聯(lián)搜索以及對于涉及樹的構(gòu)造的決定是有用的其他元數(shù)據(jù),(b)該節(jié)點所具有的子代的數(shù)目,以及(c)對于每一個子代(其中每一個子代對應(yīng)于該葉節(jié)點下方的一個基本數(shù)據(jù)單元)規(guī)定(1)子代id,(2)為了沿著樹的該鏈接向下過渡到一個基本數(shù)據(jù)單元所需要的來自名稱的后繼字節(jié)的區(qū)分字節(jié)的數(shù)目,(3)對于沿著該枝干向下的字節(jié)的實際值的規(guī)定,(4)對在樹的該路徑上終止樹的基本數(shù)據(jù)單元的引用,(5)規(guī)定為所述基本數(shù)據(jù)單元保留多少導(dǎo)航前瞻字節(jié)的導(dǎo)航前瞻字段以及這些字節(jié)的實際值,(6)關(guān)于多少重復(fù)和導(dǎo)出項指向該基本數(shù)據(jù)單元的計數(shù)(這被用來確定在刪除存儲系統(tǒng)中的數(shù)據(jù)時是否可以從濾篩中刪除條目),以及(7)包括基本數(shù)據(jù)單元的大小等等的對應(yīng)于基本數(shù)據(jù)單元的其他元數(shù)據(jù)。
在一些實施例中,樹的各個分支被用來把各個數(shù)據(jù)單元映射到各個群組或范圍中,其中所述群組或范圍是通過對沿著導(dǎo)向作為范圍定界符的子代子樹的鏈接的區(qū)分字節(jié)進(jìn)行解釋而形成的。該子代子樹中的所有單元將使得單元中的相應(yīng)字節(jié)的值小于或等于對于去到所述特定子代子樹的鏈接所規(guī)定的區(qū)分字節(jié)的值。因此,每一個子樹現(xiàn)在將表示其值落在特定范圍內(nèi)的一組單元。在給定的子樹內(nèi),該樹的每一個后續(xù)等級將逐漸地把單元集合劃分成更小的范圍。該實施例為圖3f中示出的自描述樹節(jié)點結(jié)構(gòu)的組成部分提供了不同的解釋。圖3f中的n個子代通過其在樹節(jié)點數(shù)據(jù)結(jié)構(gòu)中的區(qū)分字節(jié)的值被排序,并且表示非重疊范圍的有序序列。對于n個節(jié)點存在n+1個范圍,最低的或第1個范圍由小于或等于最小條目的值構(gòu)成,并且第n+1個范圍由大于第n個條目的值構(gòu)成。第n+1個范圍將被作為超出范圍而對待,因此n個鏈接導(dǎo)向下方的n個子樹或范圍。
例如在圖3f中,子代1定義最低范圍并且使用6個字節(jié)(值為abef12d6743a)來區(qū)分其范圍——對應(yīng)于子代1的范圍是從00000000到abef12d6743a。如果候選單元的相應(yīng)的6個字節(jié)落在該范圍內(nèi)(包括端值),則將選擇對應(yīng)于該子代的鏈接。如果候選單元的相應(yīng)的6個開頭字節(jié)大于范圍定界符abef12d6743a,則子代1將不會被選擇。為了檢查候選單元是否落在對應(yīng)于子代2的范圍內(nèi)必須滿足兩個條件——首先候選必須處于緊接著的前一個子代的范圍之外(在該例中是子代1),其次其名稱中的相應(yīng)字節(jié)必須小于或等于對應(yīng)于子代2的范圍定界符。在該例中,對應(yīng)于子代2的范圍定界符由值為dcfa的2個字節(jié)描述。因此,對應(yīng)于候選單元的2個相應(yīng)字節(jié)必須小于或等于dcfa。使用這種方法,可以對候選單元和樹節(jié)點中的所有子代進(jìn)行檢查,以便檢查候選單元落在所述n+1個范圍當(dāng)中的哪一個范圍內(nèi)。對于圖3f中示出的實例,如果候選單元的名稱的4個相應(yīng)字節(jié)大于對應(yīng)于子代n的鏈接的區(qū)分字節(jié)的值f3231929,則將檢測到錯失狀況。
可以對樹導(dǎo)航處理進(jìn)行修改以便容納這一新的范圍節(jié)點。在到達(dá)范圍節(jié)點時,為了選擇從該節(jié)點發(fā)出的給定鏈接,來自候選的名稱的字節(jié)必須落在對于該特定鏈接所定義的范圍內(nèi)。如果來自候選的名稱的字節(jié)的值大于所有鏈接中的相應(yīng)字節(jié)的值,則候選單元落在下方子樹所跨越的所有范圍之外——在這種情況下(其被稱作“超出范圍狀況”)檢測到錯失狀況,并且樹導(dǎo)航處理終止。如果候選單元的名稱的開頭字節(jié)落在由沿著導(dǎo)向子代子樹的鏈接的相應(yīng)的區(qū)分字節(jié)所確定的范圍之內(nèi),樹導(dǎo)航繼續(xù)到下方的該子樹。除非由于“超出范圍狀況”而終止,否則樹導(dǎo)航可以逐漸地沿著樹繼續(xù)下到更深處,直到其到達(dá)葉節(jié)點數(shù)據(jù)結(jié)構(gòu)為止。
這種范圍節(jié)點可以結(jié)合在圖3a-3e中描述的前綴樹節(jié)點被采用在樹結(jié)構(gòu)中。在一些實施例中,樹結(jié)構(gòu)的特定數(shù)目的等級的上方節(jié)點可以是前綴樹節(jié)點,其中樹遍歷是基于候選單元的名稱的開頭字節(jié)與沿著樹的鏈接的相應(yīng)字節(jié)之間的精確匹配。后續(xù)節(jié)點可以是具有通過候選的名稱的相應(yīng)字節(jié)落在其中的范圍所決定的樹遍歷的范圍節(jié)點。當(dāng)樹導(dǎo)航處理終止時,正如在本文獻(xiàn)中早前所描述的那樣,多種標(biāo)準(zhǔn)可以被用來決定作為總體內(nèi)容關(guān)聯(lián)查找側(cè)結(jié)果將返回什么。
前面對用于表示和使用樹節(jié)點和葉節(jié)點的方法和裝置的描述僅僅是出于說明和描述的目的而給出的。其并不意圖作出窮舉或者把本發(fā)明限制到所公開的形式。因此,本領(lǐng)域技術(shù)人員將認(rèn)識到許多修改和變型。
在給出候選單元以作為輸入時,可以對前面描述的樹節(jié)點和葉節(jié)點結(jié)構(gòu)進(jìn)行遍歷,并且可以基于候選單元的內(nèi)容對樹實施內(nèi)容關(guān)聯(lián)查找。將從候選單元的字節(jié)構(gòu)造候選單元的名稱,正如基本數(shù)據(jù)單元的名稱是當(dāng)基本數(shù)據(jù)單元被安裝在濾篩中時從其內(nèi)容構(gòu)造的。在給定輸入候選單元的情況下,對樹進(jìn)行內(nèi)容關(guān)聯(lián)查找的方法涉及使用候選單元的名稱對樹結(jié)構(gòu)進(jìn)行導(dǎo)航,隨后進(jìn)行分析和篩選以便決定作為總體內(nèi)容關(guān)聯(lián)查找的結(jié)果將返回什么。換句話說,樹導(dǎo)航處理返回第一輸出結(jié)果,隨后在該結(jié)果上實施分析和篩選,以便確定總體內(nèi)容關(guān)聯(lián)查找的結(jié)果。
如果存在具有與候選相同的名稱開頭字節(jié)(或者落在相同范圍內(nèi)的字節(jié))的任何基本數(shù)據(jù)單元,樹將通過由鏈接標(biāo)示的單元子樹的形式來標(biāo)識基本數(shù)據(jù)單元的該子集。一般來說,每一個樹節(jié)點或葉節(jié)點可以存儲允許樹導(dǎo)航處理決定將選擇哪一個外出鏈接(如果存在的話)以便導(dǎo)航到樹中的下一個更低等級的信息,這是基于輸入單元的名稱的相應(yīng)字節(jié)以及在沿著所選鏈接對樹進(jìn)行導(dǎo)航時所到達(dá)的節(jié)點的身份。如果每一個節(jié)點都包含該信息,則樹導(dǎo)航處理可以通過遞歸方式向下導(dǎo)航樹中的每一個等級,直到?jīng)]有找到匹配(此時樹導(dǎo)航處理可以返回存在于以當(dāng)前節(jié)點為根部的子樹中的一個基本數(shù)據(jù)單元集合)或者到達(dá)一個基本數(shù)據(jù)單元(此時樹導(dǎo)航處理可以返回該基本數(shù)據(jù)單元以及任何相關(guān)聯(lián)的元數(shù)據(jù))為止。
一旦樹導(dǎo)航處理終止,可以使用其他標(biāo)準(zhǔn)和要求對樹導(dǎo)航處理的結(jié)果進(jìn)行分析和篩選,以便確定作為總體內(nèi)容關(guān)聯(lián)查找的結(jié)果應(yīng)當(dāng)返回什么。首先,可以挑選在其名稱中具有最多數(shù)目的與候選相同的開頭字節(jié)的基本數(shù)據(jù)單元。其次,當(dāng)由樹導(dǎo)航處理返回單一基本數(shù)據(jù)單元或多個基本數(shù)據(jù)單元時,在有資格作為內(nèi)容關(guān)聯(lián)查找的結(jié)果被返回之前,可以附加地要求其與候選單元的名稱共享特定的最少數(shù)目的字節(jié)(否則內(nèi)容關(guān)聯(lián)查找返回錯失)。篩選要求的另一個實例可以是,如果樹導(dǎo)航處理在沒有到達(dá)單一基本數(shù)據(jù)單元的情況下終止并且從而作為樹導(dǎo)航處理的結(jié)果返回多個基本數(shù)據(jù)單元(以樹導(dǎo)航終止的節(jié)點為根部),則只有在這些單元的數(shù)目小于所規(guī)定的特定限制(比如4-16個單元)的情況下,所述多個基本數(shù)據(jù)單元才將有資格作為總體內(nèi)容關(guān)聯(lián)查找的結(jié)果被返回(否則內(nèi)容關(guān)聯(lián)查找返回錯失)??梢圆捎枚囗椧蟮慕M合來確定內(nèi)容關(guān)聯(lián)查找的結(jié)果。如果仍有多個候選,則可以檢查導(dǎo)航前瞻字節(jié)并且還有相關(guān)聯(lián)的元數(shù)據(jù),以便決定哪些基本數(shù)據(jù)單元是最適當(dāng)?shù)摹H绻匀粺o法把選擇收窄到單一基本數(shù)據(jù)單元,則可以把多個基本數(shù)據(jù)單元提供到導(dǎo)出功能。通過這種方式,查找處理將報告“錯失”或返回單一基本數(shù)據(jù)單元,或者如果不是單一基本數(shù)據(jù)單元,則是可能作為用于導(dǎo)出候選單元的良好起點的基本數(shù)據(jù)單元的集合。
樹需要被設(shè)計成用于高效的內(nèi)容關(guān)聯(lián)存取。具有良好平衡的樹對于大部分?jǐn)?shù)據(jù)將提供可比的存取深度。預(yù)期樹的幾個上方等級將常常駐留在處理器高速緩存中,接下來的幾個等級駐留在快速存儲器中,并且后續(xù)等級駐留在閃存存儲裝置中。對于非常大的數(shù)據(jù)集,可能有一個或多個等級需要駐留在閃存存儲裝置或者甚至是盤中。
圖4示出了根據(jù)這里所描述的一些實施例的如何可以把256tb的基本數(shù)據(jù)組織成樹形式的一個實例,并且呈現(xiàn)出如何可以把樹布置在存儲器和存儲裝置中。假設(shè)每個節(jié)點平均展開64(26)個子代,則可以通過到達(dá)(平均)駐留在樹的第6級(也就是說在5次鏈接遍歷或跳躍之后)的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)(例如在圖3h中描述)而存取對某一基本數(shù)據(jù)單元的引用。因此,在5次跳躍之后,樹的第6級處的此類結(jié)構(gòu)將與另外的230個此類節(jié)點并列駐留,每一個節(jié)點平均具有64個子代(這些子代是對基本數(shù)據(jù)單元的引用),從而容納近似640億個基本數(shù)據(jù)單元。在4kb的單元大小下,這樣就容納256tb個基本數(shù)據(jù)單元。
樹可以被布置成使得可以如下遍歷樹的6個等級:3個等級駐留在芯片上高速緩存中(其中包含規(guī)定對應(yīng)于去到近似256k個節(jié)點的鏈接的過渡的近似四千個“上方等級”樹節(jié)點數(shù)據(jù)結(jié)構(gòu)),存儲器中的2個等級(其中包含規(guī)定對應(yīng)于去到近似10億個葉節(jié)點的鏈接的過渡的1600萬個“中間等級”樹節(jié)點數(shù)據(jù)結(jié)構(gòu)),以及閃存存儲裝置中的第6級(容納10億個葉節(jié)點數(shù)據(jù)結(jié)構(gòu))。駐留在閃存存儲裝置中的樹的該第6級的10億個葉節(jié)點數(shù)據(jù)結(jié)構(gòu)提供對640億個基本數(shù)據(jù)單元的引用(每個葉節(jié)點平均64個單元)。
在圖4所示的實例中,在第4和第5級,每一個節(jié)點對于每個單元專用平均16個字節(jié)(對應(yīng)于子代id的1個字節(jié),例如對pde的6字節(jié)引用,加上用于字節(jié)計數(shù)的一個字節(jié),加上用以規(guī)定實際過渡字節(jié)以及一些元數(shù)據(jù)的平均8個字節(jié))。在第6級,每一個葉節(jié)點對于每個單元專用平均48個字節(jié)(對應(yīng)于子代id的1個字節(jié),用于字節(jié)計數(shù)的1個字節(jié),用以規(guī)定實際過渡字節(jié)的8個字節(jié),對基本數(shù)據(jù)單元的6字節(jié)引用,用于來自該基本數(shù)據(jù)單元的導(dǎo)出項計數(shù)的1個字節(jié),16個字節(jié)的導(dǎo)航前瞻,對應(yīng)于基本數(shù)據(jù)單元的大小的2個字節(jié),以及13個字節(jié)的其他元數(shù)據(jù)),因此對于樹所需的閃存存儲裝置中的總?cè)萘?包括對基本數(shù)據(jù)單元的引用并且包括任何元數(shù)據(jù))是大約3個太字節(jié)。對于樹的上方節(jié)點所需的總?cè)萘渴沁@一大小的一小部分(這是因為節(jié)點更少,規(guī)定對子代節(jié)點的更嚴(yán)格的引用所需的字節(jié)更少,并且每個節(jié)點所需的元數(shù)據(jù)更少)。在該例中,上方樹節(jié)點對于每個單元專用平均8個字節(jié)(對應(yīng)于子代id的1個字節(jié),用于字節(jié)計數(shù)的1個字節(jié),加上用以規(guī)定實際過渡字節(jié)的平均3-4個字節(jié),以及對子代節(jié)點的2-3字節(jié)引用)。在該例中,總體上使用3tb(或者256tb的1.17%)的附加裝置把具有256tb的基本數(shù)據(jù)的合成數(shù)據(jù)集分揀到10億個群組中。
在圖4所示出的實例中,256tb的基本數(shù)據(jù)包含640億個4kb基本數(shù)據(jù)單元,為了完全區(qū)分所述640億個基本數(shù)據(jù)單元需要少于5字節(jié)(或36比特)的地址。從內(nèi)容關(guān)聯(lián)角度來看,如果數(shù)據(jù)的混合使得在前3個等級當(dāng)中的每一個等級處消耗平均4字節(jié)的漸進(jìn)式名稱,并且在接下來的3個等級當(dāng)中的每一個等級處消耗8個字節(jié),從而總共(平均)36字節(jié)(288比特)的名稱將區(qū)分所有640億個基本數(shù)據(jù)單元。這36個字節(jié)將少于構(gòu)成每一個單元的4kb的1%。如果可以通過其字節(jié)的1%(或者甚至5-10%)來標(biāo)識4kb的基本數(shù)據(jù)單元,則(構(gòu)成大部分字節(jié)的)其余字節(jié)可以容許微擾,并且具有此類微擾的候選仍然可以到達(dá)該基本數(shù)據(jù)單元并且可以考慮從該基本數(shù)據(jù)單元導(dǎo)出。
應(yīng)當(dāng)提到的是,(為了區(qū)分下方的各個子樹)在任何給定的鏈接上所需的字節(jié)數(shù)目將由構(gòu)成數(shù)據(jù)集的單元混合中的實際數(shù)據(jù)決定。同樣地,從給定節(jié)點發(fā)出的鏈接數(shù)目也將隨著數(shù)據(jù)而改變。自描述樹節(jié)點和葉節(jié)點數(shù)據(jù)結(jié)構(gòu)將生命對于每一個鏈接所需的字節(jié)的實際數(shù)目和值,以及從任何節(jié)點發(fā)出的鏈接的數(shù)目。
可以施加進(jìn)一步的控制以便限制在樹的各個等級處專用的高速緩存、存儲器和存儲裝置的數(shù)量,以便在增量存儲的已分配預(yù)算內(nèi)把輸入分揀到盡可能多的已區(qū)分群組中。為了應(yīng)對其中存在需要非常深的子樹來完全區(qū)分單元的數(shù)據(jù)密度和口袋(pocket)的情況,可以通過以下步驟高效地應(yīng)對這樣的密度:把相關(guān)單元的更大集合分組到樹的特定深度(例如第6級)處的平坦群組中,并且在其上實施流線式搜索和導(dǎo)出(這是通過首先檢查導(dǎo)航前瞻和元數(shù)據(jù)以確定最佳基本數(shù)據(jù)單元,或者(作為回退)對于其余的數(shù)據(jù)僅僅尋找重復(fù)而不是由所述方法提供的完全導(dǎo)出)。這樣將避免產(chǎn)生非常深的樹。另一種替換方案是允許(具有許多等級的)很深的樹,只要這些等級能夠容納在可用的存儲器中。當(dāng)更深的等級溢出到閃存或盤時,可以采取一些步驟以使得樹從該等級往后變平坦,從而最小化原本將由于針對存儲在閃存或盤中的更深等級的樹節(jié)點的多次相繼存取而招致的等待時間。
預(yù)期來自單元名稱的全部字節(jié)當(dāng)中的相對較小的一部分將常常足以標(biāo)識每一個基本數(shù)據(jù)單元。使用這里所描述的實施例在多種真實世界數(shù)據(jù)集上實施的研究證實,基本數(shù)據(jù)單元的一個較小的字節(jié)子集可以用來對大部分單元進(jìn)行排序從而允許所述解決方案。因此,這樣的解決方案在對于其操作所需的存儲的數(shù)量方面是高效的。
在對于來自圖4的實例所需的存取方面,對于每一個傳入的4kb輸入組塊(或候選單元),所述方法將需要實施一次以下存取以便對樹結(jié)構(gòu)進(jìn)行查詢并且到達(dá)葉節(jié)點:三個高速緩存引用、兩個存儲器引用(或者可能有多個存儲器引用)加上來自閃存存儲裝置的單一io,以便對葉節(jié)點數(shù)據(jù)結(jié)構(gòu)進(jìn)行存取。來自存儲裝置的該單一io將獲取一個4kb頁面,其將保有對應(yīng)于一組近似64個單元的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)的信息,從而將包括專用于所討論的基本數(shù)據(jù)單元的48個字節(jié)。這48個字節(jié)將包括關(guān)于所討論的基本數(shù)據(jù)單元的元數(shù)據(jù)。這將結(jié)束樹查找處理。隨后所需要的io的次數(shù)將取決于候選單元結(jié)果是重復(fù)、導(dǎo)出項還是將被安裝在濾篩中的新鮮基本數(shù)據(jù)單元。
作為某一基本數(shù)據(jù)單元的重復(fù)的候選單元將需要1次io來獲取該基本數(shù)據(jù)單元,以便驗證重復(fù)。一旦驗證了重復(fù),將再需要一次io以更新樹中的元數(shù)據(jù)。因此,重復(fù)單元的攝取在樹查找之后將需要兩次io,從而一共是3次io。
沒有通過樹查找并且既不是重復(fù)也不是導(dǎo)出項的候選單元需要另外的1次io以把該單元作為新的基本數(shù)據(jù)單元存儲在濾篩中,并且需要另一次io以更新樹中的元數(shù)據(jù)。因此,沒有通過樹查找的候選單元的攝取在樹查找之后將需要2次io,從而導(dǎo)致一共3次io。但是對于其中樹查找處理在不需要存儲io的情況下終止的候選單元,對于攝取這樣的候選單元一共只需要2次io。
作為導(dǎo)出項(而非重復(fù))的候選單元將首先需要1次io以獲取計算導(dǎo)出所需的基本數(shù)據(jù)單元。由于預(yù)期最經(jīng)常的導(dǎo)出將是源自單一基本數(shù)據(jù)單元(而不是多個基本數(shù)據(jù)單元),因此對于獲取該基本數(shù)據(jù)單元將只需要單一io。在成功完成導(dǎo)出之后,將再需要1次io以把重建程序和導(dǎo)出細(xì)節(jié)存儲在為該單元在存儲裝置中創(chuàng)建的條目中,并且需要另一次io以更新樹中的元數(shù)據(jù)(比如計數(shù)等等)以便反映出新的導(dǎo)出項。因此,變成導(dǎo)出項的候選單元的攝取在第一樹查找之后需要3次附加的io,從而一共是4次io。
總而言之,為了攝取候選單元并且對其應(yīng)用datadistillationtm方法(同時在非常大的數(shù)據(jù)集上全局利用冗余)需要大致3到4次io。與傳統(tǒng)的數(shù)據(jù)去重復(fù)技術(shù)所需要的情況相比,對于每個候選單元通常只有另外的一次io,其回報是能夠以比所述單元本身更細(xì)的粒度在數(shù)據(jù)集上全局地利用冗余。
給出250000次隨機io存取/秒(這意味著對于4kb頁面的1gb/秒的隨機存取帶寬)的存儲系統(tǒng)每秒可以攝取大約62500(250000除以平均大小分別為4kb的每個輸入組塊4次io)個輸入組塊并且對其實施datadistillationtm方法。這在用盡存儲系統(tǒng)的所有帶寬的情況下允許250mb/秒的攝取速率。如果僅使用存儲系統(tǒng)的一半帶寬(從而使得另一半可用于對所存儲的數(shù)據(jù)進(jìn)行存取),這樣的datadistillationtm系統(tǒng)仍然可以給出125mb/秒的攝取速率。因此,在給定足夠處理能力的情況下,datadistillationtm系統(tǒng)能夠以經(jīng)濟的io(在比所述單元本身更細(xì)的粒度上)在數(shù)據(jù)集上全局地利用冗余,并且在當(dāng)代存儲系統(tǒng)上以每秒數(shù)百兆字節(jié)的攝取速率給出數(shù)據(jù)簡化。
因此,正如測試結(jié)果所證實的那樣,這里所描述的實施例實現(xiàn)了以經(jīng)濟的io存取并且利用對于裝置所需的最小增量存儲從大容量數(shù)據(jù)存儲庫搜索單元(從中可以導(dǎo)出輸入單元并且只利用規(guī)定所述導(dǎo)出所需的最小存儲)的復(fù)雜任務(wù)。如此構(gòu)造的這一框架使得使用全部單元字節(jié)的更小百分比找到適合于導(dǎo)出的單元成為可行,從而留下大部分字節(jié)可用于微擾和導(dǎo)出。解釋這一方案為何對于大部分?jǐn)?shù)據(jù)能夠有效工作的一項重要洞察在于,樹提供了易于使用的細(xì)粒度結(jié)構(gòu),從而允許定位在濾篩中標(biāo)識單元的區(qū)分和區(qū)別字節(jié),并且盡管這些字節(jié)分別處于數(shù)據(jù)中的不同深度和位置,在樹結(jié)構(gòu)中可以高效地對其進(jìn)行隔離和存儲。
圖5a-5c示出了關(guān)于如何可以使用這里所描述的實施例組織數(shù)據(jù)的一個實際的實例。圖5a示出了512字節(jié)的輸入數(shù)據(jù)以及因式分解的結(jié)果(例如實施圖2中的操作202的結(jié)果)。在該例中應(yīng)用指紋處理以確定數(shù)據(jù)中的中斷,從而使得接連的中斷標(biāo)識候選單元。使用粗體和常規(guī)字體示出了交替的候選單元。舉例來說,第一候選單元是“b8ac83d9dc7caf18f2f2e3f783a0ec69774bb50bbe1d3ef1ef8a82436ec43283bc1c0f6a82e19c224b22f9b2”,下一個候選單元是“ac83d9619ae5571ad2bbcc15d3e493eef62054b05b2dbccce933483a6d3daab3cb19567dedbe33e952a966c49f3297191cf22aa31b98b9dcd0fb54a7f761415e”,后面以此類推。如圖所示,圖5a中的輸入被因式分解成12個可變大小候選單元。每一個組塊的開頭字節(jié)被用來在濾篩中對單元進(jìn)行排序和組織。圖5b示出了如何可以使用其名稱并且使用圖3b中所描述的樹結(jié)構(gòu)按照樹形式把圖5a中示出的12個候選單元組織成濾篩中的基本數(shù)據(jù)單元。每一個單元具有從該單元的整個內(nèi)容構(gòu)造的獨特名稱。在該例中,由于應(yīng)用了指紋處理以確定12個候選單元之間的中斷,因此每一個候選單元的開頭字節(jié)將已經(jīng)被對準(zhǔn)到錨指紋:因此,每一個名稱的開頭字節(jié)將已經(jīng)是從錨定在該指紋處的內(nèi)容的第一維度構(gòu)造的。名稱的開頭字節(jié)組織各個單元。舉例來說,如果單元名稱中的第一字節(jié)等于“0x22”,則取得頂部鏈接以選擇基本數(shù)據(jù)單元#1。應(yīng)當(dāng)提到的是,使用不同數(shù)目的字節(jié)對圖5b中的各個鏈接進(jìn)行區(qū)分,正如參照圖3b中示出的樹數(shù)據(jù)結(jié)構(gòu)所解釋的那樣。
圖5c示出了如何可以使用參照圖3d描述的樹數(shù)據(jù)結(jié)構(gòu)對圖5a中示出的12個候選單元進(jìn)行組織。進(jìn)一步對每一個單元的內(nèi)容應(yīng)用指紋處理,以便識別單元內(nèi)容內(nèi)的第二指紋。把從第一指紋(其已經(jīng)存在于每一個單元的邊界處)的位置處提取出的內(nèi)容字節(jié)與第二指紋串聯(lián),從而形成被用來對單元進(jìn)行組織的名稱的開頭字節(jié)。換句話說,單元名稱被如下構(gòu)造:來自(分別通過錨指紋和第二指紋定位的)兩個維度或字段的數(shù)據(jù)字節(jié)被串聯(lián)形成名稱的開頭字節(jié),隨后是其余的字節(jié)。作為針對名稱構(gòu)造的這一選擇的結(jié)果,(相比于圖5b)不同的字節(jié)序列導(dǎo)向圖5c中的各個基本數(shù)據(jù)單元。例如為了到達(dá)基本數(shù)據(jù)單元#4,樹導(dǎo)航處理首先取得對應(yīng)于作為第一維度(即第一指紋)處的字段的開頭字節(jié)的“46093f9d”的鏈接,并且隨后取得對應(yīng)于作為位于第二維度(即第二指紋)處的字段的開頭字節(jié)的“c4”的鏈接。
圖6a-6c分別示出了根據(jù)這里所描述的一些實施例如何可以把樹數(shù)據(jù)結(jié)構(gòu)用于參照圖1a-1c描述的內(nèi)容關(guān)聯(lián)映射器121和122。
一旦解決了找到(從中嘗試導(dǎo)出候選單元的)適當(dāng)?shù)幕緮?shù)據(jù)單元的困難問題,所述問題就被收窄到檢查一個基本數(shù)據(jù)單元或者基本數(shù)據(jù)單元的較小子集并且從中最優(yōu)地導(dǎo)出候選單元,其中只利用規(guī)定所述導(dǎo)出所需的最小存儲。其他目標(biāo)包括把對于存儲系統(tǒng)的存取次數(shù)保持到最低程度,并且把導(dǎo)出時間和重建時間保持到可以接受。
導(dǎo)出器必須把候選單元表達(dá)成在一個或多個基本數(shù)據(jù)單元上實施的變換的結(jié)果,并且必須把這些變換規(guī)定成將被用來在取回數(shù)據(jù)時重新生成導(dǎo)出項的重建程序。每一項導(dǎo)出可能需要構(gòu)造其自身所獨有的程序。導(dǎo)出器的功能是識別這些變換,并且創(chuàng)建具有最小足跡的重建程序??梢圆捎枚喾N變換,其中包括在一個或多個基本數(shù)據(jù)單元上或者在每一個單元的特定字段上實施的算術(shù)、代數(shù)或邏輯運算。此外還可以使用字節(jié)操縱變換,比如串聯(lián)、插入、替換和刪除一個或多個基本數(shù)據(jù)單元中的字節(jié)。
圖7a提供了根據(jù)這里所描述的一些實施例的可以在重建程序中規(guī)定的變換的一個實例。在該例中規(guī)程的變換的詞匯表包括在單元中的規(guī)定長度的字段上實施的算術(shù)運算,以及在基本數(shù)據(jù)單元中的規(guī)定偏移量處插入、刪除、附加和替換所聲明的長度的字節(jié)。導(dǎo)出器可以采用多種技術(shù)和操作來檢測候選單元與一個或多個基本數(shù)據(jù)單元之間的相似性和差異并且用來構(gòu)造重建程序。導(dǎo)出器可以利用在底層硬件中可用的詞匯表來實施其功能。所述工作的最終結(jié)果是在對于重建程序所規(guī)定的詞匯表中規(guī)定變換,并且在這樣做時使用最小數(shù)量的增量存儲并且采取還允許快速數(shù)據(jù)取回的方式。
導(dǎo)出器可以利用底層機器的處理能力并且在為之分配的處理預(yù)算內(nèi)工作,以便在系統(tǒng)的成本-性能約束內(nèi)提供盡可能最佳的性能。鑒于微處理器核心更容易獲得,并且鑒于針對存儲裝置的io存取較為昂貴,因此datadistillationtm解決方案被設(shè)計成利用當(dāng)代微處理器的處理能力,以便高效地實施本地分析以及從少數(shù)幾個基本數(shù)據(jù)單元導(dǎo)出候選單元的內(nèi)容。預(yù)期datadistillationtm解決方案(在非常大的數(shù)據(jù)上)的性能將不受計算處理的速率限制(rate-limited),而是受到典型存儲系統(tǒng)的io帶寬的速率限制。舉例來說,預(yù)期幾個微處理器核心就將足以實施所需的計算和分析,從而在支持250000次io/秒的典型的基于閃存的存儲系統(tǒng)上支持每秒幾百兆字節(jié)的攝取速率。應(yīng)當(dāng)提到的是,來自當(dāng)代微處理器,比如intelxeon處理器e5-2687w(10核,3.1ghz,25mb高速緩存)的兩個這樣的微處理器核心是可以從處理器獲得的全部計算能力的一部分(十分之二)。
圖7b示出了根據(jù)這里所描述的一些實施例的從基本數(shù)據(jù)單元導(dǎo)出候選單元的結(jié)果的實例。具體來說,數(shù)據(jù)模式“elem”是存儲在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元,并且數(shù)據(jù)模式“cand”是將從基本數(shù)據(jù)單元導(dǎo)出的候選單元。已經(jīng)突出顯示出“cand”與“elem”之間的18個共同的字節(jié)。重建程序702規(guī)定如何可以從數(shù)據(jù)模式“elem”導(dǎo)出數(shù)據(jù)模式“cand”。如圖7b中所示,重建程序702示出了如何從“elem”導(dǎo)出“cand”,這是通過使用1字節(jié)替換、6字節(jié)插入、3字節(jié)刪除、7字節(jié)批量替換。用以規(guī)定導(dǎo)出項的成本是20字節(jié)+3字節(jié)引用=23字節(jié),從而是原始大小的65.71%。應(yīng)當(dāng)提到的是,所示出的重建程序702是所述程序的人類可讀表示,并且可能不是所述程序被這里所描述的實施例實際存儲的方式。同樣地,在圖7b中還示出了基于算術(shù)運算(比如乘法和加法)的其他重建程序。舉例來說,如果“elem”是bc1c0f6a790c82e19c224b22f900ac83d9619ae5571ad2bbec152054ffffff83并且“cand”是bc1c0f6a790c82e19c224b22f91c4da1aa0369a0461ad2bbec152054ffffff83,則如圖所示可以使用乘法(00ac83d9619ae557)*2a=[00]1c4da1aa0369a046導(dǎo)出8字節(jié)差異。用以規(guī)定導(dǎo)出項的成本是4字節(jié)+3字節(jié)引用=7字節(jié),從而是原始大小的20.00%。或者如果“elem”是bc1c0f6a790c82e19c224b22f9b2ac83ffffffffffffffffffffffffffffb283并且“cand”是bc1c0f6a790c82e19c224b22f9b2ac8300000000000000000000000000002426,則如圖所示可以使用加法導(dǎo)出16字節(jié)差異,例如通過把0x71a3加到開始于偏移量16的16字節(jié)區(qū)段并且丟棄進(jìn)位。用以規(guī)定導(dǎo)出項的成本是5字節(jié)+3字節(jié)引用=8字節(jié),從而是原始大小的22.85%。應(yīng)當(dāng)提到的是,圖7a中的范例編碼僅僅是出于說明的目的而選擇的。圖7b中的實例具有32字節(jié)的數(shù)據(jù)大小,因此對于單元內(nèi)的長度和偏移量字段有5比特就足夠了。對于較大的單元(例如4kb單元),這些字段的大小將需要被增加到12比特。同樣地,所述范例編碼容許3字節(jié)或24比特的引用大小。這應(yīng)當(dāng)允許引用1600萬個基本數(shù)據(jù)單元。如果引用需要能夠?qū)?56tb的數(shù)據(jù)中的任何位置進(jìn)行尋址,則引用的大小將需要是6個字節(jié)。當(dāng)這樣的數(shù)據(jù)集被因式分解成4kb單元時,規(guī)定引用所需要的6個字節(jié)將是4kb單元的大小的一小部分。
規(guī)定(從一個或多個基本數(shù)據(jù)單元導(dǎo)出的)導(dǎo)出單元所需的信息的大小是重建程序的大小與規(guī)定所需的(一個或多個)基本數(shù)據(jù)單元所需的引用大小之和。把候選單元規(guī)定為導(dǎo)出單元所需的信息的大小被稱作候選與基本數(shù)據(jù)單元的距離。當(dāng)可以從多個基本數(shù)據(jù)單元集合當(dāng)中的任一個集合可行地導(dǎo)出候選時,則把具有最短距離的基本數(shù)據(jù)單元集合選擇成目標(biāo)。
當(dāng)需要從多于一個基本數(shù)據(jù)單元導(dǎo)出候選單元時(通過組裝從這些基本數(shù)據(jù)單元當(dāng)中的每一個基本數(shù)據(jù)單元導(dǎo)出的提取項),導(dǎo)出器需要考慮到針對存儲系統(tǒng)的附加存取的成本,并且將該成本與更小的重建程序和更小的距離的益處進(jìn)行權(quán)衡。一旦對于候選創(chuàng)建了最優(yōu)的重建程序,將其距離與距離閾值進(jìn)行比較;如果沒有超出閾值,則接受導(dǎo)出。一旦接受導(dǎo)出,就把候選單元改訂為導(dǎo)出單元,并且由基本數(shù)據(jù)單元于重建程序的組合替換。為候選單元創(chuàng)建的蒸餾數(shù)據(jù)中的條目被重建程序加上對相關(guān)基本數(shù)據(jù)單元的一項或多項引用替換。如果對應(yīng)于最佳導(dǎo)出的距離超出距離閾值,則導(dǎo)出項將不被接受。
為了產(chǎn)生數(shù)據(jù)簡化,所述距離閾值必須總是小于候選單元的大小。舉例來說,距離閾值可以被設(shè)定到候選單元大小的50%,從而使得只有在導(dǎo)出項的足跡小于或等于候選單元足跡的一半時才接收導(dǎo)出項,從而對于為之存在適當(dāng)導(dǎo)出的每一個候選單元確保2x或更大的簡化。距離閾值可以是預(yù)定的百分比或分?jǐn)?shù),其或者是基于用戶規(guī)定的輸入或者是由系統(tǒng)選擇。距離閾值可以由系統(tǒng)基于系統(tǒng)的靜態(tài)或動態(tài)參數(shù)確定。
圖8a-8e示出了根據(jù)這里所描述的一些實施例如何通過把輸入數(shù)據(jù)因式分解成固定大小單元并且把所述單元組織在參照圖3d和3e描述的樹數(shù)據(jù)結(jié)構(gòu)中而實施數(shù)據(jù)簡化。圖8a示出了如何可以把輸入數(shù)據(jù)簡單地因式分解成32字節(jié)組塊。具體來說,圖8a示出了前10個組塊,并且隨后示出了例如出現(xiàn)在4200萬個組塊之后的另外幾個組塊。圖8b示出了使用名稱把基本數(shù)據(jù)單元組織在濾篩中,所述名稱被構(gòu)造成使得名稱的開頭字節(jié)由來自單元內(nèi)容中的3個維度(對應(yīng)于錨指紋、第二指紋和第三指紋的位置)的內(nèi)容構(gòu)成。具體來說,在圖8b中,每一個32字節(jié)組塊成為具有32個字節(jié)的候選單元(固定大小塊)。對單元的內(nèi)容應(yīng)用指紋處理方法。每一個單元具有如下構(gòu)造的名稱:來自單元的三個維度或字段(分別通過錨指紋、第二指紋和第三指紋定位)的數(shù)據(jù)的字節(jié)被串聯(lián)形成名稱的開頭字節(jié),隨后是單元的其余字節(jié)。名稱被用來在濾篩中組織單元。如圖8b中所示,前10個組塊不包含重復(fù)或?qū)С鲰棧⑶易鳛閱卧嗬^被安裝在濾篩中。圖8b示出了在第10個組塊被消耗之后的濾篩。圖8c示出了在消耗了數(shù)據(jù)輸入的附加的幾百萬個單元之后(例如在給出了接下來的4200萬個組塊之后)的某一后續(xù)時間點處的濾篩內(nèi)容。針對重復(fù)或?qū)С鲰棛z查濾篩。無法從單元導(dǎo)出的組塊被安裝在濾篩中。圖8c示出了在消耗了4200萬個組塊之后的濾篩,其中例如包含16000010個單元(可以利用3個字節(jié)的引用地址進(jìn)行邏輯尋址),其余的26000000個組塊則成為導(dǎo)出項。圖8d示出了隨后被呈現(xiàn)到濾篩并且被識別為濾篩中的某一條目(被示出為單元編號24789)的重復(fù)的新鮮輸入的一個實例。在該例中,濾篩把單元24789(組塊9)識別成對應(yīng)于組塊42000011的最適當(dāng)?shù)膯卧?。?dǎo)出功能確定新的組塊是確切的重復(fù),并且將其替換成對單元24789的引用。用以表示導(dǎo)出項的成本是3字節(jié)引用相比于35b的原始大小,從而是原始大小的8.57%。圖8d示出了被轉(zhuǎn)換成濾篩中的某一條目(被示出為單元編號187126)的導(dǎo)出項的輸入(組塊42000012)的第二實例。在該例中,濾篩確定不存在確切的匹配。其把單元187125和187126(組塊8和1)識別成最適當(dāng)?shù)膯卧乃鲎钸m當(dāng)?shù)膯卧獙?dǎo)出新的單元。在圖8d中示出了導(dǎo)出相比于單元187125和導(dǎo)出相比于單元187126。用以表示導(dǎo)出項相比于單元187125的成本是39字節(jié)+3字節(jié)引用=42字節(jié),從而是原始大小的120.00%。用以表示導(dǎo)出項相比于單元187126的成本是12字節(jié)+3字節(jié)引用=15字節(jié),從而是原始大小的42.85%。選擇最佳導(dǎo)出(相比于單元187126)。將重建大小與閾值進(jìn)行比較。舉例來說,如果閾值是50%,則該導(dǎo)出項(42.85%)被接受。圖8e提供了從基本數(shù)據(jù)單元導(dǎo)出的數(shù)據(jù)組塊的兩個附加的實例,其中包括通過從兩個基本數(shù)據(jù)單元導(dǎo)出而實際創(chuàng)建導(dǎo)出項的一個實例。在第一實例中給出組塊42000013。濾篩把單元9299998(組塊10)識別成最適當(dāng)?shù)膯卧?。在圖8e中示出了導(dǎo)出相比于單元9299998。用以表示導(dǎo)出項的成本是4字節(jié)+3字節(jié)引用=7字節(jié),從而是原始大小的20.00%。將重建大小與閾值進(jìn)行比較。舉例來說,如果閾值是50%,則該導(dǎo)出項(20.00%)被接受。在第二實例中給出組塊42000014。在該例中,組塊42000014使得該組塊的一般可以從單元9299997最佳地導(dǎo)出,該組塊的另一半則可以從單元9299998最佳地導(dǎo)出。因此,創(chuàng)建多單元導(dǎo)出項以產(chǎn)生進(jìn)一步的數(shù)據(jù)簡化。在圖8e中示出了多單元導(dǎo)出。用以表示該多單元導(dǎo)出項的成本是3字節(jié)引用+3字節(jié)+3字節(jié)引用=9字節(jié),從而是原始大小的25.71%。將重建大小與閾值進(jìn)行比較,例如如果閾值是50%,則該導(dǎo)出項(25.71%)被接受。應(yīng)當(dāng)提到的是,來自單一單元導(dǎo)出項的最佳結(jié)果將是45.71%。
圖8a-e示出了datadistillationtm系統(tǒng)的一個重要優(yōu)點:可以在消耗和產(chǎn)生固定大小塊的同時有效地實施數(shù)據(jù)簡化。應(yīng)當(dāng)提到的是,固定大小塊在高性能存儲系統(tǒng)中是高度期望的。通過使用datadistillationtm裝置,由許多固定大小的塊構(gòu)成的較大的傳入輸入文件可以被因式分解成許多固定大小的單元,從而使得所有基本數(shù)據(jù)單元都具有固定的大小。對應(yīng)于每一個導(dǎo)出單元的潛在的可變大小重建程序被包裝在一起并且被內(nèi)聯(lián)保持在蒸餾數(shù)據(jù)文件中,其隨后可以被組塊成固定大小塊。因此,出于所有實際的目的,可以在存儲系統(tǒng)中消耗和產(chǎn)生固定大小塊的同時實施強力的數(shù)據(jù)簡化。
圖9a-c示出了首先在圖1c中示出的系統(tǒng)的datadistillationtm方案的一個實例:這種方案采用可以通過內(nèi)容關(guān)聯(lián)方式被存取的單獨的基本重建程序存儲庫。這樣的結(jié)構(gòu)允許檢測到構(gòu)成已經(jīng)存在于基本重建程序存儲庫中的重建程序。這樣的導(dǎo)出項可以被改訂成引用現(xiàn)有的重建程序。這允許檢測重建程序當(dāng)中的冗余。在圖9a中攝取輸入數(shù)據(jù)。對所述數(shù)據(jù)應(yīng)用指紋處理方法,并且在指紋位置處設(shè)定組塊邊界。如圖所示,輸入被因式分解成8個候選單元(在圖9a中通過粗體和常規(guī)字體示出了交替的組塊)。在圖9b中,所述8個候選單元被示出為組織在濾篩中。每一個單元具有從該單元的整個內(nèi)容構(gòu)造的獨特名稱。在該例中,單元名稱被如下構(gòu)造:來自兩個維度或字段(分別通過錨指紋和第二指紋定位)的數(shù)據(jù)的字節(jié)被串聯(lián)形成名稱的開頭字節(jié),隨后是其余字節(jié)。名稱被用來在濾篩中對單元進(jìn)行排序,并且還通過樹結(jié)構(gòu)提供對濾篩的內(nèi)容關(guān)聯(lián)存取。圖9b還示出了包含基本重建程序的第二內(nèi)容關(guān)聯(lián)結(jié)構(gòu)。圖9c示出了重復(fù)重建。假設(shè)所到來的55字節(jié)候選單元(圖9c中示出)并非任何基本數(shù)據(jù)單元的重復(fù)。單元3被選擇成最適當(dāng)?shù)膯卧?個維度對于pde2和3是相同的,但是開始于88a7的其余字節(jié)與單元3匹配。利用一個12字節(jié)重建程序(rp)從單元3導(dǎo)出所述新的輸入。編碼如圖7a中所示。對于該例應(yīng)當(dāng)注意到的是,最大單元大小是64比特,并且所有偏移量和長度都被編碼成6比特值,而不是圖7a中所示的5比特長度和偏移量。對rp存儲庫進(jìn)行搜索并且沒有找到這一新rp。該rp被插入到基本rp存儲庫中并且基于其值被排序。所述新單元被改訂成對基本數(shù)據(jù)單元3的引用以及對rp存儲庫中的引用4處的新創(chuàng)建的基本重建程序的引用。對應(yīng)于該導(dǎo)出單元的總存儲大小是:3字節(jié)pde引用、3字節(jié)rp引用、12字節(jié)rp=18字節(jié),從而是相比于將其存儲為pde的大小的31.0%。后面假設(shè)所述55字節(jié)候選單元的一份拷貝到達(dá)。與前面一樣,基于單元3創(chuàng)建一個12比特rp。對rp存儲庫進(jìn)行搜索,并且找到具有基本rpid=3、rp引用=4的rp。該候選單元在系統(tǒng)中被表示成針對基本數(shù)據(jù)單元3的引用和針對重建程序4的引用。對于該導(dǎo)出單元所增加的總存儲大小現(xiàn)在是:3字節(jié)pde引用、3字節(jié)rp引用=6字節(jié),從而是相比于將其存儲為pde的大小的10.3%。
圖10a提供了根據(jù)這里所描述的一些實施例的關(guān)于如何對基本數(shù)據(jù)單元應(yīng)用在重建程序中規(guī)定的變換以產(chǎn)生導(dǎo)出單元的一個實例。該例示出了被規(guī)定從編號為187126的基本數(shù)據(jù)單元(該基本數(shù)據(jù)單元也被示出在圖8c的濾篩中)導(dǎo)出的導(dǎo)出單元,這是通過對該基本數(shù)據(jù)單元應(yīng)用由所示出的重建程序規(guī)程的四種變換(插入、替換、刪除和附加)。如圖10a中所示,從濾篩加載單元187126,并且執(zhí)行重建程序以便從單元187126導(dǎo)出組塊42000012。圖10b-10c示出了根據(jù)這里所描述的一些實施例的數(shù)據(jù)取回處理。每一項數(shù)據(jù)取回請求實質(zhì)上采取蒸餾數(shù)據(jù)中的一個單元的形式,并且在無損簡化格式中被呈現(xiàn)到取回引擎。對應(yīng)于每一個單元的無損簡化格式包含對相關(guān)聯(lián)的(多個)基本數(shù)據(jù)單元的引用以及重建程序。datadistillationtm裝置的取回器獲取基本數(shù)據(jù)單元和重建程序,并且將其提供到重建器以供重建。在獲取了對應(yīng)于蒸餾數(shù)據(jù)的某一單元的相關(guān)基本數(shù)據(jù)單元和重建程序之后,重建器執(zhí)行重建程序以便生成處于其原始未簡化形式的所述單元。數(shù)據(jù)取回處理執(zhí)行重建所需的工作量關(guān)于重建程序的大小和基本數(shù)據(jù)單元的大小成線性。因此,通過所述系統(tǒng)可以實現(xiàn)高數(shù)據(jù)取回速率。
顯而易見的是,為了把一個單元從蒸餾數(shù)據(jù)中的無損簡化形式重建到其原始未簡化形式,只需要獲取對于該單元所規(guī)定的(多個)基本數(shù)據(jù)單元和重建程序。因此,為了重建給定的單元,不需要對其他單元進(jìn)行存取或重建。這就使得datadistillationtm裝置即使在為針對重建和取回的隨機請求序列服務(wù)時仍然是高效的。應(yīng)當(dāng)提到的是,例如lempelziv方法之類的傳統(tǒng)壓縮方法需要獲取并且解壓縮包含所期望的塊的整個數(shù)據(jù)窗口。舉例來說,如果存儲系統(tǒng)采用lempel-ziv方法使用32kb的窗口壓縮4kb數(shù)據(jù)庫,則為了獲取和解壓縮給定的4kb塊,需要獲取和解壓縮整個32kb窗口。由于為了給出所期望的數(shù)據(jù)需要消耗更多帶寬并且需要解壓縮更多數(shù)據(jù),這樣就構(gòu)成了性能懲罰。datadistillationtm裝置則不會招致這樣的懲罰。
datadistillationtm裝置可以通過多種方式被集成到計算機系統(tǒng)中,以便通過高效地在系統(tǒng)中的整個數(shù)據(jù)上全局發(fā)現(xiàn)并利用冗余的方式對數(shù)據(jù)進(jìn)行組織和存儲。圖11a-11g示出了根據(jù)這里所描述的一些實施例的包括datadistillationtm機制(可以利用軟件、硬件或者其組合來實施)的系統(tǒng)。圖11a給出了通用計算平臺,其中軟件應(yīng)用運行在系統(tǒng)軟件上,系統(tǒng)軟件執(zhí)行在硬件平臺上,硬件平臺由處理器、存儲器和數(shù)據(jù)存儲組件構(gòu)成。圖11b示出了被集成到平臺的應(yīng)用層中的datadistillationtm裝置,每一個特定應(yīng)用使用所述裝置利用對應(yīng)于該應(yīng)用的數(shù)據(jù)集內(nèi)的冗余。圖11c示出了被采用來為在其上方應(yīng)用的所有應(yīng)用提供數(shù)據(jù)虛擬化層或服務(wù)的datadistillationtm裝置。圖11de和11e示出了datadistillationtm裝置與范例計算平臺的操作系統(tǒng)、文件系統(tǒng)和數(shù)據(jù)管理服務(wù)的兩種不同形式的集成。其他集成方法包括(而不限于)與硬件平臺中的嵌入式計算堆棧集成,比如采用在如圖11f中所示的基于閃存的數(shù)據(jù)存儲子系統(tǒng)中的嵌入式計算堆棧。
圖11g給出了datadistillationtm裝置與圖11d中示出的范例計算平臺的集成的附加細(xì)節(jié)。圖11g示出了datadistillationtm裝置的組件,其中解析器和因式分解器、導(dǎo)出器、取回器和重建器作為軟件在通用處理器上執(zhí)行,并且內(nèi)容關(guān)聯(lián)映射結(jié)構(gòu)駐留在存儲分級結(jié)構(gòu)的幾個等級上。基本數(shù)據(jù)存儲庫可以駐留在存儲介質(zhì)(比如基于閃存的存儲驅(qū)動器)中。
圖11h示出了datadistillationtm裝置如何可以與范例通用計算平臺進(jìn)行接口。
文件系統(tǒng)(或檔案系統(tǒng)(filesystem))把文件(例如文本文檔、電子數(shù)據(jù)表、可執(zhí)行文件、多媒體文件等等)與標(biāo)識符(例如文件名、文件句柄等等)相關(guān)聯(lián),并且允許通過使用與文件相關(guān)聯(lián)的標(biāo)識符在文件上實施操作(例如讀取、寫入、插入、附加、刪除等等)。由文件系統(tǒng)實施的命名空間可以是平坦的或分級的。此外,命名空間可以被分層,例如頂層標(biāo)識符可以被解析成相繼的更低層處的一個或多個標(biāo)識符,直到頂層標(biāo)識符被完全解析為止。通過這種方式,文件系統(tǒng)提供對于物理地存儲文件內(nèi)容的(多個)物理數(shù)據(jù)存儲設(shè)備和/或存儲介質(zhì)(例如計算機存儲器、閃存驅(qū)動器、盤驅(qū)動器、網(wǎng)絡(luò)存儲設(shè)備、cd-rom、dvd等等)的抽象。
被用于在文件系統(tǒng)中存儲信息的物理存儲設(shè)備和/或存儲介質(zhì)可以使用一種或多種存儲技術(shù),并且可以位于相同的網(wǎng)絡(luò)位置處或者可以分布在不同的網(wǎng)絡(luò)位置處。在給定與文件相關(guān)聯(lián)的標(biāo)識符以及被請求在文件上實施的一項或多項操作的情況下,文件系統(tǒng)可以(1)識別一個或多個物理存儲設(shè)備和/或存儲介質(zhì),并且(2)使得由文件系統(tǒng)識別出的物理存儲設(shè)備和/或存儲介質(zhì)實施被請求在與所述標(biāo)識符相關(guān)聯(lián)的文件上實施的操作。
每當(dāng)在系統(tǒng)中實施讀取或?qū)懭氩僮鲿r,可能涉及不同的軟件和/或硬件組件。術(shù)語“讀取器”可以指代在系統(tǒng)中實施給定的讀取操作時在所述系統(tǒng)中涉及的軟件和/或硬件組件的選集,并且術(shù)語“寫入器”可以指代在系統(tǒng)中實施給定的寫入操作時在所述系統(tǒng)中涉及的軟件和/或硬件組件的選集。這里所描述的數(shù)據(jù)簡化方法和裝置的一些實施例可以由在實施給定的讀取或?qū)懭氩僮鲿r所涉及的系統(tǒng)的一個或多個軟件和/或硬件組件利用,或者可以被合并到其中。不同的讀取器和寫入器可以利用或合并不同的數(shù)據(jù)簡化實現(xiàn)方式。但是,利用或合并特定數(shù)據(jù)簡化實現(xiàn)方式的每一個寫入器將對應(yīng)于同樣利用或合并相同的數(shù)據(jù)簡化實現(xiàn)方式的讀取器。應(yīng)當(dāng)提到的是,在系統(tǒng)中實施的一些讀取和寫入操作可能不會利用或合并數(shù)據(jù)簡化裝置。舉例來說,當(dāng)datadistillationtm裝置或數(shù)據(jù)簡化裝置103取回基本數(shù)據(jù)單元或者把新的基本數(shù)據(jù)單元添加到基本數(shù)據(jù)存儲庫時,其可以在沒有數(shù)據(jù)簡化的情況下直接實施讀取和寫入操作。
具體來說,在圖11h中,寫入器150w可以總體上涉及在實施給定的寫入操作時所涉及的系統(tǒng)的軟件和/或硬件組件,并且讀取器150r可以總體上涉及在實施給定的讀取操作時所涉及的系統(tǒng)的軟件和/或硬件組件。如圖11h中所示,寫入器150w向datadistillationtm裝置或數(shù)據(jù)簡化裝置103提供輸入數(shù)據(jù),并且從datadistillationtm裝置或數(shù)據(jù)簡化裝置103接收蒸餾數(shù)據(jù)108。讀取器150r向datadistillationtm裝置或數(shù)據(jù)簡化裝置103提供取回請求109,并且從datadistillationtm裝置或數(shù)據(jù)簡化裝置103接收所取回的數(shù)據(jù)輸出113。
對應(yīng)于圖11h的實現(xiàn)方式實例包括而不限于在應(yīng)用、操作系統(tǒng)內(nèi)核、文件系統(tǒng)、數(shù)據(jù)管理模塊、設(shè)備驅(qū)動程序或者閃存或盤驅(qū)動器的固件中合并或利用datadistillationtm裝置或數(shù)據(jù)簡化裝置103。這跨越了在圖11b-f描述的多種配置和使用。
圖12a示出了根據(jù)這里所描述的一些實施例使用datadistillationtm裝置在受到帶寬約束的通信介質(zhì)上傳送數(shù)據(jù)。在所示出的設(shè)置中,通信節(jié)點a創(chuàng)建將被發(fā)送到通信節(jié)點b的文件集合。節(jié)點a采用datadistillationtm裝置把輸入文件轉(zhuǎn)換成蒸餾數(shù)據(jù)或蒸餾文件,其中包含對安裝在基本數(shù)據(jù)存儲庫中的基本數(shù)據(jù)單元的引用以及用于導(dǎo)出單元的重建程序。節(jié)點a隨后把蒸餾文件連同基本數(shù)據(jù)存儲庫發(fā)送到節(jié)點b(可以在發(fā)送蒸餾文件之前、同時或之后發(fā)送基本數(shù)據(jù)存儲庫;此外,可以通過相同的通信信道或者通過與被用于發(fā)送蒸餾文件的通信信道不同的通信信道發(fā)送基本數(shù)據(jù)存儲庫)。節(jié)點b把基本數(shù)據(jù)存儲庫安裝在相應(yīng)結(jié)構(gòu)的末端,并且隨后通過駐留在datadistillationtm裝置中的取回器和重建器饋送蒸餾文件,以便產(chǎn)生由節(jié)點a創(chuàng)建的原始文件集合。因此,通過在受到帶寬約束的通信介質(zhì)的全部兩端采用datadistillationtm裝置僅發(fā)送簡化數(shù)據(jù),使得對于所述介質(zhì)的使用更加高效。應(yīng)當(dāng)提到的是,使用datadistillationtm允許利用更大范圍內(nèi)的冗余(超出使用例如lempel-ziv之類的傳統(tǒng)技術(shù)的可行范圍),從而可以高效地傳送非常大的文件或文件群組。
我們現(xiàn)在將討論在廣域網(wǎng)設(shè)置中使用datadistillationtm裝置,其中各個工作組協(xié)作共享分散在多個節(jié)點上的數(shù)據(jù)。當(dāng)數(shù)據(jù)被初次創(chuàng)建時,可以如圖12a中所示對其進(jìn)行簡化和傳送。廣域網(wǎng)在每一個站點處保持?jǐn)?shù)據(jù)的拷貝,以便允許對于數(shù)據(jù)的快速本地存取。使用datadistillationtm裝置可以簡化每一個站點處的足跡。此外,在任何站點處進(jìn)行新鮮數(shù)據(jù)的后續(xù)攝取時,可以利用新鮮數(shù)據(jù)與已有的基本數(shù)據(jù)存儲庫的內(nèi)容之間的任何冗余以便對新鮮數(shù)據(jù)進(jìn)行簡化。
在這樣的設(shè)置中,需要把針對任何給定站點處的數(shù)據(jù)的任何修改傳送到所有其他站點,從而把每一個站點處的基本數(shù)據(jù)存儲庫保持一致。因此,如圖12b中所示,根據(jù)這里所描述的一些實施例,可以把例如基本數(shù)據(jù)存儲庫的安裝和刪除之類的更新以及元數(shù)據(jù)更新傳送到每一個站點處的基本數(shù)據(jù)存儲庫。舉例來說,在把新鮮的基本數(shù)據(jù)單元安裝到給定站點處的濾篩中時,所述基本數(shù)據(jù)單元需要被傳送到所有其他站點。每一個站點可以使用該基本數(shù)據(jù)單元的值按照內(nèi)容關(guān)聯(lián)方式對濾篩進(jìn)行存取,并且確定需要把新的條目添加在濾篩中的何處。同樣地,在從給定站點處的濾篩中刪除某一基本數(shù)據(jù)單元時,需要更新所有其他站點以反映出所述刪除。可以實現(xiàn)這一點的一種方式是通過把所述基本數(shù)據(jù)單元傳送到所有站點,從而使得每一個站點可以使用所述基本數(shù)據(jù)單元對濾篩進(jìn)行內(nèi)容關(guān)聯(lián)存取,以便確定需要刪除葉節(jié)點中的哪一個條目,連同針對樹中的相關(guān)鏈接的必要更新以及從存儲庫中刪除該基本數(shù)據(jù)單元。另一種方法是向所有站點傳送對所述基本數(shù)據(jù)單元所駐留的葉節(jié)點中的用于所述基本數(shù)據(jù)單元的條目的引用。
因此,datadistillationtm裝置可以被用來簡化存儲在廣域網(wǎng)的各個站點處的數(shù)據(jù)的足跡,以及對網(wǎng)絡(luò)的通信鏈接進(jìn)行高效的使用。
圖12c-12k示出了根據(jù)這里所描述的一些實施例的由datadistillationtm裝置對于各種使用模型所產(chǎn)生的簡化數(shù)據(jù)的各個分量。
圖12c示出了datadistillationtm裝置1203如何攝取輸入文件1201,并且在完成蒸餾處理之后生成蒸餾文件集合1205和基本數(shù)據(jù)濾篩或基本數(shù)據(jù)存儲庫1206。圖12c的基本數(shù)據(jù)濾篩或基本數(shù)據(jù)存儲庫1206本身由兩個組成部分構(gòu)成,即如圖12d中所示的映射器1207和基本數(shù)據(jù)單元(或pde)1208。
映射器1207本身之內(nèi)具有兩個組成部分,即定義總體的樹的樹節(jié)點數(shù)據(jù)結(jié)構(gòu)集合以及葉節(jié)點數(shù)據(jù)結(jié)構(gòu)集合。樹節(jié)點數(shù)據(jù)結(jié)構(gòu)集合可以被放置到一個或多個文件中。同樣地,葉節(jié)點數(shù)據(jù)結(jié)構(gòu)集合可以被放置到一個或多個文件中。在一些實施例中,被稱作樹節(jié)點文件的單一文件保持對應(yīng)于為給定數(shù)據(jù)集(輸入文件1201)的基本數(shù)據(jù)單元創(chuàng)建的樹的整個樹節(jié)點數(shù)據(jù)結(jié)構(gòu)集合,并且被稱作葉節(jié)點文件的另一個單一文件保持對應(yīng)于為該數(shù)據(jù)集的基本數(shù)據(jù)單元創(chuàng)建的樹的整個葉節(jié)點數(shù)據(jù)結(jié)構(gòu)集合。
在圖12d中,基本數(shù)據(jù)單元1208包含為給定的數(shù)據(jù)集(輸入文件1201)創(chuàng)建的基本數(shù)據(jù)單元集合。所述基本數(shù)據(jù)單元集合可以被放置到一個或多個文件中。在一些實施例中,被稱作pde文件的單一文件保持為所述給定數(shù)據(jù)集創(chuàng)建的整個基本數(shù)據(jù)單元集合。
樹節(jié)點文件中的樹節(jié)點將包含對樹節(jié)點文件內(nèi)的其他樹節(jié)點的引用。樹節(jié)點文件中的最深等級(或最低等級)的樹節(jié)點將包含對葉節(jié)點文件中的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)中的條目的引用。葉節(jié)點文件中的葉節(jié)點數(shù)據(jù)結(jié)構(gòu)中的條目將包含對pde文件中的基本數(shù)據(jù)單元的引用。
在圖12e中示出了樹節(jié)點文件、葉節(jié)點文件和pde文件,該圖示出了由所述裝置創(chuàng)建的所有分量的細(xì)節(jié)。圖12e示出了包括名稱為file1、file2、file3…filen的n個文件的輸入文件集合1201,所述文件被datadistillationtm裝置簡化從而產(chǎn)生蒸餾文件集合1205和基本數(shù)據(jù)濾篩的各個分量,也就是樹節(jié)點文件1209、葉節(jié)點文件1210和pde文件1211。蒸餾文件1205包括名稱為file1.dist、file2.dist、file3.dist…filen.dist的n個文件。datadistillationtm裝置把輸入數(shù)據(jù)因式分解成其構(gòu)成單元,并且創(chuàng)建兩個類別的數(shù)據(jù)單元——基本數(shù)據(jù)單元和導(dǎo)出單元。蒸餾文件包含處于無損簡化格式中的數(shù)據(jù)單元的描述,并且包含對pde文件中的基本數(shù)據(jù)單元的引用。輸入文件1201中的每一個文件在蒸餾文件1205中具有相應(yīng)的蒸餾文件。舉例來說,輸入文件1201中的file11212對應(yīng)于蒸餾文件1205中的名稱為file1.dist1213的蒸餾文件。
應(yīng)當(dāng)提到的是,圖12e示出了由數(shù)據(jù)蒸餾裝置基于根據(jù)圖1a的蒸餾數(shù)據(jù)和基本數(shù)據(jù)存儲庫的組織而創(chuàng)建的各個組成部分,其中重建程序被放置在蒸餾文件中的單元的無損簡化表示中。應(yīng)當(dāng)提到的是,(根據(jù)圖1b的)一些實施例可以把重建程序放置在基本數(shù)據(jù)存儲庫中,并且將其像基本數(shù)據(jù)單元一樣對待。蒸餾文件中的單元的無損簡化表示將包含對基本數(shù)據(jù)存儲庫中的重建程序的引用(而不是包含重建程序本身)。在這些實施例中,重建程序?qū)⑾窕緮?shù)據(jù)單元一樣被對待,并且在pde文件1211中產(chǎn)生。在另一個實施例中,根據(jù)圖1c,重建程序與基本數(shù)據(jù)單元分開存儲并且被存儲在稱作重建程序存儲庫的結(jié)構(gòu)中。在這樣的實施例中,蒸餾文件中的單元的無損簡化表示將包含對重建程序存儲庫中的重建程序的引用。在這樣的實施例中,如圖12f中所示,除了產(chǎn)生對應(yīng)于基本數(shù)據(jù)單元的樹組織的樹節(jié)點文件1209、葉節(jié)點文件1210和pde文件1211之外,所述裝置還將產(chǎn)生被稱作重建樹節(jié)點文件1219和重建葉節(jié)點文件1220的樹和葉節(jié)點文件的第二集合,連同被稱作rp文件1221的包含所有重建程序的文件。
圖12e中所示的datadistillationtm裝置還把管理其操作的配置和控制信息存儲在樹節(jié)點文件1209、葉節(jié)點文件1210、pde文件1211和蒸餾文件1205當(dāng)中的一項或多項中?;蛘呖梢陨砂撔畔⒌牡谖宸至?。類似地對于圖12f中示出的裝置,所述配置和控制信息可以被存儲在圖12f所示的各個分量當(dāng)中的一個或多個分量中,或者可以被存儲在為此目的生成的另一個分量中。
圖12g示出了datadistillationtm裝置的使用的總覽,其中給定的數(shù)據(jù)集(輸入文件1221)被饋送到datadistillationtm裝置1203,并且被處理以產(chǎn)生無損簡化數(shù)據(jù)集(無損簡化數(shù)據(jù)集1224)。輸入數(shù)據(jù)集1221可以由文件、對象、塊、組塊或來自數(shù)據(jù)流的提取項的選集構(gòu)成。應(yīng)當(dāng)提到的是,圖12e示出了其中所述數(shù)據(jù)集由文件構(gòu)成的實例。圖12g的輸入數(shù)據(jù)集1221對應(yīng)于圖12e的輸入文件1201,圖12g的無損簡化數(shù)據(jù)集1224則包括圖12e中示出的四個組成部分,即圖12e的蒸餾文件1205、樹節(jié)點文件1209、葉節(jié)點文件1210和pde文件1211。在圖12g中,datadistillationtm裝置利用為之給出的輸入數(shù)據(jù)集的整個范圍內(nèi)的數(shù)據(jù)單元當(dāng)中的冗余。
datadistillationtm裝置可以被配置成利用輸入數(shù)據(jù)集的一個子集中的冗余,并且提供對應(yīng)于為之給出的每一個數(shù)據(jù)子集的無損簡化。舉例來說,如圖12h中所示,輸入數(shù)據(jù)集1221可以被分割成許多更小的數(shù)據(jù)選集,每一個選集在本公開內(nèi)容中被稱作“批次”或“數(shù)據(jù)的批次”或“數(shù)據(jù)批次”。圖12h示出了被配置成攝取輸入數(shù)據(jù)批次1224并且產(chǎn)生無損簡化數(shù)據(jù)批次1225的datadistillationtm裝置。圖12h示出輸入數(shù)據(jù)集1221由若干數(shù)據(jù)選集構(gòu)成,也就是數(shù)據(jù)批次1…數(shù)據(jù)批次i…數(shù)據(jù)批次n。數(shù)據(jù)被每次一個數(shù)據(jù)批次呈現(xiàn)到datadistillationtm裝置,并且利用每一個數(shù)據(jù)批次的范圍內(nèi)的冗余以生成無損簡化數(shù)據(jù)批次。舉例來說,來自輸入數(shù)據(jù)集1221的數(shù)據(jù)批次i1226被饋送到所述裝置,并且無損簡化數(shù)據(jù)批次i1228被遞送到無損簡化數(shù)據(jù)集1227。來自輸入數(shù)據(jù)集1221的每一個數(shù)據(jù)批次被饋送到所述裝置,并且相應(yīng)的無損簡化數(shù)據(jù)批次被遞送到無損簡化數(shù)據(jù)集1227。在消耗并且簡化了所有數(shù)據(jù)批次1…數(shù)據(jù)批次i…數(shù)據(jù)批次n之后,輸入數(shù)據(jù)集1221被簡化到無損簡化數(shù)據(jù)集1227。
雖然datadistillationtm裝置的設(shè)計在利用全局?jǐn)?shù)據(jù)范圍內(nèi)的冗余方面已經(jīng)是高效的,但是前面的技術(shù)可以被用來進(jìn)一步加快數(shù)據(jù)簡化處理并且進(jìn)一步改進(jìn)其效率。通過把數(shù)據(jù)批次的大小限制到能夠容納到系統(tǒng)的可用存儲器中,可以提高數(shù)據(jù)簡化處理的吞吐量。舉例來說,其大小是許多太字節(jié)或甚至拍字節(jié)的輸入數(shù)據(jù)集可以被分解成分別具有例如256gb大小的許多數(shù)據(jù)批次,并且每一個數(shù)據(jù)批次可以被快速地簡化。通過使用具有256gb的存儲器的單一處理器核心(intelxeone5-1650v3,haswell3.5ghz處理器),在我們的實驗室中已經(jīng)實施了利用256gb的范圍內(nèi)的冗余的此類解決方案,從而給出每秒幾百兆字節(jié)的數(shù)據(jù)攝取速率,同時在各種數(shù)據(jù)集上給出2-3x的簡化水平。應(yīng)當(dāng)提到的是,256gb的范圍比32kb大幾百萬倍,而32kb是lempelziv方法在現(xiàn)今的處理器上給出10mb/秒到200mb/秒之間的攝取性能的窗口大小。因此,通過適當(dāng)?shù)叵拗迫哂嗟姆秶?,通過潛在地犧牲一些簡化可以實現(xiàn)數(shù)據(jù)蒸餾處理的速度方面的改進(jìn)。
圖12i示出了圖12h中的設(shè)置的一種變型,并且示出了運行在多個處理器上以便顯著提升輸入數(shù)據(jù)集的數(shù)據(jù)簡化(并且還有數(shù)據(jù)重建/取回)吞吐量的多個數(shù)據(jù)蒸餾處理。圖12i示出了被分割成x個數(shù)據(jù)批次的輸入數(shù)據(jù)集1201,所述x個獨立數(shù)據(jù)批次被饋送到運行在獨立處理器核心上的j個獨立處理中(每一個處理被分配足夠的存儲器以容納將被饋送到該處的任何數(shù)據(jù)批次)以得到并行執(zhí)行,并且對于數(shù)據(jù)簡化以及重建/取回都產(chǎn)生近似j倍的加速。圖12j示出了由datadistillationtm裝置對于一個使用模型產(chǎn)生的簡化數(shù)據(jù)的各個分量,其中在輸入數(shù)據(jù)集的簡化之后不再需要保留映射器。這樣的使用模型的實例是特定種類的數(shù)據(jù)備份和數(shù)據(jù)歸檔應(yīng)用。在這樣的使用模型中,對于簡化數(shù)據(jù)的僅有的后續(xù)使用是從簡化數(shù)據(jù)集重建和取回輸入數(shù)據(jù)集。在這樣的情形中,通過在數(shù)據(jù)簡化完成之后不再存儲映射器可以把簡化數(shù)據(jù)的足跡進(jìn)一步簡化。圖12j示出了被饋送到所述裝置的輸入文件1201,從而產(chǎn)生蒸餾文件1205和pde文件1211——這些組成部分(或分量)構(gòu)成這種情形中的簡化數(shù)據(jù)。應(yīng)當(dāng)提到的是,僅使用蒸餾文件1205和pde文件1211可以完全重新生成并恢復(fù)輸入文件1201?;叵氲綄?yīng)于蒸餾文件中的每一個單元的無損簡化表示包含重建程序(在需要時)以及對pde文件中的基本數(shù)據(jù)單元的引用。與pde文件相耦合,這就是執(zhí)行重建所需的全部信息。
應(yīng)當(dāng)提到的是,圖12j示出了由數(shù)據(jù)蒸餾裝置基于根據(jù)圖1a的蒸餾數(shù)據(jù)和基本數(shù)據(jù)存儲庫的組織而創(chuàng)建的各個分量,其中重建程序被放置在蒸餾文件中的單元的無損簡化表示中。應(yīng)當(dāng)提到的是,(根據(jù)圖1b的)一些實施例可以把重建程序放置在基本數(shù)據(jù)存儲庫中,并且將其像基本數(shù)據(jù)單元一樣對待。蒸餾文件中的單元的無損簡化表示將包含對基本數(shù)據(jù)存儲庫中的重建程序的引用(而不是包含重建程序本身)。在這些實施例中,重建程序?qū)⑾窕緮?shù)據(jù)單元一樣被對待,并且在pde文件1211中產(chǎn)生。在另一個實施例中,根據(jù)圖1c,重建程序與基本數(shù)據(jù)單元分開存儲并且被存儲在稱作重建程序存儲庫的結(jié)構(gòu)中。在這樣的實施例中,蒸餾文件中的單元的無損簡化表示將包含對重建程序存儲庫中的重建程序的引用。在這樣的實施例中,除了產(chǎn)生對應(yīng)于基本數(shù)據(jù)單元的pde文件之外,所述裝置還將產(chǎn)生被稱作rp文件的包含所有重建程序的文件。這在圖12k中示出,該圖對于其中不再需要保留映射器的使用模型示出了簡化數(shù)據(jù)的分量。圖12k示出了包括蒸餾文件1205、pde文件1211和rp文件1221的簡化數(shù)據(jù)分量。
使用這里所描述的實施例在多種真實世界數(shù)據(jù)集上實施數(shù)據(jù)簡化以便確定這些實施例的有效性。所研究的真實世界數(shù)據(jù)集包括企業(yè)電子郵件的enron語料庫,各種美國政府記錄和文獻(xiàn),被輸入到mongodbnosql數(shù)據(jù)庫中的美國交通部記錄,以及可由公眾獲得的企業(yè)powerpoint演示。通過使用這里所描述的實施例并且把輸入數(shù)據(jù)因式分解成平均4kb的可變大小單元(通過指紋處理確定邊界),在這些數(shù)據(jù)集上實現(xiàn)了3.23x的平均數(shù)據(jù)簡化。3.23x的簡化意味著簡化數(shù)據(jù)的大小等于原始數(shù)據(jù)的大小除以3.23x,從而得到具有31%壓縮比的簡化足跡。通過使用等效的參數(shù)發(fā)現(xiàn)傳統(tǒng)的數(shù)據(jù)去重復(fù)技術(shù)在這些數(shù)據(jù)集上給出了1.487x的數(shù)據(jù)簡化。通過使用這里所描述的實施例并且把輸入數(shù)據(jù)因式分解成4kb的固定大小單元,在這些數(shù)據(jù)集上實現(xiàn)了1.86x的平均數(shù)據(jù)簡化。通過使用等效的參數(shù)發(fā)現(xiàn)傳統(tǒng)的數(shù)據(jù)去重復(fù)技術(shù)在這些數(shù)據(jù)集上給出了1.08x的數(shù)據(jù)簡化。因此發(fā)現(xiàn)datadistillationtm解決方案與傳統(tǒng)的數(shù)據(jù)去重復(fù)解決方案相比給出了顯著更好的數(shù)據(jù)簡化。
測試運行還證實基本數(shù)據(jù)單元的較小字節(jié)子集可以用來對濾篩中的大部分單元進(jìn)行排序,從而允許對于其操作需要最小增量存儲的解決方案。
結(jié)果證實datadistillationtm裝置高效地允許以比單元本身更細(xì)的粒度在整個數(shù)據(jù)集上全局地利用數(shù)據(jù)單元當(dāng)中的冗余。以經(jīng)濟的數(shù)據(jù)存取和io實現(xiàn)了通過本方法給出的無損數(shù)據(jù)簡化,其中采用本身只需要最小增量存儲的數(shù)據(jù)結(jié)構(gòu),并且只使用在現(xiàn)今的多核微處理器上可用的全部計算處理能力的一部分。在前面的章節(jié)中描述的實施例涉及在較大和極大的數(shù)據(jù)集上實施無損數(shù)據(jù)簡化并且同時提供高數(shù)據(jù)攝取和數(shù)據(jù)取回速率的系統(tǒng)和技術(shù),并且不受困于傳統(tǒng)技術(shù)的缺點和限制。
給出前面的描述是為了使得本領(lǐng)域技術(shù)人員能夠制作和使用所述實施例。在不背離本公開內(nèi)容的精神和范圍的情況下,本領(lǐng)域技術(shù)人員將很容易認(rèn)識到針對所公開的實施例的各種修改,并且這里所定義的一般原理適用于其他實施例和應(yīng)用。因此,本發(fā)明不限于所示出的實施例,而是應(yīng)被給予與這里所公開的原理和特征一致的最廣范圍。
在本公開內(nèi)容中描述的數(shù)據(jù)結(jié)構(gòu)和代碼可以部分地或完全地被存儲在計算機可讀存儲介質(zhì)和/或硬件模塊和/或硬件裝置上。計算機可讀存儲介質(zhì)包括而不限于易失性存儲器、非易失性存儲器、磁性和光學(xué)存儲設(shè)備(比如盤驅(qū)動器、磁帶、cd(緊致盤)、dvd(數(shù)字通用盤或數(shù)字視頻盤))或者能夠存儲代碼和/或數(shù)據(jù)的現(xiàn)在已知或后來開發(fā)的其他介質(zhì)。在本公開內(nèi)容中描述的硬件模塊或裝置包括而不限于專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)、專用或共享處理器以及/或者現(xiàn)在已知或后來開發(fā)的其他硬件模塊或裝置。
在本公開內(nèi)容中描述的方法和處理可以部分地或完全地被具體實現(xiàn)為存儲在計算機可讀存儲介質(zhì)或設(shè)備中的代碼和/或數(shù)據(jù),從而當(dāng)計算機系統(tǒng)讀取并執(zhí)行所述代碼和/或數(shù)據(jù)時,所述計算機系統(tǒng)實施相關(guān)聯(lián)的方法和處理。所述方法和處理還可以部分地或完全地被具體實現(xiàn)在硬件模塊或裝置中,從而當(dāng)所述硬件模塊或裝置被激活時,其實施相關(guān)聯(lián)的方法和處理。應(yīng)當(dāng)提到的是,所述方法或處理可以使用代碼、數(shù)據(jù)以及硬件模塊或裝置的組合來具體實現(xiàn)。
前面關(guān)于本發(fā)明的實施例的描述僅僅是出于說明和描述的目的而給出的。所述描述不意圖進(jìn)行窮舉或者把本發(fā)明限制到所公開的形式。因此,本領(lǐng)域技術(shù)人員將會想到許多修改和變型。此外,前面的公開內(nèi)容不意圖限制本發(fā)明。