專利名稱::用于主存儲器列存儲裝置的基于字典的保持順序的串壓縮的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明的實施例一般地涉及軟件領(lǐng)域,并且更具體地涉及數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)支持具有可隨時間改變的大的域的大小(domainsize)的串屬性的保持順序的字典壓縮。
背景技術(shù):
:在計算領(lǐng)域中,數(shù)據(jù)庫管理系統(tǒng)(DBMS)是控制數(shù)據(jù)庫存儲單元中的數(shù)據(jù)的組織、存儲、管理和檢索的一組軟件程序。傳統(tǒng)上,DBMS是面向行的數(shù)據(jù)庫系統(tǒng);然而,存在面向列的數(shù)據(jù)庫系統(tǒng)。面向列的數(shù)據(jù)庫系統(tǒng)按照列而不是按照行來存儲其內(nèi)容。對于數(shù)據(jù)庫來說,這可以具有優(yōu)勢,其中,在大量類似的數(shù)據(jù)項上計算總和(aggregate)。DBMS的面向列的實現(xiàn)將依次存儲給定列的屬性,并且依次存儲同一列的列值,一列的末尾之后跟著在下一列的開頭。當(dāng)必須在很多行上、但是僅對所有數(shù)據(jù)列的較小的子集計算總和時,面向列的數(shù)據(jù)庫系統(tǒng)可以更高效。之所以能夠這樣,至少是因為讀取數(shù)據(jù)的較小子集可以比讀取所有數(shù)據(jù)更快。當(dāng)一次對所有行提供一列的新值時,面向列的數(shù)據(jù)庫系統(tǒng)也可以更高效,因為該列數(shù)據(jù)可以被高效地寫入,并且可以替換舊的列數(shù)據(jù),而不干擾所述行的任何其它列。
發(fā)明內(nèi)容描述了這樣的方法和系統(tǒng),該方法和系統(tǒng)涉及支持可變長度的串屬性的保持順序的字典壓縮的數(shù)據(jù)結(jié)構(gòu),其中,域的大小較大或者預(yù)先未知。在一個實施例中,所述方法包括將多個串值經(jīng)由編碼索引傳播到字典的共享樹葉結(jié)構(gòu)的壓縮數(shù)據(jù)。對于所述多個串值,通過查找操作來獲取多個保持順序的整數(shù)代碼。如果在所述獲取期間沒有找到所述多個整數(shù)代碼的子集,則將沒有找到的所述多個整數(shù)代碼的子集所針對的所述多個串值的子集插入共享樹葉結(jié)構(gòu)中。該方法還包括產(chǎn)生所述多個串值的對應(yīng)子集的所述多個整數(shù)代碼的子集。最后,提供保持順序的所述多個整數(shù)代碼的列表,其中,該列表也包括所產(chǎn)生的所述多個整數(shù)代碼的子集。在一個實施例中,所述系統(tǒng)包括面向列的數(shù)據(jù)庫系統(tǒng)和基于字典的存儲單元,該存儲單元指定在該面向列的數(shù)據(jù)庫系統(tǒng)中,在多個可變長度的串值和多個整數(shù)代碼之間的映射。此外,所述系統(tǒng)包括共享樹葉數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)在其樹葉中按照排序(sort)順序來保存基于字典的存儲單元的數(shù)據(jù)。此外,包括與基于字典的存儲單元通信的處理器,其中,該處理器可操作以使用共享樹葉數(shù)據(jù)結(jié)構(gòu)將所述多個可變長度的串值編碼為所述多個整數(shù)代碼以及將所述多個整數(shù)代碼解碼為所述多個可變長度的串值。當(dāng)考慮結(jié)合附圖提供的對本發(fā)明的優(yōu)選實施例的以下詳細(xì)描述時,本發(fā)明的實施例的這些和其它益處和特征將顯而易見,在附圖中,自始至終使用相同的參考標(biāo)號來標(biāo)識相同的元件。在附圖的各個圖中,作為示例而不是作為限制圖示了本發(fā)明,在附圖中,相同的參考標(biāo)號指示相似的元件。應(yīng)當(dāng)注意,在本公開中,對于“一”或“一個”實施例的提及不一定針對同一個實施例,這樣的提及是指至少一個。圖1是可變長度的串屬性的保持順序的字典壓縮的實施例的圖。圖2是示出用于對表T的屬性編制索引的直接、間接和共享樹葉方法的圖。圖3是示出共享樹葉方法如何支持字典內(nèi)的數(shù)據(jù)加載和查詢處理的實施例的流程圖。圖4是示出全部成批(all-bulked)策略和混合策略的實施例的圖。圖5是根據(jù)本發(fā)明實施例的用于可變長度的串值的樹葉結(jié)構(gòu)的存儲器布局的示例。圖6是用于使用CS數(shù)組trie來將數(shù)據(jù)編碼的實施例的圖。圖7是根據(jù)實施例的CS前綴樹的示例的圖。圖8是從給定的樹葉層級開始的CS前綴樹的批量(bulk)加載過程的實施例的流程圖。圖9是根據(jù)實施例的來自示出樹葉結(jié)構(gòu)的性能和存儲器開銷的實驗的結(jié)果的圖。圖10是根據(jù)實施例的來自示出編碼索引的查找和更新成本的實驗的結(jié)果的圖。圖11是根據(jù)實施例的來自示出字典的可擴(kuò)展性的實驗的結(jié)果的圖。圖12是根據(jù)本發(fā)明實施例的計算系統(tǒng)的示例的示意圖。具體實施例方式本發(fā)明的實施例涉及支持具有可能隨時間改變的大的域的大小的串屬性的保持順序的字典壓縮的數(shù)據(jù)結(jié)構(gòu)。所認(rèn)為的是,面向列的數(shù)據(jù)庫系統(tǒng)在分析工作負(fù)荷(workload)上比傳統(tǒng)的面向行的數(shù)據(jù)庫系統(tǒng)表現(xiàn)更好。用于面向列的數(shù)據(jù)庫系統(tǒng)的輕量級壓縮方案可以使能對壓縮數(shù)據(jù)進(jìn)行查詢處理,從而提高查詢處理性能。字典編碼利用較短的固定長度的整數(shù)代碼來代替可變長度的屬性值。為了以這種方式壓縮列數(shù)據(jù),現(xiàn)有的列存儲器通常創(chuàng)建不同值的字典數(shù)組(dictionaryarray),然后將每個屬性值作為索引存儲到該數(shù)組中。如果域的大小小,則可以在列存儲器中使用字典??梢栽谧值漤敳渴褂帽忍亟M裝(bitpacking),以便通過計算將最大索引編碼到字典中所需的最小比特數(shù)目來進(jìn)一步壓縮數(shù)據(jù)。如果域的大小穩(wěn)定或者事先已知,則比特組裝是有用的,但是,在應(yīng)用場景中,域的大小可能隨著時間增大。如果域的大小事先未知,則列存儲器可以分析數(shù)據(jù)的第一次批量加載(bulkload)以便找出給定屬性的當(dāng)前域的大小,然后導(dǎo)出最小比特數(shù)目(用于比特組裝)。如果后續(xù)的批量加載包含新值,則所有先前加載的數(shù)據(jù)可以被解碼,然后以使用更多比特的新加載而再次被編碼。列存儲器常常使用保持順序的壓縮方案來加快昂貴的查詢操作,因為所述操作隨后可以直接對編碼數(shù)據(jù)執(zhí)行。然而,這樣的壓縮方案要么產(chǎn)生昂貴的可變長度代碼,要么產(chǎn)生難以擴(kuò)展的固定長度代碼。對于域的大小事先不知道的大字典,排序后的數(shù)組和用于索弓I的固定長度整數(shù)代碼過于昂貴。圖1是可變長度的串屬性的保持順序的字典壓縮的實施例的圖。在實施例中,定義支持域的大小大或事先不知道的可變長度的串屬性的保持順序的字典壓縮的數(shù)據(jù)結(jié)構(gòu)。所產(chǎn)生的整數(shù)代碼具有固定長度,并且不使用比特組裝??梢詫⒆值涠x為表,該表指定串值和整數(shù)代碼之間的映射??梢远x用于訪問字典的索引結(jié)構(gòu),其支持?jǐn)?shù)據(jù)加載110、查詢編譯120和查詢執(zhí)行130。過程100以數(shù)據(jù)加載110開始。通常,將數(shù)據(jù)成批地加載到數(shù)據(jù)倉庫中。在實施例中,字典支持使用整數(shù)代碼編碼多批串值。該編碼可以由以下操作組成1)在字典中批量查找(bulklookup)用于串值的整數(shù)代碼;以及2)批量插入(bulkinsertion)新串值以及生成用于該新值的保持順序的整數(shù)代碼。圖1示出了如何將兩批產(chǎn)品數(shù)據(jù)(批次105和批次115)加載到串字典(例如125)并且使用整數(shù)代碼135編碼。此外,過程100包括查詢編譯120。為了對編碼數(shù)據(jù)執(zhí)行分析查詢,需要重寫查詢謂詞(predicate)。謂詞是描述對象的性質(zhì)或由變量表示的對象之間的關(guān)系的短語模板(phrasetemplate)。例如,串字典125包括串值的列表全脂奶一加侖,全脂奶一夸脫等,其中,“全脂奶”是這些串的謂詞。查詢編譯120涉及利用對應(yīng)的整數(shù)代碼重寫相等謂詞(equalitypredicate)(例如,p_name=“全脂奶-加侖”)中或者范圍謂詞(例如,p_name>“全脂奶-加侖”)中的串常量。保持順序的編碼方案允許用整數(shù)代碼替換相等謂詞和范圍謂詞的串常量,并且允許前綴謂詞(例如,P_name=“全脂奶*”)被映射到范圍謂詞。例如,通過將具有前綴謂詞“全脂奶*”的串常量“pjame”重寫為范圍謂詞32100^p_name彡32000,在查詢145(QUERY:SLELECTSUM(0_T0TAL),P_NAMEFROMSALES,PRODUCTSWHEREP_NAME^32000ANDP_NAME彡32100GROUPBYP_NAME,查詢從銷售額、產(chǎn)品中選擇按照P_NAME分組的P_NAME彡32000并且P_NAME^32100的總銷售額,P_NAME)中重寫原始查詢140(QUERY:SLELECTSUM(0_T0TAL),P_NAMEFROMSALES,PRODUCTSWHEREP_NAME='WHOLEMILK*’GROUPBYP_NAME,查詢從銷售額、產(chǎn)品中選擇按照P_NAME分組的P_NAME=‘全脂奶*’的總銷售額,P.NAME)。在實施例中,串字典125支持查找操作以重寫串常量以及串前綴。過程100還包括查詢執(zhí)行130。在查詢執(zhí)行130期間,使用字典125將編碼的查詢結(jié)果150解碼。在實施例中,串字典155支持作為整數(shù)代碼的列表給出的編碼的查詢結(jié)果150的解碼,以產(chǎn)生作為串值160的查詢結(jié)果。編碼的查詢結(jié)果150被解碼為代表串值105的未編碼的查詢結(jié)果160的列表。在實施例中,串字典是具有兩個屬性的表T:T=(值,代碼)。表T定義可變長度的串值(由屬性值定義)到固定長度的整數(shù)代碼(由屬性代碼定義)的映射以及固定長度的整數(shù)代碼到可變長度的串值的映射。字典支持以下用于將串值編碼和解碼并且使得能夠重寫查詢謂詞的操作1)編碼值一代碼;2)解碼代碼一值;3)查找(值,類型)一代碼;以及4)查找前綴一(mincode,maxcode)。在數(shù)據(jù)加載110期間使用“編碼值一代碼”操作,以便利用對應(yīng)的整數(shù)代碼(即,代碼)將串列的數(shù)據(jù)(即,值)編碼。該操作包括已經(jīng)在字典中的那些串的代碼的查找和新串值的插入以及用于這些新值的保持順序的代碼的產(chǎn)生。在查詢處理器130期間使用“解碼代碼一值”操作,以便使用對應(yīng)的串值將批量結(jié)果解碼。在查詢編譯120期間使用“查找(值,類型)一代碼”操作,以便利用對應(yīng)的整數(shù)代碼重寫相等謂詞(例如,P.name=“全脂奶-加侖”)中或者范圍謂詞(例如,p_name彡“全脂奶-加侖”)中的串常量。參數(shù)“類型”指定字典是應(yīng)該執(zhí)行精確匹配查找還是返回下一個更小的串值的整數(shù)代碼。在查詢編譯120期間使用“查找前綴一(mincode,maxcode),,操作,以便利用對應(yīng)的整數(shù)范圍(即,mincode和maxcode)重寫前綴謂詞(例如p_name=“全脂奶*”)的前綴。圖2是示出用于對表T的屬性編制索引(indexing)的直接、間接和共享樹葉方法的圖。表T可以通過構(gòu)造表T的兩個屬性(值和代碼)的索引來支持上述用于將串值編碼和解碼并且使得能夠重寫查詢謂詞的操作。在實施例中,屬性“值”和“代碼”的索引編制可以是直接的210或間接的220。結(jié)構(gòu)200示出直接210、間接220和共享樹葉230方法。在直接方法210中,創(chuàng)建用于編碼和解碼的兩個索引(例如,編碼索引205和解碼索引215),它們在其樹葉中直接保存表數(shù)據(jù)。該表不需要被保持在主存儲器中,因為數(shù)據(jù)被存儲在索引中,但是表數(shù)據(jù)被冗余地保存在兩個索引中,這浪費(fèi)存儲器空間。在間接方法220中,創(chuàng)建用于編碼和解碼的編碼索引和解碼索引,例如編碼索引205和解碼索引215,用于只保存對于表數(shù)據(jù)225的引用(reference)(例如,使用行標(biāo)識符“rid”235)??梢詫⒈肀3衷谥鞔鎯ζ髦?,而不是寫入外部驅(qū)動器。盡管索引更小,但是額外的間接程度(levelofindirectness)可能導(dǎo)致更高的高速緩存失誤率(miss-rate)。在另一實施例中,用于編碼和解碼的兩個索引共享相同的樹葉(例如共享樹葉230方法),其將表數(shù)據(jù)直接保存在它們的樹葉中,但是避免了直接索引編制210方法的冗余。因此,共享樹葉還避免了間接索引編制方法220的額外的間接程度。由于串字典使用保持順序的編碼方案,因此表T中的串值和整數(shù)代碼遵從相同的排序順序。由于可以在樹葉中按照排序順序保持表T的兩個屬性值,因此樹葉可以使用用于排序后的數(shù)據(jù)的標(biāo)準(zhǔn)搜索方法(例如二分搜索或內(nèi)插搜索)提供對于兩個查找方向(即,對于編碼和解碼)的訪問路徑。此外,如在直接索引的情況中那樣,使用共享樹葉來對字典編制索引意味著不必將表T顯式地保持在主存儲器中,因為樹葉保存了表T的所有數(shù)據(jù)。圖3是示出用于字典內(nèi)的數(shù)據(jù)加載和查詢處理的共享樹葉方法的實施例的流程圖??梢允褂镁幋a索引來將串值的列表編碼。在過程300的塊305,編碼索引將串值傳播(例如廣播,傳遞等)對應(yīng)的樹葉(例如,如圖6或圖7所示)。在塊310,執(zhí)行用于每個單個串值的整數(shù)代碼的查找。在一個實施例中,可以在樹葉內(nèi)經(jīng)由標(biāo)準(zhǔn)搜索算法來執(zhí)行查找操作。對于整數(shù)代碼列表的解碼類似地進(jìn)行,其中,解碼索引將整數(shù)代碼向下傳播到對應(yīng)的樹葉。在判定塊315,該過程檢查對于每個串值是否都存在整數(shù)代碼。如果找到了所有串值的對應(yīng)整數(shù)代碼,則該過程在塊330處繼續(xù)。在塊330,通過查找操作返回整數(shù)代碼的列表(即,結(jié)果列表)。如果通過對編碼索引的查找操作沒有找到串值的某些整數(shù)代碼,則該過程在塊320處繼續(xù)。在塊320,通過將新的行寫入表T,將沒有找到其整數(shù)代碼的串值插入字典。在塊325,為這些串值產(chǎn)生新的整數(shù)代碼。將用于插入新串值的代碼范圍劃分為等距間隔。所述間隔的限界(limit)代表新代碼。如果所述范圍小于要插入的新串值的數(shù)目,則對某些串值進(jìn)行重新編碼,并且更新使用它們的數(shù)據(jù)。新產(chǎn)生的整數(shù)代碼被添加到通過塊315處的查找操作返回的代碼列表。在必要時更新所述索引。在實施例中,共享樹葉還支持重寫字典內(nèi)的謂詞。為了重寫相等謂詞和范圍謂詞,編碼索引將串值傳播到對應(yīng)的樹葉,并且對樹葉的搜索操作返回整數(shù)代碼。為了重寫前綴謂詞,編碼索引將前綴傳播到包含用于該前綴的最小和最大串值的樹葉;該樹葉將最小和最大串映射到所述整數(shù)代碼。該字典的數(shù)據(jù)結(jié)構(gòu)(即,樹葉和索引)對于將多批(bulks)編碼或解碼是最優(yōu)化的并且是高速緩存知曉的(cache-aware)。所述操作,即編碼和解碼,易于并行化。樹葉結(jié)構(gòu)與索引結(jié)構(gòu)不同。所有結(jié)構(gòu),即樹葉結(jié)構(gòu)和索引結(jié)構(gòu),存在于存儲器中。樹葉結(jié)構(gòu)以排序順序保存串值和整數(shù)代碼。樹葉支持可變長度的串值的編碼,并且支持高效的批量加載和批量更新。用于編碼和解碼的索引以排序順序保持關(guān)鍵碼(key),以便在排序后的樹葉上進(jìn)行高效查找。編碼索引提供了串常量和串前綴向樹葉的傳播。除了查找用于已經(jīng)成為字典的一部分的串值的整數(shù)代碼以外,可能還需要將新的串值插入字典(例如,更新樹葉以及用于編碼和解碼的兩個索引),并且產(chǎn)生用于這些值的新的保持順序的代碼。在實施例中,將查找和插入操作組合為一個操作。以下策略可以支持這樣的方法在產(chǎn)生任何新的整數(shù)代碼之后更新編碼和解碼索引的全部成批(all-bulked)的方法以及在傳播串值期間更新編碼索引的混合(hybrid)方法。圖4是示出全部成批策略和混合策略的實施例的圖。過程400示出了全部成批401策略和混合402策略的主要步驟。全部成批401策略開始于塊410。在塊410,使用編碼索引將串值傳播到對應(yīng)的樹葉。查找用于該樹葉中的該串值的整數(shù)代碼。在塊420,將任何新的串值插入樹葉。響應(yīng)于所插入的新值而重新組織樹葉層級(leaflevel)(例如,創(chuàng)建所有樹葉都被填充到最大樹葉大小的樹葉層級)。在塊430,產(chǎn)生用于新值的整數(shù)代碼。在塊440,從更新后的樹葉層級批量加載新的編碼索引和新的解碼索引。混合402策略包括以下步驟。在塊450,使用編碼索引將串值傳播到對應(yīng)的樹葉。在傳播串值期間直接更新編碼索引。在塊450,查找用于該樹葉中的該串值的整數(shù)代碼。在塊470,將任何新的串值插入樹葉。產(chǎn)生用于新值的整數(shù)代碼。在塊480,從更新后的樹葉層級批量加載新的解碼索引。為了確保數(shù)據(jù)的一致性,在數(shù)據(jù)加載期間將索引和樹葉鎖定。對于查詢處理,可以允許只讀并發(fā)。在數(shù)據(jù)加載期間,可以將更新后的樹葉依次寫入存儲單元。圖5是根據(jù)本發(fā)明的實施例的用于可變長度的串值的樹葉結(jié)構(gòu)的存儲器布局的示例??梢栽谟糜谠谔囟ㄆ脚_上將可變長度的串值編碼和解碼的共享樹葉方法230中使用樹葉結(jié)構(gòu)500。樹葉結(jié)構(gòu)500將排序和壓縮后的串值及其對應(yīng)的固定長度的整數(shù)代碼一起在存儲器的一個組塊(chunk)中,以便在數(shù)據(jù)加載和查找操作期間提高高速緩存局部性(locality)。對于使用該樹葉結(jié)構(gòu)500的查找,將偏移向量505存儲在樹葉的末尾,其也以排序的方式保存用于樹葉的所有未被壓縮的串的引用(即,偏移)和整數(shù)代碼。例如,對于530處的值16,將510處的偏移128和520處的代碼32000存儲在偏移向量505中。將壓縮后的串值的整數(shù)代碼和壓縮后的串值一起存儲在數(shù)據(jù)部分中,而不是存儲在偏移向量505中(例如,值17的代碼32050)。在樹葉結(jié)構(gòu)數(shù)據(jù)加載期間,串值首先被壓縮,然后與它們的代碼一起被以正向方式(即,從存儲器位置0開始并且對于每個新條目使該位置遞增)寫入樹葉。為了使得能夠搜索樹葉內(nèi)的串值,以未壓縮的形式存儲每第n個串(例如,每第三個串),并且將未壓縮的串的位置作為錨(anchor)保存在樹葉的末尾(以便在搜索期間被找到)。然而,當(dāng)將數(shù)據(jù)加載到樹葉中時,在將所有數(shù)據(jù)寫入樹葉之前,壓縮后的串值的準(zhǔn)確大小可能是未知的。因此,可以從最后的存儲器位置起通過對于每個新錨使位置遞減來以反向方式存儲偏移向量505。對于批量查找,樹葉結(jié)構(gòu)支持一個查找操作用于查找給定串值的整數(shù)代碼以及另一查找操作用于查找給定代碼的串值。為了查找給定串值的代碼,可以執(zhí)行不需要將樹葉數(shù)據(jù)解壓縮的、用于在遞增編碼的值上進(jìn)行順序搜索的算法。在實施例中,該算法可以是如參照下面的表1描述的那樣。算法1在壓縮后的樹葉上進(jìn)行的串V的順序搜索functionSEQUENTIALSEARCH(leaf,start,end,ν)γ'leaf[start]-—讀取偏移start處的串ν’startstart+size(v')-一使偏移遞增串的大小prefix_lenprefix_len(v,y')—一計算共同的前綴長度whilestart_endandprefix_len<νdocurr_prefix_lenleaf[start]_-獲得當(dāng)前前綴長度startstart+p-一使偏移遞增前綴大小(prefix-size)=1y'leaf[start]startstart+size(v')ifcurr—prefix—IenOprefix—Ienthencontinue—_當(dāng)前值ν'的前綴過短/過長elseifcompare(v',v)>Othenreturn-1—-當(dāng)前值V'跟在搜索值V之后endifprefix_lenprefix_len+prefix_len(v,y')startstart+c__-使偏移遞增代碼大小C=4endwhileifprefix_len=νthenreturnleaf[start-c]---找到串V:返回代碼elsereturn-1---沒有找到串Vendifendfunction表1在壓縮后的樹葉上進(jìn)行的串ν的順序搜索當(dāng)查找給定代碼的值時,在順序搜索期間將所述值以遞增方式(incrementally)解壓縮。對于批量查找,對查找探針(probe)進(jìn)行排序以減小搜索開銷。對于用串值列表對樹葉進(jìn)行的初始批量加載,首先將這些串值排序。然后,從樹葉的開頭起依次寫入樹葉數(shù)據(jù),并且從末尾起以相反順序?qū)懭肫葡蛄?。如果串值沒有占用為它們分配的全部存儲器,則將偏移向量向前移動,并且釋放未使用的存儲器。對于批量更新,新串值的列表首先被排序,然后被插入現(xiàn)有的樹葉中。然后,執(zhí)行新串值和現(xiàn)有樹葉的排序歸并以便創(chuàng)建新樹葉。在實施例中,可以在樹葉結(jié)構(gòu)的頂部使用高速緩存知道(cache-conscious)的索引結(jié)構(gòu)來進(jìn)行編碼和解碼。這些索引支持全部成批401策略和混合402策略。對于編碼索引,定義PatriciaTrie的高速緩存敏感(CS)的版本CS數(shù)組trie(CSarraytrie),其支持混合策略402。PatriciaTrie或基數(shù)樹(radixtree)是基于用來存儲一組串的trie(一種前綴樹,該前綴樹是用來存儲相關(guān)聯(lián)的數(shù)組的有序樹數(shù)據(jù)結(jié)構(gòu),在所述相關(guān)聯(lián)的數(shù)組中,關(guān)鍵碼通常是串)的專門設(shè)置的數(shù)據(jù)結(jié)構(gòu)。與常規(guī)的trie相比,利用字符序列而不是用單個字符來標(biāo)記PatriciaTrie的邊。這些可以是字符串,諸如整數(shù)或IP地址的比特串,或者通常是采用字典編纂(lexicographical)順序的任意的對象序列。此外,定義前綴B-樹的新的高速緩存敏感的版本(使數(shù)據(jù)保持被排序并且對于讀取和寫入大批數(shù)據(jù)的系統(tǒng)來說最優(yōu)化的樹數(shù)據(jù)結(jié)構(gòu)),即CS前綴樹,以支持全部成批401更新策略。作為解碼索弓丨,可以使用CS搜索(CSS)樹。可以使用每個樹葉的最小整數(shù)代碼作為索引的關(guān)鍵碼,在字典的樹葉上創(chuàng)建CSS樹??梢詮淖值涞臉淙~起自下向上地高效批量加載CSS樹??梢允褂肅S數(shù)組trie作為編碼索引,以將串查找探針和更新傳播到樹葉。CS數(shù)組trie將讀取最優(yōu)化的高速緩存知曉的數(shù)據(jù)結(jié)構(gòu)用于索引節(jié)點(diǎn),并且不將串完全分解。圖6是用于使用CS數(shù)組trie將數(shù)據(jù)編碼的實施例的圖。CS數(shù)組trie610節(jié)點(diǎn)使用數(shù)組而不是鏈表(linkedlist)來存儲編制了索引的串值的字符。當(dāng)將單個值依次插入trie中時,數(shù)組比鏈表效率低。但是,對于每次將新值批量插入到數(shù)組trie中,節(jié)點(diǎn)的數(shù)組只被擴(kuò)大一次。對于CS數(shù)組trie610的串值的查找,可以執(zhí)行在節(jié)點(diǎn)的字符上的搜索,其中,所述數(shù)組支持二分搜索,并且所有字符都被群集地存儲在存儲器中。CS數(shù)組trie610使用樹葉結(jié)構(gòu)將具有相同前綴的一組串存儲在一起。例如,樹葉620包括具有相同的“aa”前綴的一組串。CS數(shù)組trie樹葉610存儲完整的串以使得能夠使用相同的樹葉將整數(shù)代碼高效地解碼。使用遞增編碼將所述串壓縮。在實施例中,可以使用CS數(shù)組trie來實現(xiàn)混合更新策略402,用于在數(shù)據(jù)加載110期間對串值進(jìn)行批量編碼,如630處所示。使用每個trie節(jié)點(diǎn)處的可變緩沖器(variablebuffer)(例如緩沖器645,650和650)將串值640(以預(yù)定順序)傳播到樹葉,以便提高用于查找的高速緩存的局部性。使用每個節(jié)點(diǎn)處的緩沖器,對于每一批次,存儲在節(jié)點(diǎn)處的字符數(shù)組只增長一次。這減小了高速緩存失誤。為了估計預(yù)期的樹葉大小,可以在緩沖器頁中將所有新串的未壓縮的大小以及它們的新代碼(沒有去除重復(fù)代碼)的大小加到當(dāng)前樹葉大小上。當(dāng)所有串值640被傳播到它們的樹葉時,通過分析在現(xiàn)有的串值640之間插入的串的數(shù)目來為新的串值產(chǎn)生新的整數(shù)代碼660。CS數(shù)組trie支持高效的謂詞重寫。對于相等謂詞和范圍謂詞,通過trie傳播常量而不進(jìn)行緩沖。對于前綴謂詞,使用前綴來找出與其匹配的最小和最大串值。串值從trie的根向樹葉的傳播被并行化。通過確定哪些樹葉保存相鄰的新串值來并行地產(chǎn)生新的整數(shù)代碼,而不鎖定任何數(shù)據(jù)結(jié)構(gòu)。也可以在不鎖定任何數(shù)據(jù)結(jié)構(gòu)的情況下將新串值的查找并行化。圖7是根據(jù)實施例的CS前綴樹的示例的圖。在實施例中,可以使用CS前綴樹作為編碼索引來傳播串查找探針和更新。CS前綴樹節(jié)點(diǎn)包含最短的前綴,其使得能夠?qū)⒋祩鞑サ阶庸?jié)點(diǎn)。取代存儲指向每個孩子(Child)的指針,CS前綴樹為節(jié)點(diǎn)分配存儲器的相鄰塊,并且使用偏移來導(dǎo)航通過所述塊。這減小了存儲器消耗,并且防止由于指針追蹤導(dǎo)致的性能問題。為了進(jìn)一步減小樹的存儲器覆蓋區(qū)域(footprint),僅僅顯式地存儲到第一個子節(jié)點(diǎn)730的偏移。對于固定大小的節(jié)點(diǎn),可以使用偏移算術(shù)來計算到子節(jié)點(diǎn)的偏移。為了允許在節(jié)點(diǎn)的可變長度的關(guān)鍵碼上的快速搜索,在每個節(jié)點(diǎn)的開頭處的偏移向量中存儲到關(guān)鍵碼的偏移。節(jié)點(diǎn)大小被固定以允許使用偏移算術(shù)來計算到子節(jié)點(diǎn)的索引(i)。例如,可以在偏移ο=offset(first_child)+(i*s)處找到節(jié)點(diǎn)的第i個孩子。節(jié)點(diǎn)的孩子的數(shù)1目是可變的,因為在節(jié)點(diǎn)處存儲可變長度的關(guān)鍵碼。CS前綴樹只能被從下向上地批量加載,因此它主要適合于全部成批的更新策略401。為了將串值的第一次批量加載編碼,使用這些串值來構(gòu)造完整的樹葉層級。可以使用CS數(shù)組trie來將串值劃分為使用多關(guān)鍵碼快速排序而排序的桶(bucket)。然后,使用排序后的串值來創(chuàng)建和填充樹葉720至最大樹葉大小。從這些樹葉720起,從下向上批量加載新的編碼索引。圖8是從給定的樹葉層級開始的CS前綴樹的批量加載過程的實施例的流程圖。在塊810,以前兩個樹葉開始,計算第一最短前綴。第一最短前綴用于區(qū)分第一樹葉的最大值和和第二樹葉的最小值。在塊815,將第一最短前綴存儲在樹的節(jié)點(diǎn)中。因為可以計算到該樹葉層級的偏移,所以不存儲到每個孩子的指針。在塊820,從左向右寫入偏移向量,并且從右向左存儲關(guān)鍵碼(由于偏移向量的大小未知)。在塊825,計算第二最短前綴。第二最短前綴用于區(qū)分第二樹葉的最大值和第三樹葉的最小值,如此繼續(xù)進(jìn)行,直到處理了所有樹葉為止。在塊835,如果當(dāng)前樹節(jié)點(diǎn)已滿,則開始樹的新節(jié)點(diǎn)。將索引存儲到將成為作為錨的此新節(jié)點(diǎn)的孩子的第一個樹葉。在塊840,將所述節(jié)點(diǎn)相鄰地存儲在存儲器存儲單元中。在塊845,只要對于樹的給定層級創(chuàng)建了超過一個的節(jié)點(diǎn),就在現(xiàn)有的樹的層級頂部增加另一個層級。新的層級包括存儲區(qū)分子節(jié)點(diǎn)的前綴的節(jié)點(diǎn)。該節(jié)點(diǎn)是樹的根。在下一個存儲器塊中,將偏移存儲到該節(jié)點(diǎn)。因為樹是從下向上構(gòu)造的,因此所述節(jié)點(diǎn)被以該順序存儲在存儲器中。對于隨后的批量加載,可以使用現(xiàn)有的CS前綴樹將串值傳播到樹葉。所述串值在樹葉層級上被緩沖,然后將現(xiàn)有的樹葉與存儲在緩沖器中的新串值進(jìn)行排序歸并。如果緩沖器中的新串值和現(xiàn)有樹葉的值沒有適配到一個樹葉中,則可以創(chuàng)建另一樹葉??梢允褂肅S前綴樹來重寫查詢謂詞。對于相等謂詞或范圍謂詞,可以利用串常量來執(zhí)行簡單的查找。對于前綴謂詞,可以使用前綴來找出與該前綴匹配的最小串值。對于前綴的查找找出包含所述值的樹葉,即使該值不在字典里。從那個樹葉開始,可以執(zhí)行順序搜索以找到與所述前綴匹配的最大串值??梢栽谙噜彽膲K中事先分配存儲器。所有樹節(jié)點(diǎn)需要的存儲器的最大量可以通過對樹中的關(guān)鍵碼的最大長度設(shè)置任意限界(limit)來計算。然后,計算適配在一個節(jié)點(diǎn)中的關(guān)鍵碼的最小數(shù)目,從而計算存儲數(shù)據(jù)所需的節(jié)點(diǎn)的最大數(shù)目。使用指針和偏移算術(shù)的混合識別出正確的孩子,從而允許使用存儲器的多個塊。與CS數(shù)組trie相比,CS前綴樹構(gòu)造起來可能更昂貴,因為數(shù)據(jù)首先被排序,然后從下向上地加載。但是,就查找工作負(fù)荷而言,CS前綴樹表現(xiàn)得比CS數(shù)組trie好。圖9是根據(jù)實施例的來自示出樹葉結(jié)構(gòu)的性能和存儲器開銷的實驗的結(jié)果的圖。該實驗包括兩個工作負(fù)荷,使得每個可以適配到16MB大小的樹葉中。所述工作負(fù)荷使用不同的固定串長度,因此表示不同數(shù)目的串。所述工作負(fù)荷明顯未被排序(沒有偏斜(skew)),以便表示查找操作的最壞情況。將工作負(fù)荷加載到以排序順序保存數(shù)據(jù)的一組樹葉上。所使用的樹葉大小從64KB到16MB不等。在沒有編碼和解碼索引的開銷的情況下測量具有不同樹葉大小的不同工作負(fù)荷的成本。此外,測量當(dāng)批量加載樹葉910并且執(zhí)行用于編碼920和解碼930的查找時的執(zhí)行時間和高速緩存失誤。為了加載樹葉,首先對工作負(fù)荷進(jìn)行排序,并且每個樹葉被批量加載至其最大大小,然后為樹葉產(chǎn)生整數(shù)代碼。將8字12節(jié)的大小用于所述整數(shù)代碼以便找出用于編碼具有大的域的大小的屬性的預(yù)期存儲器消耗。為了測量樹葉結(jié)構(gòu)的查找性能,使用緩沖器將工作負(fù)荷的每個串值分配給樹葉,然后在各個緩沖器中查找每個串的代碼。最后,使用編碼的工作負(fù)荷來執(zhí)行查找以再次將整數(shù)代碼解碼。在實驗中,將16MB的樹葉結(jié)構(gòu)與使用兩種不同工作負(fù)荷的兩個高速緩存敏感的讀取最優(yōu)化的索引結(jié)構(gòu)進(jìn)行比較。對于將串值編碼,將樹葉結(jié)構(gòu)與緊湊鏈?zhǔn)缴⒘斜?compact-chainhashtable)進(jìn)行比較(即,批量查找920)。對于將整數(shù)代碼解碼,將樹葉結(jié)構(gòu)與CSS樹進(jìn)行比較(即,批量查找930)。結(jié)果表明最優(yōu)的樹葉結(jié)構(gòu)大小大約為512KB(中等),并且樹葉結(jié)構(gòu)的性能可與讀取最優(yōu)化的索引結(jié)構(gòu)相比,但是使用較少的存儲器。圖10是根據(jù)實施例的來自示出編碼索引的查找和更新成本的實驗的結(jié)果的圖。測量將對于索引產(chǎn)生不同更新模式的工作負(fù)荷(workload)編碼的成本。首先,批量加載具有1000萬個串的字典(批次1),然后將表示某個更新模式的1000萬個串的另一批加載(批次2)編碼。所有工作負(fù)荷都由具有20個字符的固定長度的串值組成。最大樹葉大小被設(shè)置在512KB。在實驗中,使用5個不同的更新模式。1)無更新批次2不包含新串;2)交織10批次2包含10%的新串,其中按排序順序每第10個串是新的;3)交織50批次2包含50%的新串,其中按排序順序每隔一個串是新的;4)交織100%批次2包含100%的新串值,每個被插入在批次1的兩個值之間;以及5)附加批次2包含100%的新串值,所有新串值都被插入在批次1的最后一個串之后。該實驗表明對于不同的更新模式,加載批次1然后加載批次2的時間與CS數(shù)組trie和CS前綴樹相似,但是比列表trie長得多。圖11是根據(jù)實施例的來自示出字典的可擴(kuò)展性的實驗的結(jié)果的圖。該實驗測試用于未經(jīng)排序的不同大小的工作負(fù)荷的數(shù)據(jù)結(jié)構(gòu)的性能。該結(jié)果表明使用用于字典的不同編碼索引來將工作負(fù)荷編碼所需的時間表現(xiàn)與工作負(fù)荷中的串的數(shù)目成線性比例(scaling)0在編碼之后,從編碼索引的樹葉批量加載解碼索引,并且將編碼后的工作負(fù)荷解碼。同樣,時間表現(xiàn)出線性比例。為了檢查并行化對CS數(shù)組trie的影響,改變線程的數(shù)目,結(jié)果表明由于線程同步的開銷,在8線程情況下的性能優(yōu)于16線程情況下的性能。輕量級壓縮方案可以提高面向列的數(shù)據(jù)庫系統(tǒng)的查詢處理性能。在一種這樣的方案中,字典利用較短的(國定長度)整數(shù)代碼來代替長(可變長度)值。為了進(jìn)一步提高性能,列存儲器可以使用保持順序的壓縮方案??梢允褂眯碌臄?shù)據(jù)結(jié)構(gòu)來支持對于具有可隨時間改變的大的域的大小的可變長度串屬性的保持順序的字典壓縮??梢詫⒆值浣楸?,該表將串值映射到任意整數(shù)代碼??梢允褂眯碌乃饕幹品椒ㄒ员愀咝У卦L問這種使用壓縮索引數(shù)據(jù)的字典。所述數(shù)據(jù)結(jié)構(gòu)至少與其它用于字典的數(shù)據(jù)結(jié)構(gòu)一樣快,但是占用較少的存儲器。圖12是根據(jù)本發(fā)明實施例的計算機(jī)系統(tǒng)的示例的示意圖。根據(jù)一種實現(xiàn),系統(tǒng)1200可以用于與圖3相關(guān)聯(lián)地描述的操作。系統(tǒng)1200包括處理器1210、主存儲器1220、存儲單元1230和輸入/輸出設(shè)備1240。組件1210、1220、1230和1240中的每一個使用系統(tǒng)總線1250互連。處理器1210能夠處理用于在系統(tǒng)1200內(nèi)執(zhí)行的指令。該處理器與主存儲器存儲裝置1220通信。此外,該處理器可操作以執(zhí)行存儲在主存儲器1220中的操作1280,例如數(shù)據(jù)加載110、查詢編譯120和查詢執(zhí)行130。在一個實施例中,處理器1210是單線程處理器。在另一實施例中,處理器1210是多線程處理器。處理器1210能夠處理存儲在主存儲器1220或存儲設(shè)備1230中的指令,以在輸入/輸出設(shè)備1240上顯示用戶界面的圖形信息。主存儲器1220存儲系統(tǒng)1200內(nèi)的信息。在一種實現(xiàn)中,主存儲器1220是機(jī)器可讀介質(zhì)。在實施例中,主存儲器1220以面向列的格式存儲保持順序的壓縮數(shù)據(jù)。主存儲器1220存儲字典1260。字典1260用于如索引1270表示的壓縮數(shù)據(jù)的編碼和解碼。編碼索引和解碼索引包含共享樹葉數(shù)據(jù)結(jié)構(gòu),該共享樹葉數(shù)據(jù)結(jié)構(gòu)在其樹葉中以排序后的順序保存數(shù)據(jù)。存儲設(shè)備1230能夠向系統(tǒng)1200提供大容量存儲。在一種實現(xiàn)中,存儲設(shè)備1230是計算機(jī)可讀介質(zhì)。在替換實施例中,存儲設(shè)備1230可以是軟盤設(shè)備、硬盤設(shè)備、光盤設(shè)備或磁帶設(shè)備。輸入/輸出設(shè)備1240用來觸發(fā)或啟動對于系統(tǒng)1200的輸入/輸出操作1280。在一種實現(xiàn)中,輸入/輸出設(shè)備1240包括鍵盤和/或指示設(shè)備。在另一實現(xiàn)中,輸入/輸出設(shè)備1240包括用于顯示圖形用戶界面的顯示單元。也可以作為用于有形地存儲機(jī)器可執(zhí)行的指令的有形的機(jī)器可讀介質(zhì)(例如計算機(jī)可讀介質(zhì))來提供實施例的元素。該有形的機(jī)器可讀介質(zhì)可以包括但不限于閃存、光盤、CD-ROM、DVDROM、RAM、EPROM、EEPROM、磁卡或光學(xué)卡、或者適合存儲電子指令的其它類型的機(jī)器可讀介質(zhì)。例如,可以作為計算機(jī)程序來下載本發(fā)明的實施例,可以將所述計算機(jī)程序從遠(yuǎn)程計算機(jī)(例如服務(wù)器)經(jīng)由通信鏈路(例如調(diào)制解調(diào)器或網(wǎng)絡(luò)連接)傳送到請求計算機(jī)(例如客戶端)。應(yīng)當(dāng)認(rèn)識到,貫穿本說明書的對于“一個實施例”或“實施例”的提及是指結(jié)合實施例描述的特定特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一個實施例中。因此,所強(qiáng)調(diào)并且應(yīng)當(dāng)認(rèn)識到的是在本說明書的各種位置處對于“實施例”或“一個實施例”或者“替換實施例”的兩次或更多次的提及不一定都是指相同的實施例。此外,在本發(fā)明的一個或多個實施例中,可以適當(dāng)?shù)亟M合所述特定特征、結(jié)構(gòu)或特性。在前述說明書中,已經(jīng)參照本發(fā)明的特定實施例對本發(fā)明進(jìn)行了描述。然而,將顯而易見的是,可以對其進(jìn)行各種修改和改變,而不背離如所附權(quán)利要求限定的本發(fā)明的更寬的精神和范圍。因此,所述說明書和附圖要被視為說明性的而不是限制性的。權(quán)利要求一種機(jī)器可讀存儲介質(zhì),該機(jī)器可讀存儲介質(zhì)在其上有形地存儲機(jī)器可讀指令,當(dāng)由機(jī)器執(zhí)行時,所述機(jī)器可讀指令使該機(jī)器執(zhí)行包括以下各項的操作將多個串值經(jīng)由編碼索引傳播到字典的共享樹葉結(jié)構(gòu)的壓縮樹葉數(shù)據(jù);經(jīng)由查找操作獲取所述多個串值的多個保持順序的整數(shù)代碼;如果在所述獲取期間沒有找到所述多個整數(shù)代碼的子集,則將沒有找到的所述多個整數(shù)代碼的子集所針對的所述多個串值的子集插入共享樹葉結(jié)構(gòu);產(chǎn)生所述多個串值的對應(yīng)子集的所述多個整數(shù)代碼的子集;以及提供保持順序的所述多個整數(shù)代碼的列表,該列表包括所產(chǎn)生的所述多個整數(shù)代碼的子集。2.如權(quán)利要求1所述的機(jī)器可讀存儲介質(zhì),其中,所述操作還包括將所述多個整數(shù)代碼經(jīng)由解碼索引傳播到字典的共享樹葉結(jié)構(gòu);以及更新所述編碼索引和解碼索引。3.如權(quán)利要求1所述的機(jī)器可讀存儲介質(zhì),其中,所述操作還包括利用來自所述多個保持順序的整數(shù)代碼的對應(yīng)整數(shù)代碼,重寫相等謂詞或范圍謂詞中的來自所述多個串值的串值;以及利用來自所述多個保持順序的整數(shù)代碼的對應(yīng)的整數(shù)代碼范圍,重寫前綴謂詞的串前4.如權(quán)利要求1所述的機(jī)器可讀存儲介質(zhì),其中,獲取所述多個保持順序的整數(shù)代碼還包括對壓縮后的樹葉數(shù)據(jù)執(zhí)行順序搜索操作,而不將該壓縮后的樹葉數(shù)據(jù)解壓縮。5.如權(quán)利要求1所述的機(jī)器可讀存儲介質(zhì),其中,所述編碼索引包括高速緩存敏感的數(shù)組trie索引或高速緩存敏感的前綴樹索引。6.如權(quán)利要求5所述的機(jī)器可讀存儲介質(zhì),其中,所述高速緩存敏感的數(shù)組trie包括將所述多個串值存儲在數(shù)組中;經(jīng)由每個高速緩存敏感的數(shù)組trie節(jié)點(diǎn)處的可變緩沖器,按照預(yù)定順序?qū)⑺龆鄠€串值傳播到共享樹葉結(jié)構(gòu),以便對于每一批次只填充所述數(shù)組一次;以及并行地產(chǎn)生所述多個串值的對應(yīng)子集的所述多個整數(shù)代碼的子集。7.如權(quán)利要求5所述的機(jī)器可讀存儲介質(zhì),其中,所述高速緩存敏感的前綴樹包括計算第一最短前綴以區(qū)分該高速緩存敏感的前綴樹的第一樹葉的最大值和第二樹葉的最小值;計算第二最短前綴以區(qū)分第二樹葉的最大值和第三樹葉的最小值;以及如果在該高速緩存敏感的前綴樹的一個層級中存在多于一個的節(jié)點(diǎn),則在頂部增加具有存儲所計算的第一和第二前綴的節(jié)點(diǎn)的第二層級,其中,所述節(jié)點(diǎn)是該高速緩存敏感的前綴樹的根。8.一種計算機(jī)實現(xiàn)的方法,包括將多個串值經(jīng)由編碼索引傳播到字典的共享樹葉結(jié)構(gòu)的壓縮樹葉數(shù)據(jù);經(jīng)由查找操作獲取所述多個串值的多個保持順序的整數(shù)代碼;如果在所述獲取期間沒有找到所述多個整數(shù)代碼的子集,則將沒有找到的所述多個整數(shù)代碼的子集所針對的所述多個串值的子集插入共享樹葉結(jié)構(gòu);產(chǎn)生所述多個串值的對應(yīng)子集的所述多個整數(shù)代碼的子集;以及提供保持順序的所述多個整數(shù)代碼的列表,該列表包括所產(chǎn)生的所述多個整數(shù)代碼的子集。9.如權(quán)利要求8所述的方法,還包括將所述多個整數(shù)代碼經(jīng)由解碼索引傳播到字典的共享樹葉結(jié)構(gòu);以及更新所述編碼索引和解碼索引。10.如權(quán)利要求8所述的方法,還包括利用來自所述多個保持順序的整數(shù)代碼的對應(yīng)整數(shù)代碼,重寫相等謂詞或范圍謂詞中的來自所述多個串值的串值;以及利用來自所述多個保持順序的整數(shù)代碼的對應(yīng)的整數(shù)代碼范圍,重寫前綴謂詞的串前11.如權(quán)利要求8所述的方法,其中,獲取所述多個保持順序的整數(shù)代碼還包括對壓縮后的樹葉數(shù)據(jù)執(zhí)行順序搜索操作,而不將該壓縮后的樹葉數(shù)據(jù)解壓縮。12.如權(quán)利要求8所述的方法,其中,所述編碼索引包括高速緩存敏感的數(shù)組trie索引或高速緩存敏感的前綴樹索引。13.如權(quán)利要求12所述的方法,其中,所述高速緩存敏感的數(shù)組trie包括將所述多個串值存儲在數(shù)組中;經(jīng)由每個高速緩存敏感的數(shù)組trie節(jié)點(diǎn)處的可變緩沖器,按照預(yù)定順序?qū)⑺龆鄠€串值傳播到共享樹葉結(jié)構(gòu),以便對于每一批次只填充所述數(shù)組一次;以及并行地產(chǎn)生所述多個串值的對應(yīng)子集的所述多個整數(shù)代碼的子集。14.如權(quán)利要求12所述的方法,其中,所述高速緩存敏感的前綴樹包括計算第一最短前綴以區(qū)分該高速緩存敏感的前綴樹的第一樹葉的最大值和第二樹葉的最小值;計算第二最短前綴以區(qū)分第二樹葉的最大值和第三樹葉的最小值;以及如果在該高速緩存敏感的前綴樹的一個層級中存在多于一個的節(jié)點(diǎn),則在頂部增加具有存儲所計算的第一和第二前綴的節(jié)點(diǎn)的第二層級,其中,所述節(jié)點(diǎn)是該高速緩存敏感的前綴樹的根。15.一種計算系統(tǒng),包括面向列的數(shù)據(jù)庫系統(tǒng);基于字典的存儲單元,其指定在面向列的數(shù)據(jù)庫系統(tǒng)中多個可變長度的串值和多個整數(shù)代碼之間的映射;共享樹葉數(shù)據(jù)結(jié)構(gòu),該共享樹葉數(shù)據(jù)結(jié)構(gòu)在其樹葉中以排序后的順序保存字典存儲單元的數(shù)據(jù);與基于字典的存儲單元通信的處理器,該處理器可操作以便使用共享樹葉數(shù)據(jù)結(jié)構(gòu)將所述多個可變長度的串值編碼為所述多個整數(shù)代碼以及將所述多個整數(shù)代碼解碼為所述多個可變長度的串值。16.如權(quán)利要求15所述的系統(tǒng),其中,所述共享樹葉數(shù)據(jù)結(jié)構(gòu)包括用于將所述多個可變長度的串值編碼的編碼索引以及用于將所述多個整數(shù)代碼解碼的解碼索引。17.如權(quán)利要求16所述的系統(tǒng),其中,所述編碼索引支持將所述多個可變長度的串值傳播到共享樹葉、查找所述多個整數(shù)代碼、以及在查找期間沒有找到所述多個整數(shù)代碼的子集時產(chǎn)生第二多個整數(shù)代碼。18.如權(quán)利要求16所述的系統(tǒng),還包括在共享樹葉數(shù)據(jù)結(jié)構(gòu)頂部使用高速緩存敏感的數(shù)組trie索引或高速緩存敏感的前綴樹索引作為編碼索引。19.如權(quán)利要求15所述的系統(tǒng),其中,所述高速緩存敏感的數(shù)組trie索引包括用于存儲所述多個可變長度的串值的數(shù)組。20.如權(quán)利要求15所述的系統(tǒng),其中,所述高速緩存敏感的前綴樹索引包括節(jié)點(diǎn),該節(jié)點(diǎn)包括使得能夠?qū)⑺龆鄠€可變長度的串值傳播到高速緩存敏感的前綴樹的子節(jié)點(diǎn)的最短前綴。全文摘要描述了一種方法和系統(tǒng),所述方法和系統(tǒng)涉及使用字典在列存儲器中利用固定長度的整數(shù)關(guān)鍵碼壓縮較大的一組可變長度的串值。該字典支持更新(例如新串值的插入),而不改變現(xiàn)有值的代碼。此外,描述了一種共享樹葉方法,用于對這樣的字典編制索引,其壓縮字典本身,同時提供用于編碼和解碼的訪問路徑。文檔編號G06F17/30GK101937448SQ20101021101公開日2011年1月5日申請日期2010年6月28日優(yōu)先權(quán)日2009年6月28日發(fā)明者卡斯滕·比寧格,弗朗茲·費(fèi)伯,斯蒂芬·希爾登布蘭德申請人:Sap股份公司