專利名稱:管理可獨(dú)立訪問的數(shù)據(jù)單元的存儲(chǔ)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及管理可獨(dú)立訪問的數(shù)據(jù)單元的存儲(chǔ)。
背景技術(shù):
數(shù)據(jù)庫系統(tǒng)可以以多種格式中的任何一種格式來存儲(chǔ)可獨(dú)立訪問的數(shù)據(jù)單元或者“記錄”。每個(gè)記錄可以對(duì)應(yīng)于諸如信用卡交易之類的邏輯實(shí)體,并且典型地具有用于唯一地標(biāo)識(shí)記錄的關(guān)聯(lián)主鍵(key)。記錄可以包括與記錄格式的各個(gè)字段相關(guān)聯(lián)的多個(gè)值。記錄可以被存儲(chǔ)在一個(gè)或多個(gè)文件中(例如,平面文件(flat files)或結(jié)構(gòu)化數(shù)據(jù)文件(structured data files),諸如XML文件)。在壓縮數(shù)據(jù)庫系統(tǒng)中,獨(dú)立的記錄或者記錄內(nèi)的值在存儲(chǔ)時(shí)可以被壓縮,并且在被訪問時(shí)可以被解壓縮以減少系統(tǒng)的存儲(chǔ)需求。
發(fā)明內(nèi)容
在一個(gè)方面中,一般地,一種管理數(shù)據(jù)的方法包括在輸入設(shè)備或端口上接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ)。所述處理包括存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的;對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選(screening)數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。各方面可以包括以下特征中的一個(gè)或更多個(gè)。在多個(gè)塊的一個(gè)或更多個(gè)的第二集合中包括的全部數(shù)據(jù)單元具有在排序次序中比在多個(gè)塊的一個(gè)或更多個(gè)的第一集合中包括的數(shù)據(jù)單元的任何鍵值出現(xiàn)得更晚的鍵值。多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每個(gè)對(duì)應(yīng)于標(biāo)識(shí)在一個(gè)或更多個(gè)塊的對(duì)應(yīng)集合中存儲(chǔ)的數(shù)據(jù)單元的不同的非重疊鍵值范圍。在累積了在多個(gè)塊的一個(gè)或更多個(gè)塊的第一集合中存儲(chǔ)的第一集合數(shù)據(jù)單元中的預(yù)定數(shù)量的區(qū)別鍵值之后生成第一篩選數(shù)據(jù)結(jié)構(gòu),而在接收在多個(gè)塊的一個(gè)或更多個(gè)塊的第二集合中存儲(chǔ)的第二集合數(shù)據(jù)單元的同時(shí)生成第二篩選數(shù)據(jù)結(jié)構(gòu)。該方法還包括使用索引和多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)來搜索具有給定鍵值的數(shù)據(jù)單元。所述搜索包括對(duì)于多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每一個(gè)檢查指示具有給定鍵值的數(shù)據(jù)單元可能被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的肯定結(jié)果。該方法還包括響應(yīng)于對(duì)于對(duì)應(yīng)篩選數(shù)據(jù)結(jié)構(gòu)的肯定結(jié)果,搜索索引以確定給定鍵值是否落入跨越被對(duì)應(yīng)篩選數(shù)據(jù)結(jié)構(gòu)所篩選的一個(gè)或更多個(gè)塊的鍵值范圍內(nèi)。
該方法還包括響應(yīng)于給定鍵值落入跨越被對(duì)應(yīng)篩選數(shù)據(jù)結(jié)構(gòu)所篩選的多個(gè)塊的鍵值范圍內(nèi),搜索索引以找到用于搜索具有給定鍵值的數(shù)據(jù)單元的特定塊。對(duì)于給定鍵值,給定篩選數(shù)據(jù)結(jié)構(gòu)確定包括給定鍵值的數(shù)據(jù)單元必定沒有被包括,或者包括給定鍵值的數(shù)據(jù)單元可能被包括。在數(shù)據(jù)單元沒有被包括時(shí)給定篩選數(shù)據(jù)結(jié)構(gòu)確定包括給定鍵值的數(shù)據(jù)單元可能被包括的概率取決于數(shù)據(jù)結(jié)構(gòu)的大小。該方法還包括基于標(biāo)識(shí)生成塊所依據(jù)的數(shù)據(jù)單元的區(qū)別鍵值的數(shù)量,而選擇給定篩選數(shù)據(jù)結(jié)構(gòu)的大小。在輸入設(shè)備或端口上接收給定數(shù)據(jù)單元之前,標(biāo)識(shí)給定數(shù)據(jù)單元的鍵值對(duì)應(yīng)于與給定數(shù)據(jù)單元關(guān)聯(lián)的一個(gè)或更多個(gè)字段。
該方法還包括在接收數(shù)據(jù)單元時(shí)累積區(qū)別鍵值,并且在接收到該組可獨(dú)立訪問的數(shù)據(jù)單元中的數(shù)據(jù)單元之后對(duì)所累積的區(qū)別鍵值進(jìn)行計(jì)數(shù)。在輸入設(shè)備或端口上接收給定數(shù)據(jù)單元之后,標(biāo)識(shí)該給定數(shù)據(jù)單元的鍵值才被分配給該給定數(shù)據(jù)單元。鍵值是單調(diào)分配的。所有分配的鍵值均有區(qū)別。與所存儲(chǔ)的塊關(guān)聯(lián)的篩選數(shù)據(jù)結(jié)構(gòu)的數(shù)量基于標(biāo)識(shí)該組可獨(dú)立訪問的數(shù)據(jù)單元中的數(shù)據(jù)單元的區(qū)別鍵值的數(shù)量、以及與篩選數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的目標(biāo)錯(cuò)誤肯定概率。索引是包括至少第一級(jí)別索引和第二級(jí)別索引的分層級(jí)索引。第一級(jí)別索引被劃分為多個(gè)條目區(qū)域,其使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍對(duì)應(yīng)的數(shù)據(jù)單元的塊,每個(gè)區(qū)域足夠小以便完全容納在與該數(shù)據(jù)存儲(chǔ)系統(tǒng)耦接的存儲(chǔ)器內(nèi)。索引中條目的一個(gè)或更多個(gè)條目標(biāo)識(shí)與生成對(duì)應(yīng)塊所依據(jù)的數(shù)據(jù)單元對(duì)應(yīng)的鍵值范圍。索引中條目的至少一些中的每個(gè)條目標(biāo)識(shí)對(duì)應(yīng)塊的存儲(chǔ)位置。第二級(jí)別索引足夠小以完全容納在存儲(chǔ)器內(nèi)。第二級(jí)別索引包括用于多個(gè)區(qū)域中每個(gè)區(qū)域的相應(yīng)條目。第二級(jí)別索引中條目的一個(gè)或更多個(gè)條目使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍對(duì)應(yīng)的條目的第一級(jí)別索引的區(qū)域。在另一方面中,一般地,一種計(jì)算機(jī)可讀介質(zhì)存儲(chǔ)用于管理數(shù)據(jù)的計(jì)算機(jī)程序,該計(jì)算機(jī)程序包括使得計(jì)算機(jī)執(zhí)行以下操作的指令在輸入設(shè)備或端口上接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ)。所述處理包括存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的;對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。在另一方面中,一般地,一種管理數(shù)據(jù)的系統(tǒng)包括輸入設(shè)備或端口,被配置為接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及至少一個(gè)處理器,被配置為處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ)。所述處理包括存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的;對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。在另一方面中,一般地,一種管理數(shù)據(jù)的系統(tǒng)包括用于接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元的部件,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)·識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及用于處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ)的部件。所述處理包括存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的;對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。各方面可以包括以下優(yōu)點(diǎn)中的一項(xiàng)或更多項(xiàng)。通過壓縮多個(gè)記錄的塊,與獨(dú)立地壓縮各記錄相比,可以實(shí)現(xiàn)更大程度的壓縮。加索引的塊提供了在無需從壓縮記錄的文件的開頭進(jìn)行解壓縮的情況下訪問給定記錄的能力。塊的大小可以被選擇為足夠大以提供高壓縮,并且足夠小以限制訪問塊中的給定記錄所需的解壓縮量??梢允褂脽o需提供從壓縮塊中的任意位置開始解壓縮的能力的壓縮技術(shù),來壓縮每個(gè)塊。因此,可以使用提供大程度壓縮的技術(shù)。通過存儲(chǔ)標(biāo)識(shí)與生成對(duì)應(yīng)塊所依據(jù)的記錄相對(duì)應(yīng)的鍵值范圍的索引,由于該索引不需要對(duì)于每個(gè)記錄都具有條目,因此該索引可以保持較小(例如,足夠小以容納在相對(duì)塊的存儲(chǔ)器中)。索引條目使得能夠定位可以被裝載和解壓縮的一個(gè)或更多個(gè)塊,以便恢復(fù)可以用于搜索期望記錄的記錄集合。將篩選數(shù)據(jù)結(jié)構(gòu)(例如,重疊編碼的簽名或其它類型的位圖)與壓縮塊關(guān)聯(lián)可以指示期望記錄不存在,排除了裝載和解壓縮該壓縮塊以搜索記錄的需要??梢允褂米赃m應(yīng)技術(shù)來以不使用額外存儲(chǔ)空間的方式遞增地生成篩選數(shù)據(jù)結(jié)構(gòu)??梢允褂酶鞣N技術(shù)來避免錯(cuò)誤肯定的概率的額外增加,否則通過檢查許多不同的篩選數(shù)據(jù)結(jié)構(gòu)可能引起錯(cuò)誤肯定的概率的額外增加。為了搜索潛在大的索引,用于生成索引的分層級(jí)技術(shù)通過降低需要訪問相對(duì)更慢的非本地存儲(chǔ)裝置的次數(shù),而加速了索引搜索。
其它特征和優(yōu)點(diǎn)將從以下描述并且從權(quán)利要求書中變得顯而易見。
圖I是用于存儲(chǔ)和檢索記錄的系統(tǒng)的框圖。圖2A、2B、2C和2D是由該系統(tǒng)處理并在該系統(tǒng)中存儲(chǔ)的數(shù)據(jù)的示意圖。圖3A和3B是示出不同簽名大小的錯(cuò)誤肯定概率的表格。圖4A和4B是搜索記錄的例程的流程圖。圖5是加索引和搜索模塊的框圖。
具體實(shí)施方式
參考圖I,記錄存儲(chǔ)和檢索系統(tǒng)100從一個(gè)或更多個(gè)源(諸如源A —源C)接受數(shù)據(jù)。數(shù)據(jù)包括可以被表示為可獨(dú)立訪問的數(shù)據(jù)單元的信息。例如,信用卡公司可以從各個(gè)零售公司接收表示獨(dú)立交易的數(shù)據(jù)。每個(gè)交易與表示屬性(諸如,顧客姓名、日期、購買量等)的值關(guān)聯(lián)。記錄處理模塊102保證數(shù)據(jù)根據(jù)預(yù)定記錄格式而被格式化,從而與交易關(guān)聯(lián)的值被存儲(chǔ)在記錄中。在一些情況下,這可能包括根據(jù)記錄格式轉(zhuǎn)換來自源的數(shù)據(jù)。在其它情況下,一個(gè)或更多個(gè)源可能提供已經(jīng)根據(jù)記錄格式被格式化的數(shù)據(jù)。記錄處理模塊102根據(jù)標(biāo)識(shí)每個(gè)記錄的主鍵值(例如,標(biāo)識(shí)單個(gè)記錄的唯一鍵,或者標(biāo)識(shí)記錄的多個(gè)更新版本的鍵)將記錄排序,并且將記錄劃分為與主鍵值的非重疊范圍對(duì)應(yīng)的記錄集合。例如,記錄的每個(gè)集合可以對(duì)應(yīng)于預(yù)定數(shù)量的記錄(例如,100個(gè)記錄)。壓縮模塊104將記錄的每個(gè)集合壓縮為壓縮數(shù)據(jù)塊。這些壓縮塊被存儲(chǔ)在記錄存儲(chǔ)裝置106 (例如,非易失性存儲(chǔ)介質(zhì),諸如一個(gè)或更多個(gè)硬盤驅(qū)動(dòng)器)中的壓縮記錄文件中。系統(tǒng)100還包括加索引和搜索模塊108,其為每個(gè)塊提供包括條目的索引114。索引114被用來定位可能包括給定記錄的塊,如下面更詳細(xì)描述的。加索引和搜索模塊108還包括篩選數(shù)據(jù)結(jié)構(gòu)116,其被用來確定何時(shí)可能需要在記錄存儲(chǔ)裝置106中搜索給定記錄,如下面更詳細(xì)描述的。索引114和篩選數(shù)據(jù)結(jié)構(gòu)116可以作為壓縮記錄文件被存儲(chǔ)在相同的存儲(chǔ)介質(zhì)中,或者在一些實(shí)現(xiàn)方式中,索引114和篩選數(shù)據(jù)結(jié)構(gòu)116的至少一部分可以被優(yōu)選地存儲(chǔ)在模塊108可訪問的相對(duì)更快的本地存儲(chǔ)裝置(例如,諸如動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器的易失性存儲(chǔ)介質(zhì))中,這是由于索引文件典型地比壓縮記錄文件小得多。在這些實(shí)現(xiàn)方式中,索引114和/或篩選數(shù)據(jù)結(jié)構(gòu)116的剩余部分可以被存儲(chǔ)在索引存儲(chǔ)裝置110 (例如,諸如一個(gè)或更多個(gè)硬盤驅(qū)動(dòng)器的非易失性存儲(chǔ)介質(zhì))中,直至需要它們并將它們移動(dòng)到模塊108的本地存儲(chǔ)裝置中。記錄存儲(chǔ)裝置106和索引存儲(chǔ)裝置110可以駐留在相同的存儲(chǔ)介質(zhì)或者在不同的存儲(chǔ)介質(zhì)上。在系統(tǒng)100的替代實(shí)現(xiàn)方式中,除了壓縮以外或者替代壓縮,可以使用其它功能來處理記錄的集合以生成塊,以便以某種方式組合記錄(即,使得塊不僅僅是記錄的串連(concatenated)集合)。例如,一些系統(tǒng)可以處理記錄集合以生成加密數(shù)據(jù)的塊。接口模塊112向人和/或計(jì)算機(jī)代理(諸如代理A-代理D)提供對(duì)所存儲(chǔ)的記錄的訪問。例如,接口模塊112可以實(shí)現(xiàn)信用卡顧客的在線賬戶系統(tǒng),以監(jiān)視他們的交易。系統(tǒng)100可以處理對(duì)滿足各種準(zhǔn)則的交易信息的請(qǐng)求,并且可以從存儲(chǔ)在記錄存儲(chǔ)裝置106中的壓縮塊內(nèi)提取對(duì)應(yīng)記錄。
來自一個(gè)或更多個(gè)源的輸入記錄流在被處理以生成壓縮記錄文件之前,可以被暫時(shí)存儲(chǔ)。參考圖2A,系統(tǒng)100接收要被存儲(chǔ)在壓縮記錄文件中的記錄200的集合,并且根據(jù)主鍵的值來對(duì)記錄進(jìn)行排序。主鍵值可以唯一地標(biāo)識(shí)數(shù)據(jù)庫中的可以由一個(gè)或更多個(gè)記錄表示的給定項(xiàng)目(例如,具有給定主鍵值的每個(gè)記錄可能對(duì)應(yīng)于項(xiàng)目的不同更新版本)。該主鍵可以是與記錄的一個(gè)或多個(gè)現(xiàn)有字段對(duì)應(yīng)的“自然鍵”。如果不存在確保對(duì)于每個(gè)項(xiàng)目唯一的字段,則主鍵可以是包括記錄的多個(gè)字段的合成鍵,所述多個(gè)字段一起確?;蛘叻浅?赡軐?duì)于每個(gè)項(xiàng)目唯一。替代地,主鍵可以是可以在每個(gè)記錄被接收到之后分配給該記錄的“合成(synthetic)鍵”。例如,系統(tǒng)100可以將唯一的主鍵值分配為依序遞增的整數(shù),或者某種其它單調(diào)演變的值(例如,時(shí)間戳)的序列。在此情況下,表示同一項(xiàng)目的不同版本的記錄可以被分配有不同的復(fù)合鍵值。如果使用整數(shù),則可能的主鍵值范圍(例如,如由所使用的比特?cái)?shù)量所確定的)可以足夠大,從而如果主鍵回轉(zhuǎn),則之前被分配了給定主鍵值的任何記錄都可能已經(jīng)從壓縮記錄文件中移除了。例如,舊的交易可能被移除并且被歸檔或丟棄。在圖2A所示的示例中,記錄200被按字母表排序的主鍵值A(chǔ)、AB、CZ···來標(biāo)識(shí)。系統(tǒng)100壓縮具有主鍵值A(chǔ)-DD的N個(gè)記錄的第一集合,以生成被標(biāo)記為塊I的對(duì)應(yīng)壓縮塊。 記錄的下一個(gè)集合包括所排序的具有主鍵值DX-GF的N個(gè)記錄。壓縮模塊104可以使用多種無損數(shù)據(jù)壓縮算法(例如,Lempel-Ziv型算法)中的任一種。組合每個(gè)連續(xù)的壓縮塊以形成壓縮記錄文件202。可以選擇用來生成壓縮塊的記錄的數(shù)量N,以便在壓縮效率和解壓縮速度之間折衷。壓縮可以平均地將數(shù)據(jù)的大小減小給定因子R,其取決于正在壓縮的數(shù)據(jù)的特性和正在壓縮的數(shù)據(jù)的大小(例如,當(dāng)壓縮更多數(shù)據(jù),R典型地更小)。壓縮還可以具有平均大小O的關(guān)聯(lián)開銷(例如,壓縮相關(guān)數(shù)據(jù))。從M個(gè)記錄(每個(gè)大小X)生成的作為結(jié)果的壓縮記錄文件的平均大小可以被表示為pW7iV"|l (RNX+0),對(duì)于大量塊,該表達(dá)式可以被近似為RMX+0M/N。因此,在一些情況下,通過減小R并且減小開銷對(duì)文件大小的貢獻(xiàn),N值越大,可以提供更大的壓縮。N值越小則減少了解壓縮給定壓縮塊以訪問可能在該塊中包含的記錄所需的時(shí)間。在其他實(shí)現(xiàn)方式中,不同壓縮塊可以包括不同數(shù)量的記錄。每個(gè)塊可以具有根據(jù)給定范圍的數(shù)量的記錄。例如,第一塊包括具有主鍵值1-1000的記錄,第二塊包括具有主鍵值1001-2000的記錄,等等。在該示例中壓縮塊中記錄的數(shù)量可以不同,這是因?yàn)椴皇敲總€(gè)主鍵值都必須存在(例如,在現(xiàn)有數(shù)字字段被用作自然鍵的情況下)。在一些實(shí)現(xiàn)方式中,不同的壓縮塊在一些情況下可以包括目標(biāo)數(shù)量的記錄,而在例外情況下可以包括更多或更少的記錄。例如,如果記錄的集合以其主鍵值與在排序次序中接下來的記錄的主鍵值不同的記錄結(jié)束,則那些記錄被用來生成壓縮塊。如果記錄的集合以其主鍵值與在排序次序中接下來的記錄的主鍵值相同的記錄結(jié)束,則具有該主鍵值的所有附加記錄被添加到該集合。以此方式,相同的主鍵值不從一個(gè)壓縮塊跨到下一個(gè)壓縮塊。加索引和搜索模塊108對(duì)于每個(gè)壓縮塊生成索引文件204中的條目。索引條目包括鍵字段206,其例如通過記錄的對(duì)應(yīng)未壓縮集合中第一個(gè)記錄的主鍵來標(biāo)識(shí)每個(gè)壓縮塊。條目還包括位置字段208,其標(biāo)識(shí)所標(biāo)識(shí)的壓縮塊在壓縮記錄文件202中的存儲(chǔ)位置。例如,位置字段可以包含以記錄存儲(chǔ)裝置106中絕對(duì)地址的形式、或者以從記錄存儲(chǔ)裝置106中壓縮記錄文件202的開頭的地址的偏移的形式的指針。為了搜索壓縮記錄文件202中的給定記錄,模塊108可以基于鍵字段206執(zhí)行索引文件204的搜索(例如,二值搜索)。對(duì)于提供的(例如,由代理之一提供的)給定鍵值,模塊108定位包括與包括所提供的鍵值的鍵值范圍對(duì)應(yīng)的記錄的塊。具有所提供的鍵值的記錄可能或者可能不包括在被用來生成所定位的塊的記錄的集合中,但是如果該記錄存在于記錄200中,則由于記錄200是按照主鍵值被排序的,因此必將包括該記錄。模塊108然后解壓縮所定位的塊并且搜索具有所提供的鍵值的記錄。在主鍵值對(duì)于每個(gè)記錄不唯一的情況下,模塊108可能在壓縮塊中找到具有所提供的鍵值的多個(gè)記錄。在鍵字段206包括集合中第一個(gè)記錄的主鍵的示例中,模塊108搜索分別具有比所提供的鍵值更早和更晚的鍵值的兩個(gè)連續(xù)索引條目,并且返回與具有更早的鍵值的條目對(duì)應(yīng)的塊。在一些情況下,所提供的鍵值可能與索引條目中的鍵值相同,在此情況下,模塊108返回與該條目對(duì)應(yīng)的塊。
在不同的實(shí)現(xiàn)方式中,對(duì)于索引文件204中的條目而言,存在標(biāo)識(shí)與生成對(duì)應(yīng)塊所依據(jù)的記錄對(duì)應(yīng)的鍵值范圍的不同的方式。如在圖2A中所示的實(shí)現(xiàn)方式中,鍵值范圍可以是被用來生成塊的記錄的兩個(gè)極端鍵值(例如按字母表順序的主鍵值的排序序列中的第一個(gè)和最后,或者按數(shù)字順序的主鍵值的排序序列中的最小值和最大值)。索引條目可以包括定義該范圍的極值的任一個(gè)或兩個(gè)。在一些實(shí)現(xiàn)方式中,如果索引條目包括定義用于給定塊的范圍的最小鍵值,則與壓縮記錄文件中的最后塊關(guān)聯(lián)的最后索引條目也可以包括定義用于該塊的范圍的最大鍵值。然后,當(dāng)搜索該壓縮記錄文件時(shí),該最大鍵值可以被用來確定何時(shí)給定鍵值超出范圍。替代地,鍵值范圍可以是超過被用來生成塊的記錄的鍵值而延伸的范圍。例如,在從具有介于I和1000之間的數(shù)字主鍵值的記錄生成塊的情況下,在記錄中所表示的最小鍵值可能大于I并且在記錄中所表示的最大鍵值可能小于1000。索引條目可以包括定義該范圍的極值I和1000中的任一個(gè)或兩個(gè)。當(dāng)在已經(jīng)處理了初始記錄組以生成壓縮記錄文件之后附加記錄來到時(shí),那些記錄可以被存儲(chǔ)在緩存器中并且以未壓縮形式被搜索。替代地,附加記錄組可以被以增量方式處理并且被存儲(chǔ)為可由附加索引文件訪問的附加壓縮記錄文件。在一些情況下,即使壓縮較少數(shù)量的附加記錄可能不提供存儲(chǔ)大小的大量減少,壓縮附加記錄以保持訪問記錄的統(tǒng)一例程仍是有利的??梢砸砸?guī)則的時(shí)間間隔(例如,每30秒或者每5分鐘),或者在已經(jīng)接收了預(yù)定數(shù)量的附加記錄(例如,每1000個(gè)記錄或者每10000個(gè)記錄)之后重復(fù)地處理附加記錄。如果輸入記錄是基于時(shí)間間隔被處理的,則在一些間隔中,可能沒有輸入記錄,或者有全部被壓縮到單個(gè)壓縮塊中的較少數(shù)量的記錄。參考圖2B,在已經(jīng)生成了初始?jí)嚎s記錄文件202之后接收到附加記錄的示例中,附加壓縮記錄文件210可以被添加到初始?jí)嚎s記錄文件202以形成復(fù)合壓縮記錄文件211。系統(tǒng)100按照主鍵值對(duì)附加記錄排序,并且壓縮N個(gè)記錄的集合以生成壓縮記錄文件210的壓縮塊。被標(biāo)記為塊91的添加文件210中的第一壓縮塊具有主鍵值BA — FF。模塊108生成附加索引文件212,其包括可以被用來搜索在添加文件210中表示的附加記錄的條目。新索引文件212可以被添加到之前的索引文件204??梢蕴砑尤魏螖?shù)量的壓縮記錄文件,以便形成復(fù)合壓縮記錄文件。如果加索引和搜索模塊108在復(fù)合壓縮記錄文件內(nèi)搜索具有給定鍵值的記錄,則模塊108使用對(duì)應(yīng)的索引文件來搜索每個(gè)添加壓縮記錄文件內(nèi)的記錄。替代地,請(qǐng)求給定記錄的代理可以指定要搜索的復(fù)合壓縮記錄文件中的壓縮記錄文件的某種數(shù)量(例如,10個(gè)最近生成的壓縮記錄文件,或者在前一小時(shí)內(nèi)生成的任何壓縮記錄文件)。在給定時(shí)間量(例如,每24小時(shí))之后或者在已經(jīng)添加了給定數(shù)量的壓縮記錄文件之后,系統(tǒng)100可以合并文件以生成源自復(fù)合壓縮記錄文件的單個(gè)壓縮記錄文件和新的對(duì)應(yīng)索引文件。在合并之后,可以搜索單個(gè)索引以定位可能包含給定記錄的壓縮塊,產(chǎn)生更高效的記錄訪問。在合并時(shí)間,系統(tǒng)100解壓縮所述壓縮記錄文件以恢復(fù)對(duì)應(yīng)的排序記錄的集合,按照主鍵值對(duì)記錄排序,并且生成新的壓縮記錄文件和索引。由于每個(gè)所恢復(fù)的記錄集合已經(jīng)被排序,因此通過根據(jù)主鍵值融合之前排序的列表來生成單個(gè)排序記錄的集合,可以聞效地對(duì)記錄排序。參考圖2C,復(fù)合壓縮記錄文件211包括初始?jí)嚎s記錄文件202、附加壓縮記錄文件 210、以及多個(gè)附加壓縮記錄文件220、221、…,附加壓縮記錄文件220、221、…的數(shù)量取決于已經(jīng)接收到多少附加記錄以及已經(jīng)多么頻繁地處理記錄。每個(gè)壓縮記錄文件可以具有關(guān)聯(lián)的索引文件,其可以被用來搜索該文件的壓縮塊中的給定記錄。在該示例中,壓縮記錄文件220之一足夠小從而僅具有單個(gè)壓縮塊(塊95),因此不必需要關(guān)聯(lián)的索引文件,但是可以具有指示該塊中的主鍵值的范圍以及其在存儲(chǔ)裝置中的位置的關(guān)聯(lián)數(shù)據(jù)。在合并之后,從不同的添加壓縮記錄文件中恢復(fù)的記錄被處理以生成單個(gè)壓縮記錄文件230。在單調(diào)分配的主鍵的情況下,不僅在壓縮記錄文件內(nèi)自動(dòng)地對(duì)記錄排序,而且還從一個(gè)文件到下一個(gè)文件自動(dòng)地對(duì)記錄排序,這排除了合并文件以便在單個(gè)索引搜索中訪問記錄的需要。參考圖2D,系統(tǒng)100接收通過按照到達(dá)順序?yàn)橛涗涀鳛橹麈I而分配的連續(xù)整數(shù)標(biāo)識(shí)的記錄250的集合。因此,記錄250按照主鍵被自動(dòng)排序。初始?jí)嚎s記錄文件252包括壓縮塊,在該示例中每個(gè)壓縮塊包括100個(gè)記錄,并且索引文件254包括用于壓縮塊中第一個(gè)記錄的主鍵值的鍵字段256、以及標(biāo)識(shí)對(duì)應(yīng)的存儲(chǔ)位置的位置字段258。由于在初始?jí)嚎s記錄文件252已經(jīng)被生成之后到達(dá)的記錄將自動(dòng)地具有在排序次序中更晚的主鍵值,因此添加壓縮記錄文件260和對(duì)應(yīng)的索引文件262不需要被合并來使能基于單個(gè)索引搜索的高效記錄訪問。例如,索引文件262可以簡單地被添加到索引文件254,并且這兩個(gè)索引可以一起被搜索(例如,在單個(gè)二值搜索中)以在壓縮記錄文件252或260的任一個(gè)中定位壓縮塊。復(fù)合壓縮記錄文件261可以可選地被合并以消除可能已經(jīng)被插入在壓縮記錄文件252結(jié)尾的不完整塊。在這樣的合并中,僅僅第一文件252中最后的壓縮塊將需要被解壓縮,并且取代融合記錄的未壓縮集合,記錄的集合可以簡單地被合并以形成新的記錄的排序集合,所述新的記錄的排序集合要被劃分為100個(gè)記錄的集合,其然后再被壓縮以形成新的壓縮記錄文件。使用連續(xù)的整數(shù)合成主鍵值的另一優(yōu)點(diǎn)是如果記錄將基于主鍵值被分區(qū),則由于在鍵值之間沒有空隙,因此分區(qū)可以被自動(dòng)地平衡??梢允褂枚喾N技術(shù)中的任何技術(shù)來更新記錄,并且使可能存在于壓縮記錄文件中的記錄的任何之前版本無效。在一些情況下,記錄無需被獨(dú)立地移除或更新(例如,日志、交易、電話呼叫)。在這些情況下,例如從壓縮記錄文件的開頭開始,在預(yù)定數(shù)量的壓縮塊的組中移除并且丟棄或存檔舊的記錄。在一些情況下,可以移除整個(gè)壓縮記錄文件。在一些情況下,通過附加新的更新記錄以存儲(chǔ)在壓縮塊中來更新記錄的一個(gè)或更多個(gè)值,并且記錄的之前接收的版本(具有相同的主鍵值)可以被保留存儲(chǔ)在不同的壓縮塊中。然后可能存在記錄的多個(gè)版本,并且使用某種技術(shù)來確定哪個(gè)是記錄的有效版本。例如,在任何壓縮記錄文件中出現(xiàn)的最后版本(最近接收的)可以隱含地或明確地被指示為有效版本,并且任何其它版本是無效的。在此情況下搜索具有給定主鍵的記錄可以包括找到由該主鍵標(biāo)識(shí)的在出現(xiàn)次序上最后的記錄。替代地,通過寫入“無效記錄”(其指示記錄的任何之前本均不是有效的),可以在無需附加記錄的新版本的情況下使記錄無效。系統(tǒng)100通過不同的處理來傳達(dá)對(duì)存儲(chǔ)在記錄存儲(chǔ)裝置106中的壓縮記錄文件的訪問??梢允褂枚喾N同步技術(shù)中的任一種來傳達(dá)對(duì)一個(gè)或更多個(gè)壓縮記錄文件內(nèi)的壓縮塊的訪問。系統(tǒng)100確保修改文件的任何處理(例如,通過添加或合并數(shù)據(jù))不相互影響。例如,如果在合并正在發(fā)生時(shí)新記錄到達(dá),則系統(tǒng)100可以等待直至合并處理完成,或者可以生成壓縮塊并且在將它們添加到現(xiàn)有壓縮記錄文件之前將它們暫時(shí)存儲(chǔ)。從壓縮記錄文件進(jìn)行讀取的處理可以裝載文件的完整部分,并且可以忽略可能經(jīng)過修改的任何不完整部 分。系統(tǒng)100存儲(chǔ)使得能夠基于記錄的除了主鍵之外的屬性來搜索記錄的附加數(shù)據(jù)。壓縮記錄文件的輔索引包括基于被指定為輔鍵的屬性的值而提供一個(gè)或更多個(gè)主鍵值的信息。被指定為輔鍵的每個(gè)屬性可以與對(duì)應(yīng)的輔索引關(guān)聯(lián)。例如,每個(gè)輔索引可以被組織為表格,該表格具有按照關(guān)聯(lián)的輔鍵排序的行。每行包括輔鍵值以及包括該輔鍵值的記錄的一個(gè)或更多個(gè)主鍵值。因此,如果代理發(fā)起對(duì)包括給定輔鍵值的任何記錄的搜索,則系統(tǒng)100查找(多個(gè))主鍵以用于在壓縮記錄文件的索引中搜索包括所述(多個(gè))記錄的(多個(gè))壓縮塊。輔索引可以較大(例如,記錄的數(shù)量的量級(jí)),并且在一些情況下可以存儲(chǔ)在存儲(chǔ)壓縮記錄文件的存儲(chǔ)介質(zhì)中。在一些情況下,被指定為輔鍵的屬性的值可以對(duì)于每個(gè)記錄唯一。在這種情況下,在輔鍵和主鍵之間存在一一對(duì)應(yīng),并且接口模塊112可以向代理呈現(xiàn)輔鍵屬性,好像它是
主鍵一樣。在新的壓縮記錄文件被添加到復(fù)合壓縮記錄文件時(shí),可以更新每個(gè)輔索引。替代地,對(duì)于每個(gè)壓縮記錄文件,輔鍵可以與不同的輔索引關(guān)聯(lián),并且當(dāng)壓縮記錄文件被合并時(shí)輔索引可以被合并到單個(gè)輔索引中。篩選數(shù)據(jù)結(jié)構(gòu)116可以與壓縮記錄文件關(guān)聯(lián),以便確定包括給定屬性值的記錄被包括在文件的壓縮塊中的概率。例如,使用重疊編碼簽名(OES)來作為篩選數(shù)據(jù)結(jié)構(gòu),使得系統(tǒng)100能夠確定具有給定鍵值(主鍵或輔鍵)的記錄必定不存在(“否定”結(jié)果),還是具有給定鍵值的記錄具有出現(xiàn)的概率(“肯定”結(jié)果)。對(duì)于肯定結(jié)果,系統(tǒng)訪問適當(dāng)?shù)膲嚎s塊以便檢索記錄(“確認(rèn)肯定”結(jié)果),或者確定該記錄不存在(“錯(cuò)誤肯定”結(jié)果)。對(duì)于否定結(jié)果,系統(tǒng)可以向代理給出否定結(jié)果而無需花費(fèi)時(shí)間來解壓縮該壓縮塊并搜索不存在的記錄。OES的大小影響肯定結(jié)果是錯(cuò)誤肯定的頻繁程度,OES大小越大,對(duì)于給定數(shù)量的區(qū)別(即,唯一)可能鍵值,通常產(chǎn)生越少的錯(cuò)誤肯定結(jié)果。對(duì)于給定OES大小,區(qū)別可能鍵值越少,通常產(chǎn)生越少的錯(cuò)誤肯定。其它類型的篩選數(shù)據(jù)結(jié)構(gòu)是可能的??梢詾榘瑝嚎s塊集合的每個(gè)壓縮記錄文件提供用于給定主或輔鍵的篩選數(shù)據(jù)結(jié)構(gòu)。替代地,可以為每個(gè)壓縮塊提供用于鍵的篩選數(shù)據(jù)結(jié)構(gòu),或者可以為壓縮記錄文件內(nèi)的多個(gè)壓縮塊集合的每個(gè)提供用于鍵的篩選數(shù)據(jù)結(jié)構(gòu)。圖3A和3B示出了提供對(duì)于示例性O(shè)ES篩選數(shù)據(jù)結(jié)構(gòu)的各種大小(列)和在壓縮記錄文件中表示的區(qū)別鍵值的各種數(shù)量(行)、獲得鍵值的錯(cuò)誤肯定結(jié)果的概率值的表格。對(duì)于0ES,取決于OES的大小和區(qū)別鍵值的數(shù)量,可以在OES的同一部分中指示出現(xiàn)多于一個(gè)鍵值,對(duì)于那些鍵值之一而言,如果出現(xiàn)其它鍵值,則潛在地導(dǎo)致對(duì)于所述鍵值的錯(cuò)誤肯定結(jié)果。該示例性O(shè)ES的大小從210 = 1024比特(圖3A的表格中)到228 = 256兆比特(圖3B的表格中)變化。區(qū)別鍵值的數(shù)量從100 (圖3A的表格中)到100,000, 000 (圖3B的表格中)變化。對(duì)于兩個(gè)表格,右上方的空單元對(duì)應(yīng)于0%,左下方的空單元對(duì)應(yīng)于100%。對(duì)于錯(cuò)誤肯定概率較低(例如,接近零)的單元,篩選數(shù)據(jù)結(jié)構(gòu)可能比提供足夠篩選所需的大小更大。對(duì)于錯(cuò)誤肯定概率顯著(例如,>50%)的單元,篩選數(shù)據(jù)結(jié)構(gòu)可能太小而不能提供足夠篩選。該示例對(duì)應(yīng)于每個(gè)鍵值使用四個(gè)散列碼來生成OES的技術(shù)。OES篩選數(shù)據(jù)結(jié)構(gòu)的其它示例可能對(duì)于給定數(shù)量的區(qū)別鍵產(chǎn)生不同的錯(cuò)誤肯定概率表格。
由于可能不知道在壓縮記錄文件中表示的區(qū)別鍵值的數(shù)量,因此系統(tǒng)100可以基于生成該文件所依據(jù)的記錄的數(shù)量來選擇用于壓縮記錄文件的篩選數(shù)據(jù)結(jié)構(gòu)的大小。在選擇大小時(shí),在降低錯(cuò)誤肯定概率和存儲(chǔ)篩選數(shù)據(jù)結(jié)構(gòu)所需的存儲(chǔ)器空間之間存在折衷。該折衷的一個(gè)因素是搜索不存在的鍵值的可能。如果要查找的鍵值大多數(shù)很可能出現(xiàn)在解壓縮記錄中,則可能根本不需要篩選數(shù)據(jù)結(jié)構(gòu)。如果存在將找不到鍵值的顯著概率,則向相對(duì)大的篩選數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間可能節(jié)省相當(dāng)時(shí)間。與壓縮記錄文件關(guān)聯(lián)的篩選數(shù)據(jù)結(jié)構(gòu)的大小可以取決于該文件對(duì)應(yīng)于記錄的初始數(shù)據(jù)庫、合并的較大數(shù)據(jù)庫、還是對(duì)應(yīng)于對(duì)較大數(shù)據(jù)庫的較小更新。對(duì)于在規(guī)則的更新間隔期間添加的壓縮記錄文件,可以使用相對(duì)較小的篩選數(shù)據(jù)結(jié)構(gòu),這是因?yàn)樵诿總€(gè)更新中通常存在較少的區(qū)別鍵值。而且,較小的大小可以降低隨著在許多更新之后壓縮記錄文件的數(shù)量增長而需要的存儲(chǔ)空間。篩選數(shù)據(jù)結(jié)構(gòu)的大小可以基于更新中的記錄和/或區(qū)別鍵值的期望數(shù)量,并且基于更新的期望數(shù)量。例如,如果在24小時(shí)時(shí)段中每五分鐘添加一次更新文件,則在一天結(jié)束時(shí)將有288個(gè)復(fù)合壓縮記錄文件。至少一個(gè)錯(cuò)誤肯定結(jié)果的概率將是來自圖3A和3B表格的適當(dāng)值的288倍(假設(shè)不同更新的結(jié)果是獨(dú)立的)。在合并之后,對(duì)于合并的壓縮記錄文件而言,因?yàn)閰^(qū)別鍵值的數(shù)量可能顯著增加,因此更大的篩選數(shù)據(jù)結(jié)構(gòu)可能是合適的。壓縮記錄文件可以具有用于主鍵和用于每個(gè)輔鍵、或者用于鍵的某些子集合的篩選數(shù)據(jù)結(jié)構(gòu)。例如,系統(tǒng)100可以提供用于主鍵并且僅僅用于在記錄搜索中期望被最頻繁使用的那些輔鍵的篩選數(shù)據(jù)結(jié)構(gòu)。圖4A示出了用于搜索具有給定主鍵值的一個(gè)或更多個(gè)記錄的例程400的流程圖。例程400確定402是否存在與第一壓縮記錄文件相關(guān)的篩選數(shù)據(jù)結(jié)構(gòu)。如果存在,則例程400處理404該篩選數(shù)據(jù)結(jié)構(gòu)以獲得肯定或否定結(jié)果。如果給定主鍵值沒有通過篩選(否定結(jié)果),則例程400檢查406下一個(gè)壓縮記錄文件,并且如果所述下一個(gè)壓縮記錄文件存在,則在該文件上重復(fù)例程。如果給定主鍵值通過篩選(肯定結(jié)果),則例程400在索引中搜索
408可能包含具有給定主鍵值的記錄的塊。如果沒有篩選數(shù)據(jù)結(jié)構(gòu)與壓縮記錄文件關(guān)聯(lián),則例程400搜索408索引而不執(zhí)行篩選。在搜索408索引之后,如果找到了 410與包括給定主鍵值的鍵值范圍關(guān)聯(lián)的壓縮塊,則例程400解壓縮412在由索引條目標(biāo)識(shí)的位置處的塊,并且在作為結(jié)果的記錄中搜索414具有給定主鍵值的一個(gè)或更多個(gè)記錄。該例程然后檢查416下一個(gè)壓縮記錄文件,并且如果所述下一個(gè)壓縮記錄文件存在,則在該文件上重復(fù)例程。如果沒有找到壓縮塊(例如,如果給定主鍵值小于第一個(gè)塊中的最小鍵值,或者大于最后塊中的最大鍵值),則例程400檢查416下一個(gè)壓縮記錄文件,并且如果所述下一個(gè)壓縮記錄文件存在,則在該文件上重復(fù)例程。圖4B示出了用于搜索具有給定輔鍵值的一個(gè)或更多個(gè)記錄的例程450的流程圖。例程450確定452是否存在與第一壓縮記錄文件相關(guān)的篩選數(shù)據(jù)結(jié)構(gòu)。如果存在,則例程450處理454該篩選數(shù)據(jù)結(jié)構(gòu)以獲得肯定或否定結(jié)果。如果給定輔鍵值沒有通過篩選(否定結(jié)果),則例程450檢查456下一個(gè)壓縮記錄文件,并且如果所述下一個(gè)壓縮記錄文件存在,則在該文件上重復(fù)例程。如果給定輔鍵值通過篩選(肯定結(jié)果),則例程450查找458與包含給定輔鍵的記錄對(duì)應(yīng)的主鍵。如果沒有篩選數(shù)據(jù)結(jié)構(gòu)與壓縮記錄文件關(guān)聯(lián),則例程450 查找458主鍵而不執(zhí)行篩選。對(duì)于找到的每個(gè)主鍵,例程450在索引中搜索460可能包含具有給定主鍵值的記錄的塊。在搜索460索引之后,如果找到了 462與包括給定主鍵值的鍵值范圍關(guān)聯(lián)的壓縮塊,則例程450解壓縮464在由索引條目標(biāo)識(shí)的位置處的塊,并且在作為結(jié)果的記錄中搜索466具有給定主鍵值的一個(gè)或更多個(gè)記錄。該例程然后檢查468下一個(gè)壓縮記錄文件,并且如果所述下一個(gè)壓縮記錄文件存在,則在該文件上重復(fù)例程。如果沒有找到壓縮塊,則例程450檢查468下一個(gè)壓縮記錄文件,并且如果所述下一個(gè)壓縮記錄文件存在,則在該文件上重復(fù)例程。例程400或例程450可以按照出現(xiàn)順序返回所發(fā)現(xiàn)的具有給定主鍵或輔鍵的多個(gè)記錄,或者在一些情況下,僅僅返回記錄的最后版本。如上所述,可以作為篩選數(shù)據(jù)結(jié)構(gòu)的大小(越大的數(shù)據(jù)結(jié)構(gòu)將降低錯(cuò)誤肯定的概率)以及在該數(shù)據(jù)結(jié)構(gòu)中表示的用于標(biāo)識(shí)在塊中存儲(chǔ)的記錄組的區(qū)別鍵的數(shù)量(越大數(shù)量的區(qū)別鍵將增加錯(cuò)誤肯定的概率,區(qū)別鍵的數(shù)量傾向于隨著使用篩選數(shù)據(jù)結(jié)構(gòu)的塊的數(shù)量而增加)的函數(shù)而度量篩選數(shù)據(jù)結(jié)構(gòu)返回錯(cuò)誤肯定的概率。因而,控制篩選數(shù)據(jù)結(jié)構(gòu)的大小是影響錯(cuò)誤肯定結(jié)果的概率的一種方式。然而,選擇比實(shí)現(xiàn)可接受的錯(cuò)誤肯定概率所需的大小更大的大小,可能使用不必要的大量的珍貴存儲(chǔ)空間。可以例如基于用戶輸入而確定可接受的概率。在一些實(shí)現(xiàn)方式中,為了在接收到記錄時(shí)選擇給定記錄組所需的篩選數(shù)據(jù)結(jié)構(gòu)的適當(dāng)大小,在記錄正被接收并存儲(chǔ)在壓縮塊中的同時(shí)累積與這些記錄相關(guān)的區(qū)別鍵?;谠摾鄯e,然后可以通過對(duì)存儲(chǔ)器中的區(qū)別鍵的數(shù)量進(jìn)行計(jì)數(shù)來確定實(shí)現(xiàn)預(yù)定的錯(cuò)誤肯定概率P所需的篩選數(shù)據(jù)結(jié)構(gòu)的大小。然后,記錄處理模塊102生成所確定大小的篩選數(shù)據(jù)。因此,直至該組中的所有記錄都已經(jīng)被接收到之后,才創(chuàng)建篩選數(shù)據(jù)結(jié)構(gòu)。因此,可以基于所累積的區(qū)別鍵的數(shù)量來確定篩選數(shù)據(jù)結(jié)構(gòu)的大小,并且為了實(shí)現(xiàn)概率P,篩選數(shù)據(jù)結(jié)構(gòu)的大小將不一定很大。然而,在存儲(chǔ)器中存儲(chǔ)鍵使用了在一些系統(tǒng)中可能相對(duì)受限的系統(tǒng)資源(例如,易失性存儲(chǔ)器)。盡管鍵還可以被存儲(chǔ)在更多的冗余存儲(chǔ)裝置(例如,非易失性存儲(chǔ)器)中,但是該技術(shù)將增加訪問所存儲(chǔ)的鍵的輸入/輸出(I/o)成本。在一些實(shí)現(xiàn)方式中,在該組中的記錄正在被接收時(shí)可以自適應(yīng)地生成一個(gè)或更多個(gè)篩選數(shù)據(jù)結(jié)構(gòu),以便限制錯(cuò)誤肯定率,而無需等待累積不確定的和/或大數(shù)量的區(qū)別鍵,并且也無需等待直至已經(jīng)接收到所有記錄。在該自適應(yīng)技術(shù)中,接收該記錄組,記錄的鍵按照排序次序被排序。例如,在一些情況下,記錄具有自然主鍵,所述自然主鍵已知要被記錄處理模塊102接收并且已經(jīng)根據(jù)它們的鍵被排序。在其它情況下,記錄具有復(fù)合主鍵,所述復(fù)合主鍵是由記錄處理模塊102分配的,使得它們按照它們被分配的鍵(例如,作為遞增整數(shù)、或時(shí)間戳、或其它單調(diào)增加值的鍵)而被排序。如果所分配的復(fù)合鍵也是唯一的,則不需要將區(qū)別鍵存儲(chǔ)在存儲(chǔ)器中來以確定已經(jīng)接收了多少區(qū)別鍵,相反,所接收到的記錄的數(shù)量的計(jì)數(shù)可以被增加以確定已經(jīng)接收到多少區(qū)別鍵。在一些情況下,記錄組對(duì)應(yīng)于要以批處理模式處理的單批記錄。例如可以通過預(yù)定令牌或消息來表明該批中的最后記錄。在其它情況下,記錄組對(duì)應(yīng)于通過重復(fù)定界符分離的連續(xù)流中的多個(gè)被定界部分之一。在任何連續(xù)的定界符對(duì)之間,如上所述,根據(jù)鍵對(duì)記錄組進(jìn)行排序。替代需要等待直至已經(jīng)接收到該組中的所有記錄才生成用于該組的篩選數(shù)據(jù)結(jié)·構(gòu),可以在正在接收記錄時(shí),記錄處理模塊102開始生成預(yù)定大小為S的篩選數(shù)據(jù)結(jié)構(gòu)。一旦確定了大小,則可以在記錄到達(dá)時(shí),例如通過設(shè)置位圖的比特而構(gòu)建篩選數(shù)據(jù)結(jié)構(gòu)。隨著與篩選數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的區(qū)別鍵的數(shù)量增長(以及所設(shè)置的比特的數(shù)量增長),錯(cuò)誤肯定概率也增長。如果在錯(cuò)誤肯定概率達(dá)到P之前到達(dá)該組的結(jié)束,并且如果需要的話,則可以基于區(qū)別鍵的實(shí)際數(shù)量而減小篩選數(shù)據(jù)結(jié)構(gòu)的大小,以便實(shí)現(xiàn)更接近P的錯(cuò)誤肯定概率。如果錯(cuò)誤肯定概率達(dá)到P (基于到目前為止的區(qū)別鍵的數(shù)量),則可以存儲(chǔ)第一篩選數(shù)據(jù)結(jié)構(gòu),并且可以開始生成大小為S的第二篩選數(shù)據(jù)結(jié)構(gòu)。可以丟棄存儲(chǔ)在存儲(chǔ)器中的任何區(qū)別鍵,以便為累積與接下來所接收的記錄相關(guān)的新區(qū)別鍵而騰出空間。該處理可以繼續(xù),直至接收到該組中的最后記錄為止。對(duì)于給定記錄組,將存在一個(gè)或更多個(gè)篩選數(shù)據(jù)結(jié)構(gòu),每個(gè)篩選數(shù)據(jù)結(jié)構(gòu)具有被選擇來實(shí)現(xiàn)預(yù)定的錯(cuò)誤肯定概率(例如,等于或接近P)的大小,并且每個(gè)篩選數(shù)據(jù)結(jié)構(gòu)在無需累積任意大數(shù)量的區(qū)別鍵或者等待直至已經(jīng)接收到最后記錄的情況下被構(gòu)建。由于按照該組中記錄的鍵的排序次序接收到記錄,因此用于該組的每個(gè)篩選數(shù)據(jù)結(jié)構(gòu)(如果存在多個(gè)篩選數(shù)據(jù)結(jié)構(gòu))對(duì)應(yīng)于不同的非重疊鍵值范圍。可以基于多種因素(諸如系統(tǒng)100的特性)中的任何因素來選擇大小S。例如,大小S可以基于在該系統(tǒng)中可以高效訪問的最大大小。在一些實(shí)現(xiàn)方式中,從主鍵生成預(yù)定大小的散列值(例如,32比特散列),并且可以基于該預(yù)定散列值大小來選擇大小S。在一些實(shí)現(xiàn)方式中,可以并行地構(gòu)建兩個(gè)(或更多個(gè))篩選數(shù)據(jù)結(jié)構(gòu)。例如,可以(例如利用實(shí)現(xiàn)概率P的區(qū)別鍵的數(shù)量K)來構(gòu)建大小S,并且可以(例如利用實(shí)現(xiàn)概率P的區(qū)別鍵的數(shù)量K/2)來構(gòu)建大小S/2。基于該組中記錄的區(qū)別鍵的實(shí)際數(shù)量,可以選擇數(shù)據(jù)結(jié)構(gòu)之一(并且如果需要的話可以將其減小到適當(dāng)大小)并且可以丟棄其它數(shù)據(jù)結(jié)構(gòu)。例如,如果區(qū)別鍵的數(shù)量小于或等于K/2,則可以使用大小為S/2的篩選數(shù)據(jù)結(jié)構(gòu),并且如果需要的話可以將其減小以實(shí)現(xiàn)概率P。如果區(qū)別鍵的數(shù)量介于K和K/2之間,則可以使用大小為S的篩選數(shù)據(jù)結(jié)構(gòu),并且如果需要的話可以將其減小以實(shí)現(xiàn)概率P。如果區(qū)別鍵的數(shù)量超過K,則可以存儲(chǔ)大小為S的篩選數(shù)據(jù)結(jié)構(gòu)并且可以構(gòu)建第二篩選數(shù)據(jù)結(jié)構(gòu)(并且可以使用相同的并行技術(shù)來構(gòu)建)。并行地構(gòu)建第二篩選數(shù)據(jù)結(jié)構(gòu)的成本可能低于通過對(duì)于區(qū)別鍵的實(shí)際數(shù)量更接近實(shí)現(xiàn)期望概率P所需的最優(yōu)大小而實(shí)現(xiàn)的節(jié)省。在一些實(shí)現(xiàn)方式中,對(duì)于記錄的數(shù)量較小(并且因此區(qū)別鍵的數(shù)量較小)的情況,可以進(jìn)一步降低自適應(yīng)地生成篩選數(shù)據(jù)結(jié)構(gòu)的時(shí)間。以大小為S/2的篩選數(shù)據(jù)結(jié)構(gòu)開始并且然后將其減少到基于區(qū)別鍵的數(shù)量的適當(dāng)大小,可能在一些情況下由于執(zhí)行減少所需的操作(例如,使用“對(duì)折”操作,使用6對(duì)折可以實(shí)現(xiàn)從216比特的大小減少到21°比特的大小)的數(shù)量而相對(duì)較慢。取代在正在接收記錄時(shí)并行地生成多個(gè)篩選數(shù)據(jù)結(jié)構(gòu),可以在存儲(chǔ)器內(nèi)的鍵緩存器中累積鍵,直至該鍵緩存器變滿或者直至在該組中沒有更多記錄為止。如果鍵緩存器變滿,則可以使用所緩存的鍵來構(gòu)建適當(dāng)大小的(例如大小S的)篩選數(shù)據(jù)結(jié)構(gòu)。鍵緩存器然后可以被丟棄,并且然后在正在接收組中所有隨后記錄時(shí),可以使用該組中所有隨后記錄的鍵來生成另一篩選數(shù)據(jù)結(jié)構(gòu)。如果在鍵緩存器變滿之前接收到該組中的所有記錄,則可以從所緩存的鍵生成適當(dāng)大小的篩選數(shù)據(jù)結(jié)構(gòu),避免了在該(小數(shù)量的區(qū)別鍵)情況下否則將需要的任何減少操作。
下面是生成作為最大大小S為216比特(或8k字節(jié))的位圖的篩選數(shù)據(jù)結(jié)構(gòu)的示例,所述篩選數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)于用于假定數(shù)量的區(qū)別鍵的給定目標(biāo)錯(cuò)誤肯定概率。在該示例中,16比特地址足以尋址該位圖中的每個(gè)比特。在輸入記錄被接收到時(shí),它們的鍵被進(jìn)行散列以生成32比特散列值。該散列的最低有效16比特被用來確定該比特在為對(duì)應(yīng)鍵設(shè)置的位圖中的位置。在已經(jīng)接收到該組中的所有記錄之后,例如基于區(qū)別鍵的數(shù)量,如果最優(yōu)位圖大小為21°比特,則位圖可以被從216比特減少到21°比特。如果大小為216的位圖被劃分為相等大小的兩部分,則存在兩個(gè)位圖,每個(gè)大小為215比特。使用邏輯“或(0R)”操作將兩個(gè)位圖的每個(gè)比特組合在一起,產(chǎn)生大小為215比特的對(duì)折位圖。這是一個(gè)對(duì)折操作。再將該對(duì)折操作重復(fù)五次(總共六個(gè)對(duì)折操作),給出了大小為21°比特的位圖,使用32比特散列值的最低有效10比特可以對(duì)該位圖進(jìn)行尋址。大小為21°比特的位圖比大小為216比特的位圖具有更高的錯(cuò)誤肯定率。然而,由于接收到的區(qū)別鍵比假設(shè)數(shù)量的區(qū)別鍵更少,因此該位圖仍實(shí)現(xiàn)給定的目標(biāo)錯(cuò)誤肯定概率。使用生成篩選數(shù)據(jù)結(jié)構(gòu)的該自適應(yīng)方法,可能存在多個(gè)篩選數(shù)據(jù)結(jié)構(gòu),每個(gè)被用來篩選按照主鍵的排序次序存儲(chǔ)在一組塊中的記錄組的不同子集。因此,多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每個(gè)與該組塊中的不同對(duì)應(yīng)子集關(guān)聯(lián),并且與對(duì)應(yīng)于存儲(chǔ)在這些塊中的記錄的不同范圍的鍵值關(guān)聯(lián)。使用用于確定給定記錄可能存儲(chǔ)在哪個(gè)塊中的索引,可以定位和搜索用于該組中(例如存儲(chǔ)在單個(gè)壓縮記錄文件中)所有記錄的塊。在“塊索引搜索”中,(例如,使用二值搜索)可能找到可能包含給定記錄的單個(gè)塊。在一些情況下,當(dāng)搜索索引時(shí),不需要定位可能包含給定記錄的單個(gè)塊,相反可能僅需要執(zhí)行“塊范圍索引搜索”以確定給定記錄的鍵是否落入跨越由篩選數(shù)據(jù)結(jié)構(gòu)中的對(duì)應(yīng)一個(gè)所篩選的多個(gè)塊的鍵值范圍內(nèi),如下面更具體描述的。為了便于該塊范圍索引搜索,加索引和搜索模塊108可以與每個(gè)篩選數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)地存儲(chǔ)對(duì)應(yīng)的鍵值范圍的指示,如下面更具體描述的。通過檢查與該組塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每一個(gè),并且在至少一個(gè)肯定結(jié)果的情況下然后搜索索引以確定哪個(gè)塊可能包含該記錄,可以使用例程400和450來搜索記錄。然而,由于肯定結(jié)果可能是錯(cuò)誤肯定,因此在定位并解壓縮塊以找到記錄(如果被不必要地執(zhí)行,則其是所采取的可能顯著減緩搜索處理的費(fèi)力動(dòng)作)之前,可以采取其它步驟以捕捉至少一些錯(cuò)誤肯定。例如,可以使用塊范圍索引搜索來確定該記錄的鍵是否落入與給出肯定結(jié)果的篩選數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)的鍵值范圍內(nèi)。如果該鍵值沒有落入該鍵值范圍內(nèi),則該肯定結(jié)果必然是錯(cuò)誤肯定。如果該鍵值落入該鍵值范圍內(nèi),則錯(cuò)誤肯定未被排除,并且加索引和搜索模塊108執(zhí)行塊索引搜索以找到特定塊用于解壓縮并搜索具有給定鍵的記錄。檢查多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每一個(gè)以搜索具有給定鍵的記錄的結(jié)果是錯(cuò)誤肯定概率被復(fù)合,并且隨著所搜索的篩選數(shù)據(jù)結(jié)構(gòu)的數(shù)量增加而增加(相對(duì)于單個(gè)篩選數(shù)據(jù)結(jié)構(gòu)的錯(cuò)誤肯定概率P而言)。對(duì)于小數(shù)量的篩選數(shù)據(jù)結(jié)構(gòu),這可能不明顯,但是對(duì)于大數(shù)量的篩選數(shù)據(jù)結(jié)構(gòu),可以通過首先執(zhí)行塊范圍索引搜索來標(biāo)識(shí)多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中哪個(gè)對(duì)應(yīng)于包括給定鍵的鍵值范圍來提高性能。然后,僅僅對(duì)于所標(biāo)識(shí)的篩選數(shù)據(jù)結(jié)構(gòu)檢查肯定結(jié)果,從而將錯(cuò)誤肯定概率限制到P。下面的示例示出了可以如何執(zhí)行塊范圍索引搜索。每個(gè)篩選數(shù)據(jù)結(jié)構(gòu)被用來篩選存儲(chǔ)在壓縮塊中的記錄的不同的非重疊鍵值范圍,其中每個(gè)壓縮塊由對(duì)應(yīng)索引條目定位。由于每個(gè)索引條目(除了最后索引條目之外)包含由該索引條目定位的壓縮數(shù)據(jù)塊中的第 一個(gè)記錄的鍵值,因此由給定篩選數(shù)據(jù)結(jié)構(gòu)篩選的鍵值范圍可以通過標(biāo)識(shí)與該給定篩選數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的索引條目范圍來確定。在以下的簡化示例中,存在被標(biāo)記為“位圖O”和“位圖I”的兩個(gè)篩選數(shù)據(jù)結(jié)構(gòu)。在該示例中,索引被按照陣列存儲(chǔ),并且可以使用對(duì)應(yīng)的向陣列中的索引依序分配的整數(shù)值(被稱為“索引條目索引”(IEI))來檢索給定索引條目。以下表格為該索引中的六個(gè)索引條目的每個(gè)示出了其對(duì)應(yīng)的IEI值以及哪個(gè)位圖被用來篩選存儲(chǔ)在由特定鍵條目定位的塊中的記錄。該表格以“終止索引條目”結(jié)束,該“終止索引條目”包含由最后標(biāo)準(zhǔn)索引條目定位的壓縮數(shù)據(jù)塊中的最后記錄的鍵值。
位圖IEI索引條目
OO鍵10,偏移O
OI鍵丨丨0,偏移2000
02鍵210,偏移 4000
13鍵310,偏移 6000
I4 鍵410,偏移 8000
I5鍵510,偏移 10000
N/A6鍵610,偏移 N/A位圖O對(duì)應(yīng)于具有從O到2的IEI值的索引條目范圍,位圖I對(duì)應(yīng)于具有從3到5的IEI值的索引條目范圍。每個(gè)索引條目將由所存儲(chǔ)的偏移定位的壓縮數(shù)據(jù)塊中的第一個(gè)記錄的鍵值包含到存儲(chǔ)壓縮塊的文件中。在該示例中,位圖O對(duì)應(yīng)于從10 (包含)到310(不包含)的鍵值范圍,位圖I對(duì)應(yīng)于從310 (包含)到610 (包含)的鍵值范圍。將單個(gè)IEI值與每個(gè)位圖相關(guān)聯(lián)存儲(chǔ),足以指示用于該位圖的對(duì)應(yīng)的鍵值范圍,諸如包含該范圍的第一個(gè)鍵值的索引條目的IEI值。例如,IEI值O可以與位圖相關(guān)聯(lián)地存儲(chǔ),且IEI值3可以與位圖I相關(guān)聯(lián)地存儲(chǔ)。終止索引條目的最終IEI值也可以被存儲(chǔ)來指示用于最后位圖的最后鍵值。用于該示例的篩選數(shù)據(jù)結(jié)構(gòu)和對(duì)應(yīng)的IEI值的結(jié)果列表將是
位圖 IEI
00
13 N/A 6使用該列表、索引、以及位圖來來搜索具有鍵值509的記錄的示例如下。I.塊范圍索引搜索在由該列表中的IEI值(0,3,6)標(biāo)識(shí)的索引條目中包含的所有鍵值(10,310,610)中,搜索(例如,使用二值搜索)與包含最接近但是不大于509的鍵值的索引條目的IEI配對(duì)的位圖。這產(chǎn)生與IEI3配對(duì)的位圖I,這是因?yàn)閷?duì)應(yīng)的索引條目具有鍵值 310,并且 310〈509〈610。2.執(zhí)行篩選相對(duì)于在塊范圍索引搜索中標(biāo)識(shí)的篩選數(shù)據(jù)結(jié)構(gòu)(位圖I)來篩選鍵509。3a.如果篩選產(chǎn)生肯定結(jié)果執(zhí)行塊索引搜索。在與篩選數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的索引條目中包含的所有鍵值(310,410,510,610 )中,搜索(例如,使用二值搜索)包含最接近但是不大于509的鍵值的索引條目。這產(chǎn)生包含鍵值410的索引條目,因?yàn)?10〈509〈610。這意味著與鍵值509匹配的記錄可能存儲(chǔ)在由偏移800處的索引條目定位的壓縮塊中。該壓縮塊被解壓縮以搜索匹配記錄并且如果找到匹配記錄則將其返回。3b.如果篩選產(chǎn)生否定結(jié)果無需執(zhí)行塊索引搜索,這是因?yàn)榫哂墟I值509的記錄沒有被存儲(chǔ)在與位圖I關(guān)聯(lián)的三個(gè)塊的任何塊中。圖5示出了加索引和搜索模塊108的示例實(shí)現(xiàn)方式,其包括用于所接收的記錄組的索引114、以及被如上所述地自適應(yīng)生成的多個(gè)關(guān)聯(lián)的篩選結(jié)構(gòu)502、504和506等等。索引114包含一系列條目,每個(gè)條目包括來自已經(jīng)在其中存儲(chǔ)了所接收的記錄組的一組塊(例如塊506A-506I)中的塊的地址、以及表示在該塊中存儲(chǔ)的第一個(gè)記錄的主鍵的鍵字段。如上所述,塊中的記錄被按照主鍵排序。篩選數(shù)據(jù)結(jié)構(gòu)502、504和506每個(gè)與那些塊中的不同相應(yīng)子集關(guān)聯(lián)(例如,塊集合508A、508B或508C)。在該示例中,為了簡化,每個(gè)子集合包括三個(gè)塊,但是篩選數(shù)據(jù)結(jié)構(gòu)典型地與大數(shù)量的塊關(guān)聯(lián)。在一些實(shí)現(xiàn)方式中,如果與該記錄組關(guān)聯(lián)的篩選數(shù)據(jù)結(jié)構(gòu)的數(shù)量大于預(yù)定閾值(例如,10或100的閾值),則加索引和搜索模塊108執(zhí)行塊范圍索引搜索以便標(biāo)識(shí)篩選數(shù)據(jù)結(jié)構(gòu)之一進(jìn)行檢查。例如,如果模塊108確定給定鍵大于指示存儲(chǔ)在塊506D中的第一個(gè)鍵的條目501D的鍵字段并且小于指示存儲(chǔ)在塊506g中的第一個(gè)鍵的條目501F的鍵字段,則模塊108檢查與塊集合508B對(duì)應(yīng)的篩選數(shù)據(jù)結(jié)構(gòu)504。如果篩選數(shù)據(jù)結(jié)構(gòu)504產(chǎn)生否定結(jié)果,則具有給定鍵的記錄不存在于該記錄組中。如果篩選數(shù)據(jù)結(jié)構(gòu)504產(chǎn)生肯定結(jié)果,則索引114被用來找到集合508B的塊中可能包含該記錄的塊,并且模塊108解壓縮該塊以搜索該記錄。在一些情況下,有可能索引114的大小可能變得太大而不能容納在存儲(chǔ)器中。搜索索引的一些技術(shù)(例如,二值搜索技術(shù))導(dǎo)致在log2(t)量級(jí)上的讀取多個(gè)索引條目,其中t是該索引中條目的總數(shù)量。(在任何給定搜索期間讀取的條目的實(shí)際數(shù)量可能少于或多于該量。)如果所讀取的顯著數(shù)量的這些索引條目不是在此時(shí)碰巧被裝載在存儲(chǔ)器中的那部分索弓丨,則由于需要將不同部分的索引裝載到存儲(chǔ)器的時(shí)間,因此搜索該索引所需的時(shí)間可能被顯著增加。在一些實(shí)現(xiàn)方式中,通過構(gòu)建分層級(jí)的或“多層”索引,可以減少與搜索索引關(guān)聯(lián)的訪問時(shí)間。在多層索引的一個(gè)示例中,存在兩層索引,存儲(chǔ)在索引存儲(chǔ)裝置110(例如,較慢的和/或非易失性存儲(chǔ)裝置)中的主索引包含定位記錄的壓縮塊的條目,且存儲(chǔ)在本地存儲(chǔ)器(例如,較快的和/或易失性存儲(chǔ)裝置)中的輔索引包含用來確定主索引的哪部分要被裝載到本地存儲(chǔ)器中的條目。為了生成這樣的兩層索引,如上所述,利用按照鍵排序的條目生成包含用于壓縮塊的條目的初始索引。該初始索引是主索引并且被劃分為條目的連續(xù)區(qū)域,每個(gè)區(qū)域足夠小以便完全容納在本地存儲(chǔ)器中(例如,每個(gè)區(qū)域在長度上是一 “盤頁”)。每個(gè)區(qū)域內(nèi)的索引條目可以可選地被壓縮(例如壓縮為與上述的塊類似的、但是存儲(chǔ)索引條目而不是記錄的一個(gè)或更多個(gè)塊)。在被壓縮時(shí),該區(qū)域?qū)⑸踔粮?,但是在被解壓縮時(shí)該區(qū)域的大小將仍完全容納在本地存儲(chǔ)器中。然后,生成輔索引,其也足夠小以便完全容納在本地存儲(chǔ)器中。在該輔索引中,為所述多個(gè)區(qū)域中的每個(gè)區(qū)域創(chuàng)建條目。每個(gè)輔索引條目包括區(qū)域在索引存儲(chǔ)裝置110中的地址(例如,存儲(chǔ)該區(qū)域的盤頁的地址)。每個(gè)輔索引 條目還包括標(biāo)識(shí)存儲(chǔ)在該區(qū)域中的第一個(gè)主索引條目的主鍵的鍵字段。如果輔索引保持足夠小以便容納在本地存儲(chǔ)器中,則可以降低訪問成本(例如,執(zhí)行輸入/輸出(I/o)操作所需的時(shí)間)。例如,為了檢索期望記錄,在輔索引(其被包含在本地存儲(chǔ)器中)中執(zhí)行第一搜索以便確定主索引的哪個(gè)區(qū)域包含與存儲(chǔ)期望記錄的塊關(guān)聯(lián)的條目。一旦(例如使用二值搜索)確定了主索引的適當(dāng)區(qū)域,則從索引存儲(chǔ)裝置110到本地存儲(chǔ)器中檢索主索引的該區(qū)域,并且搜索該區(qū)域以便找到定位存儲(chǔ)該記錄的塊的主索引條目。因此,在該示例中,在容納在本地存儲(chǔ)器中的輔索引內(nèi)執(zhí)行第一搜索,然后在一次I/o操作之后,在主索引也容納在本地存儲(chǔ)器中的區(qū)域內(nèi)執(zhí)行輔搜索。由于主索弓I被劃分為在長度上為一個(gè)盤頁的區(qū)域,因此可以減少訪問該索引的I/o成本。如果輔索引太大(或變得太大)而不能被完全容納在本地存儲(chǔ)器內(nèi),則可以生成多層索引的第三層(以及第四層,等等),使得最高層完全容納在本地存儲(chǔ)器內(nèi),并且每個(gè)較低層被劃分為區(qū)域,每個(gè)區(qū)域被完全容納在本地存儲(chǔ)器內(nèi)。最低層是存儲(chǔ)記錄的壓縮塊的主索引。上述的記錄存儲(chǔ)和檢索記錄可以使用在計(jì)算機(jī)運(yùn)行的軟件來實(shí)現(xiàn)。例如,軟件以在一個(gè)或更多個(gè)編程的或可編程的計(jì)算機(jī)系統(tǒng)(其可能是各種架構(gòu),諸如分布式、客戶端/服務(wù)器、或網(wǎng)格)運(yùn)行的一個(gè)或更多個(gè)計(jì)算機(jī)程序的形式形成例程,每個(gè)計(jì)算機(jī)系統(tǒng)包括至少一個(gè)處理器、至少一個(gè)數(shù)據(jù)存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器、和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備或端口、以及至少一個(gè)輸出設(shè)備或端口。軟件可以形成更大程序的一個(gè)或更多個(gè)模塊,例如,該更大程序提供與計(jì)算圖的設(shè)計(jì)和配置相關(guān)的其它服務(wù)。該圖的節(jié)點(diǎn)和元素可以被實(shí)現(xiàn)為存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的數(shù)據(jù)結(jié)構(gòu)、或者符合存儲(chǔ)在數(shù)據(jù)倉庫中的數(shù)據(jù)模型的其它組織數(shù)據(jù)。軟件可以被提供在可由通用或?qū)S每删幊逃?jì)算機(jī)讀取的介質(zhì)(諸如CD-ROM)上、或者可以在其運(yùn)行時(shí)通過網(wǎng)絡(luò)被遞送到(被編碼在傳播信號(hào)中)該計(jì)算機(jī)??梢栽趯S糜?jì)算機(jī)上、或者使用專用硬件(諸如協(xié)處理器)執(zhí)行所有功能。軟件可以以分布式方式實(shí)現(xiàn),其中由該軟件指定的計(jì)算的不同部分由不同計(jì)算機(jī)執(zhí)行。每個(gè)這樣的計(jì)算機(jī)程序優(yōu)選地存儲(chǔ)在或者下載到可由通用或?qū)S每删幊逃?jì)算機(jī)讀取的存儲(chǔ)介質(zhì)或設(shè)備上(例如,固態(tài)存儲(chǔ)器或介質(zhì)、或者磁或光介質(zhì)),用于在該存儲(chǔ)介質(zhì)或設(shè)備被計(jì)算機(jī)系統(tǒng)讀取時(shí)配置并操作計(jì)算機(jī)執(zhí)行這里描述的例程。本發(fā)明的系統(tǒng)還可以被考慮為實(shí)現(xiàn)為配置有計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中如此配置的存儲(chǔ)介質(zhì)使得計(jì)算機(jī)系統(tǒng)以特定和預(yù)定方式操作以執(zhí)行這里描述的功能。已經(jīng)描述了本發(fā)明的多個(gè)實(shí)施例。然而,將理解可以在不偏離本發(fā)明的精神和范圍的情況下做出各種修改。例如,上面描述的一些步驟可以是順序獨(dú)立的,并且因此可以以與所描述的順序不同的順序來執(zhí)行。
應(yīng)理解,前面的描述意圖說明并且不限制本發(fā)明的范圍,本發(fā)明的范圍由所附權(quán)利要求書的范圍來定義。例如,上述的多個(gè)功能步驟可以以不同順序執(zhí)行,而沒有實(shí)質(zhì)上影響整體處理。其它實(shí)施例在所附權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1.一種管理數(shù)據(jù)的方法,該方法包括 在輸入設(shè)備或端口上接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及 處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ),所述處理包括 存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的; 對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及 生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。
2.如權(quán)利要求I所述的方法,其中,在多個(gè)塊的一個(gè)或更多個(gè)塊的第二集合中包括的全部數(shù)據(jù)單元具有在排序次序中比在多個(gè)塊的一個(gè)或更多個(gè)塊的第一集合中包括的數(shù)據(jù)單元的任何鍵值出現(xiàn)得更晚的鍵值。
3.如權(quán)利要求2所述的方法,其中,多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每個(gè)對(duì)應(yīng)于標(biāo)識(shí)在一個(gè)或更多個(gè)塊的對(duì)應(yīng)集合中存儲(chǔ)的數(shù)據(jù)單元的不同的非重疊鍵值范圍。
4.如權(quán)利要求I所述的方法,其中,在累積了在多個(gè)塊的一個(gè)或更多個(gè)塊的第一集合中存儲(chǔ)的第一集合數(shù)據(jù)單元中的預(yù)定數(shù)量的區(qū)別鍵值之后生成第一篩選數(shù)據(jù)結(jié)構(gòu),而在接收在多個(gè)塊的一個(gè)或更多個(gè)塊的第二集合中存儲(chǔ)的第二集合數(shù)據(jù)單元的同時(shí)生成第二篩選數(shù)據(jù)結(jié)構(gòu)。
5.如權(quán)利要求I所述的方法,還包括使用索引和多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)來搜索具有給定鍵值的數(shù)據(jù)單元。
6.如權(quán)利要求5所述的方法,其中,所述搜索包括檢查多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)中的每一個(gè),以得到指示具有給定鍵值的數(shù)據(jù)單元可能被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的肯定結(jié)果。
7.如權(quán)利要求6所述的方法,還包括響應(yīng)于對(duì)于對(duì)應(yīng)篩選數(shù)據(jù)結(jié)構(gòu)的肯定結(jié)果,搜索索引以確定給定鍵值是否落入跨越被對(duì)應(yīng)篩選數(shù)據(jù)結(jié)構(gòu)所篩選的一個(gè)或更多個(gè)塊的鍵值范圍內(nèi)。
8.如權(quán)利要求7所述的方法,還包括響應(yīng)于給定鍵值落入跨越被對(duì)應(yīng)篩選數(shù)據(jù)結(jié)構(gòu)所篩選的多個(gè)塊的鍵值范圍內(nèi),搜索索引以找到用于搜索具有給定鍵值的數(shù)據(jù)單元的特定塊。
9.如權(quán)利要求I所述的方法,其中,對(duì)于給定鍵值,給定篩選數(shù)據(jù)結(jié)構(gòu)確定包括給定鍵值的數(shù)據(jù)單元必定沒有被包括,或者包括給定鍵值的數(shù)據(jù)單元可能被包括。
10.如權(quán)利要求9所述的方法,其中,在數(shù)據(jù)單元沒有被包括時(shí)給定篩選數(shù)據(jù)結(jié)構(gòu)確定包括給定鍵值的數(shù)據(jù)單元可能被包括的概率取決于數(shù)據(jù)結(jié)構(gòu)的大小。
11.如權(quán)利要求10所述的方法,還包括基于標(biāo)識(shí)生成塊所依據(jù)的數(shù)據(jù)單元的區(qū)別鍵值的數(shù)量,而選擇給定篩選數(shù)據(jù)結(jié)構(gòu)的大小。
12.如權(quán)利要求I所述的方法,其中,在輸入設(shè)備或端口上接收給定數(shù)據(jù)單元之前,標(biāo)識(shí)給定數(shù)據(jù)單元的鍵值對(duì)應(yīng)于與給定數(shù)據(jù)單元關(guān)聯(lián)的一個(gè)或更多個(gè)字段。
13.如權(quán)利要求12所述的方法,還包括在接收數(shù)據(jù)單元時(shí)累積區(qū)別鍵值,并且在接收到該組可獨(dú)立訪問的數(shù)據(jù)單元中的數(shù)據(jù)單元之后對(duì)所累積的區(qū)別鍵值進(jìn)行計(jì)數(shù)。
14.如權(quán)利要求I所述的方法,其中,在輸入設(shè)備或端口上接收給定數(shù)據(jù)單元之后,標(biāo)識(shí)該給定數(shù)據(jù)單元的鍵值才被分配給該給定數(shù)據(jù)單元。
15.如權(quán)利要求14所述的方法,其中,鍵值是單調(diào)分配的。
16.如權(quán)利要求15所述的方法,其中,所有分配的鍵值是有區(qū)別的。
17.如權(quán)利要求I所述的方法,其中,與所存儲(chǔ)的塊關(guān)聯(lián)的篩選數(shù)據(jù)結(jié)構(gòu)的數(shù)量基于標(biāo)識(shí)該組可獨(dú)立訪問的數(shù)據(jù)單元中的數(shù)據(jù)單元的區(qū)別鍵值的數(shù)量、以及與篩選數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的目標(biāo)錯(cuò)誤肯定概率。
18.如權(quán)利要求I所述的方法,其中,索引是包括至少第一級(jí)別索引和第二級(jí)別索引的分層級(jí)索引。
19.如權(quán)利要求18所述的方法,其中,第一級(jí)別索引被劃分為多個(gè)條目區(qū)域,其使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍對(duì)應(yīng)的數(shù)據(jù)單元的塊,每個(gè)區(qū)域足夠小被完全容納在與該數(shù)據(jù)存儲(chǔ)系統(tǒng)耦接的存儲(chǔ)器內(nèi)。
20.如權(quán)利要求19所述的方法,其中,索引中條目的一個(gè)或更多個(gè)條目標(biāo)識(shí)與生成對(duì)應(yīng)塊所依據(jù)的數(shù)據(jù)單元對(duì)應(yīng)的鍵值范圍。
21.如權(quán)利要求20所述的方法,其中,索引中條目的至少一些中的每個(gè)條目標(biāo)識(shí)對(duì)應(yīng)塊的存儲(chǔ)位置。
22.如權(quán)利要求19所述的方法,其中,第二級(jí)別索引足夠小以被完全容納在存儲(chǔ)器內(nèi)。
23.如權(quán)利要求22所述的方法,其中,第二級(jí)別索引包括用于多個(gè)區(qū)域中每個(gè)區(qū)域的相應(yīng)條目。
24.如權(quán)利要求23所述的方法,其中,第二級(jí)別索引中條目的一個(gè)或更多個(gè)條目使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍對(duì)應(yīng)的條目的第一級(jí)別索引的區(qū)域。
25.一種存儲(chǔ)用于管理數(shù)據(jù)的計(jì)算機(jī)程序的計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)程序包括使得計(jì)算機(jī)執(zhí)行以下操作的指令 在輸入設(shè)備或端口上接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及 處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ),所述處理包括 存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的; 對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及 生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。
26.—種管理數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括 輸入設(shè)備或端口,被配置為接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及 至少一個(gè)處理器,被配置為處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ),所述處理包括 存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的; 對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及 生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。
27.—種管理數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括 用于接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元的部件,每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序以使得標(biāo)識(shí)在給定的第二數(shù)據(jù)單元之前接收的給定的第一數(shù)據(jù)單元的鍵值在排序次序中比標(biāo)識(shí)給定的第二數(shù)據(jù)單元的鍵值出現(xiàn)得更早;以及用于處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)中存儲(chǔ)的部件,所述處理包括 存儲(chǔ)多個(gè)數(shù)據(jù)塊,所述塊中的一個(gè)或更多個(gè)的每個(gè)是通過組合多個(gè)數(shù)據(jù)單元而生成的; 對(duì)于每個(gè)塊提供包括條目的索引,其中所述條目中的一個(gè)或更多個(gè)使得能夠基于所提供的鍵值來定位包括與包括所提供的鍵值的鍵值范圍相對(duì)應(yīng)的數(shù)據(jù)單元的塊;以及 生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。
全文摘要
管理數(shù)據(jù)包括接收至少一組可獨(dú)立訪問的數(shù)據(jù)單元(200),每個(gè)數(shù)據(jù)單元由鍵值標(biāo)識(shí),所接收的數(shù)據(jù)單元的鍵值被排序;以及處理數(shù)據(jù)單元以在數(shù)據(jù)存儲(chǔ)系統(tǒng)(100)中存儲(chǔ)。所述處理包括存儲(chǔ)多個(gè)數(shù)據(jù)塊(202);對(duì)于每個(gè)塊提供包括條目的索引(114);以及生成與所存儲(chǔ)的塊關(guān)聯(lián)的多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)(116)以便確定包括給定鍵值的數(shù)據(jù)單元被包括在該組可獨(dú)立訪問的數(shù)據(jù)單元中的概率,所述多個(gè)篩選數(shù)據(jù)結(jié)構(gòu)包括用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第一集合的第一篩選數(shù)據(jù)結(jié)構(gòu)、和用于篩選所述多個(gè)塊中的一個(gè)或更多個(gè)塊的第二集合的第二篩選數(shù)據(jù)結(jié)構(gòu)。
文檔編號(hào)G06F12/00GK102893265SQ201080066735
公開日2013年1月23日 申請(qǐng)日期2010年3月10日 優(yōu)先權(quán)日2010年3月10日
發(fā)明者V.庫爾卡尼, S.施密特, C.W.斯坦菲爾, E.M.維施尼亞克 申請(qǐng)人:起元技術(shù)有限責(zé)任公司