專利名稱::基于值的出現(xiàn)的表壓縮的制作方法
技術(shù)領(lǐng)域:
:本公開(kāi)內(nèi)容涉及數(shù)字計(jì)算機(jī)的數(shù)據(jù)處理,更具體地說(shuō),涉及基于值的出現(xiàn)對(duì)表進(jìn)行壓縮。
背景技術(shù):
:搜索引擎可以在諸如關(guān)系表之類的數(shù)據(jù)庫(kù)表中搜索大量數(shù)據(jù),以找到結(jié)果。對(duì)于海量數(shù)據(jù),諸如包含上百萬(wàn)的記錄的表的組合,數(shù)據(jù)的處理可能需要大量硬件資源。例如,可能需要大量隨機(jī)存取存儲(chǔ)器空間來(lái)存儲(chǔ)與執(zhí)行用戶請(qǐng)求相關(guān)的所有記錄。
發(fā)明內(nèi)容這里公開(kāi)的主題提供包括計(jì)算機(jī)程序產(chǎn)品的方法和裝置,其實(shí)現(xiàn)與基于值的出現(xiàn)對(duì)表進(jìn)行壓縮相關(guān)的技術(shù)。在一個(gè)方面,生成基于字典的壓縮值的列,對(duì)列進(jìn)行排序,生成至少一個(gè)比特向量以用于所述列中的至少一個(gè),生成表示所述列中的至少一個(gè)的最頻繁出現(xiàn)值的出現(xiàn)的數(shù)量,從比特向量中去除最頻繁出現(xiàn)值,并且存儲(chǔ)所述數(shù)量和所述比特向量以實(shí)現(xiàn)對(duì)每一個(gè)所述數(shù)量和所述比特向量所表示的數(shù)據(jù)的存儲(chǔ)器內(nèi)搜索。所述基于字典的壓縮值的列以基于列的數(shù)據(jù)庫(kù)的每列的可能值的字典為基礎(chǔ),并且所述值可以代表結(jié)構(gòu)化的業(yè)務(wù)數(shù)據(jù)。所述排序可以包括對(duì)列進(jìn)行排序,以使得在列的順序中排在第一的第一列具有的該第一列的最頻繁出現(xiàn)值比其它列的頻繁出現(xiàn)值出現(xiàn)得更頻繁。排序還可以包括對(duì)所述第一列進(jìn)行排序,以使得該第一列的最頻繁出現(xiàn)值的實(shí)例位于該第一列的一端,并且對(duì)其它列進(jìn)行排序,以使得所述其它列中的至少一個(gè)的最頻繁出現(xiàn)值的實(shí)例朝向各個(gè)其它列的端部。比特向量中的每一個(gè)可以表示各列的最頻繁出現(xiàn)值,其中每個(gè)比特表示最頻繁出現(xiàn)值是否存在。在相關(guān)的方面,為所述列中的至少一列生成對(duì)應(yīng)于數(shù)據(jù)列的最頻繁出現(xiàn)值的至少一個(gè)比特向量,生成表示該列的最頻繁出現(xiàn)值的出現(xiàn)的至少一個(gè)數(shù)5量,從所述至少一個(gè)比特向量中去除最頻繁出現(xiàn)值,并且存儲(chǔ)所述數(shù)量和所述至少一個(gè)比特向量,以實(shí)現(xiàn)對(duì)所述數(shù)量和所述比特向量所表示的數(shù)據(jù)的搜索。所述向量的每個(gè)比特表示在所述列的相應(yīng)位置上值是否被實(shí)例化。在相關(guān)方面,生成表示在列的相鄰行的組中頻繁出現(xiàn)值的出現(xiàn)量的數(shù)量,生成表示在所述列的行中頻繁出現(xiàn)值被實(shí)例化的位置的向量,并且存儲(chǔ)所述數(shù)量和所述向量以實(shí)現(xiàn)對(duì)所述數(shù)量和所述向量所表示的數(shù)據(jù)的搜索。所述向量可以省略表示相鄰行的組的部分。主題可以被實(shí)現(xiàn)為例如計(jì)算機(jī)程序產(chǎn)品(例如,有形地體現(xiàn)在計(jì)算機(jī)可讀介質(zhì)中的源代碼和編譯代碼)、計(jì)算機(jī)實(shí)現(xiàn)的方法和系統(tǒng)。變化可以包括一個(gè)和多個(gè)下列特征。列的值可以是表示結(jié)構(gòu)化業(yè)務(wù)數(shù)據(jù)的值,其可以具有表的同一行中的數(shù)據(jù)相關(guān)性。業(yè)務(wù)數(shù)據(jù)可以包括業(yè)務(wù)對(duì)象,其可以被建模為連接表的集合。動(dòng)作可以在多個(gè)硬件服務(wù)器上并行執(zhí)行。例如,行可以分布在多個(gè)服務(wù)器上,并且每個(gè)服務(wù)器可以負(fù)責(zé)壓縮它的行中的數(shù)據(jù)??梢詮牧兄腥コc向量對(duì)應(yīng)的頻繁出現(xiàn)值,例如與比特向量對(duì)應(yīng)的最頻繁出現(xiàn)值,以生成簡(jiǎn)化列??梢蕴娲卸鎯?chǔ)簡(jiǎn)化列??梢詾槊恳涣小樗辛泻蜑榱械募系娜魏巫蛹杀忍叵蛄?。對(duì)列的值的改變可以存儲(chǔ)在與列分離的增量緩沖器中,并且可以異步整合所述改變??梢詫?shí)現(xiàn)這里描述的主題以實(shí)現(xiàn)下列優(yōu)點(diǎn)中的一個(gè)和多個(gè)。對(duì)海量數(shù)據(jù)庫(kù)數(shù)據(jù)(例如包含海量數(shù)據(jù)的關(guān)系表)進(jìn)行有效處理,可能需要高級(jí)數(shù)據(jù)壓縮,以在所安裝的存儲(chǔ)器中(例如易失性存儲(chǔ)器)或在硬盤(pán)存儲(chǔ)器設(shè)備上保留數(shù)據(jù)巻,并用于在移動(dòng)數(shù)據(jù)時(shí)(例如從硬盤(pán)驅(qū)動(dòng)器移動(dòng)到存儲(chǔ)器)的高效數(shù)據(jù)流。壓縮可能在信息處理硬件領(lǐng)域中具有多種影響,因?yàn)榭s減的數(shù)據(jù)量會(huì)需要較少的安裝的主存儲(chǔ)器或硬盤(pán)容量,并且縮減的數(shù)據(jù)流會(huì)對(duì)處理器高速緩存、處理器架構(gòu)和網(wǎng)絡(luò)帶寬具有較低的要求。所有這些都可能對(duì)硬件需求、響應(yīng)時(shí)間和總體系統(tǒng)性能具有有益影響。諸如業(yè)務(wù)數(shù)據(jù)的數(shù)據(jù)可以被壓縮并在存儲(chǔ)器中進(jìn)行搜索,因?yàn)閷?duì)顯著的數(shù)據(jù)壓縮可以允許對(duì)數(shù)據(jù)進(jìn)行節(jié)省成本的存儲(chǔ)器內(nèi)處理(例如,可以縮減服務(wù)器數(shù)量或物理存儲(chǔ)空間的量)。可以使用增量緩沖器來(lái)異步更新數(shù)據(jù),并且增量緩沖器可以幫助實(shí)現(xiàn)對(duì)索引更新進(jìn)行調(diào)度,以在不阻礙搜索性能時(shí)運(yùn)行(例如,系統(tǒng)可能用于優(yōu)選異步的、不經(jīng)常更新的情況中,以作為對(duì)提高搜索的響應(yīng)時(shí)間的折衷)。可以實(shí)現(xiàn)壓縮技術(shù)的組合,這可以取決于具體情況而提供有益的存儲(chǔ)器成本縮減。例如,如果期望縮減一列的存儲(chǔ)器占用空間,則可以僅僅對(duì)該列執(zhí)行基于字典的壓縮,同時(shí)在期望進(jìn)行壓縮以減少存儲(chǔ)器占用空間的情況下可以對(duì)其它列執(zhí)行基于向量的壓縮。在附圖和下面的描述中陳述了一個(gè)或多個(gè)實(shí)現(xiàn)方式的細(xì)節(jié)。從說(shuō)明書(shū)、附圖和權(quán)利要求書(shū)中,進(jìn)一步的特征、方面和優(yōu)點(diǎn)變得更加明顯。圖1A是圖示結(jié)構(gòu)化數(shù)據(jù)的表、用于表的列的字典、屬性表和主索引的框圖。圖1B是圖示結(jié)構(gòu)化數(shù)據(jù)的表、用于表的列的字典、屬性表和增量索引的框圖。圖1C是圖示從主索引和增量索引生成結(jié)果集合的示例。圖2A-2B是圖示結(jié)構(gòu)化數(shù)據(jù)的表的框圖。圖3是圖示屬性和關(guān)鍵指標(biāo)(keyfigure)的基數(shù)(cardinality)的表。圖4A-4B是圖示根據(jù)基于向量的壓縮而進(jìn)行壓縮的列的框圖。圖5是圖示用于壓縮數(shù)據(jù)和搜索壓縮的數(shù)據(jù)的系統(tǒng)的框圖。圖6是圖示對(duì)跨越多列的數(shù)據(jù)進(jìn)行排序的表的框圖。圖7A-7B是圖示對(duì)數(shù)據(jù)進(jìn)行壓縮和實(shí)現(xiàn)對(duì)壓縮數(shù)據(jù)進(jìn)行搜索的處理的流程圖。不同附圖中的相同參考標(biāo)號(hào)和標(biāo)記指代相同的元素。具體實(shí)施例方式一般來(lái)說(shuō),在圖1-7中,可以利用可以被稱為基于字典的壓縮、比特向量壓縮(或基于向量的壓縮)、排序比特向量壓縮(或基于縮短的向量的壓縮)、以及塊向量壓縮這樣的技術(shù)的組合來(lái)壓縮數(shù)據(jù)。所述數(shù)據(jù)可以是結(jié)構(gòu)化的業(yè)務(wù)數(shù)據(jù),其中從如下意義上說(shuō)數(shù)據(jù)被結(jié)構(gòu)化,即,數(shù)據(jù)可以是組織在諸如表之類的數(shù)據(jù)結(jié)構(gòu)中的屬性或關(guān)鍵指標(biāo),并且屬性或關(guān)鍵指標(biāo)可以具有相關(guān)性。例如,在信息表中,行可能在該行的數(shù)據(jù)之間具有相關(guān)性,使得該行的每列中的數(shù)據(jù)都與該行的其它列中的其它數(shù)據(jù)相關(guān)聯(lián)。數(shù)據(jù)的諸如空值的特定值可能在跨越成千或成百萬(wàn)的行中被非常頻繁的實(shí)例化,所述成千或成百萬(wàn)的行可能位于數(shù)據(jù)結(jié)構(gòu)的一部分中,諸如在表的特定行中,或者也可能跨越整個(gè)數(shù)據(jù)結(jié)構(gòu),從這個(gè)意義上說(shuō),數(shù)據(jù)可以形成稀疏分布。例如,具有兩千萬(wàn)條目的數(shù)據(jù)列可以包括一千九百萬(wàn)個(gè)空條目,其中該一千九百萬(wàn)個(gè)空條目位于不一定相鄰的不同行中。圖1A是圖示結(jié)構(gòu)化數(shù)據(jù)的表105、該表的列的字典IIO、屬性表115、和索引120??偟膩?lái)說(shuō),圖1A圖示了可以如何為表105中的列125提供字典110、屬性表115和索引120,其中,字典IIO為列125中的值規(guī)定值標(biāo)識(shí)符(Valueld),屬性表115列出各個(gè)文檔標(biāo)識(shí)符140(Docld)的值標(biāo)識(shí)符135,而索引120列出各個(gè)值標(biāo)識(shí)符150的文檔標(biāo)識(shí)符145。字典IIO可以被用來(lái)提供可以被稱為基于字典的壓縮,所述基于字典的壓縮可能涉及使用字典110通過(guò)利用可以占用較少存儲(chǔ)器的標(biāo)識(shí)符表示表中的值來(lái)減少存儲(chǔ)在表中的數(shù)據(jù)量。一般來(lái)說(shuō),字典IIO是列中出現(xiàn)的值以及值的標(biāo)識(shí)符(即,所述的值標(biāo)識(shí)符)的列表,其可以被排序。舉例來(lái)說(shuō),為了借助基于字典的壓縮減少數(shù)據(jù)表的列所占用的存儲(chǔ)器或盤(pán)空間,可以生成列中出現(xiàn)的不同的值的排序列表并且對(duì)不同的值進(jìn)行編號(hào)。編號(hào)(例如可以實(shí)現(xiàn)為整數(shù),而不是表現(xiàn)值本身的串)可被用作在值出現(xiàn)的表中的值的占位符。可以注釋對(duì)值進(jìn)行表示所需的最大編號(hào)。如果將列的基數(shù)定義為列中出現(xiàn)的不同值的數(shù)目,并且如果列的總長(zhǎng)度為N,則在值C比N小得多的情況下,基于字典的壓縮可能帶來(lái)益處,比如,與將表中的值進(jìn)行存儲(chǔ)相比,存儲(chǔ)器消耗減少了。C個(gè)值的排序列表可以被稱為字典,并且每當(dāng)需要確定表中出現(xiàn)的編號(hào)的值例如需要向用戶返回可讀結(jié)果時(shí)用于查找這些值。例如,表105包括列125,其具有諸如INTEL、ABB和HP之類的值。字典110包括值標(biāo)識(shí)符130,其可以表示可以在列125中的不同的值。例如,屬性表115包括列125的每行的值標(biāo)識(shí)符。例如,被稱為文檔標(biāo)識(shí)符1("DocIdl")的第一行160包括值INTEL,基于字典110具有與值INTEL相關(guān)聯(lián)的值標(biāo)識(shí)符4,其在屬性表115中用值標(biāo)識(shí)符4來(lái)表示。表105的列125的值可以用屬性表115的值標(biāo)識(shí)符來(lái)替換,這可以減少由列125表示的數(shù)據(jù)的存儲(chǔ)器占用空間(footprint).新表中的值標(biāo)識(shí)符連同字典IIO—起可以被用來(lái)重建列125的值。為了方^f更值查找并因此以更適于執(zhí)行查詢的方式呈現(xiàn)列的內(nèi)容,可以生成索引120并且此索引可以替換列125。索引120是由列125的行的值標(biāo)識(shí)符組織而成的列125的行的列表的表。例如,一個(gè)列表155指示第四個(gè)值標(biāo)識(shí)符與列125的第1、4和8行相關(guān)聯(lián)。舉例說(shuō)明表對(duì)存儲(chǔ)空間的影響,諸如圖1A的表105的表T中的行的數(shù)目可以等于N,N為1,000,000;并且對(duì)每行編碼所需的字節(jié)數(shù)可以等于500,其中500字節(jié)等于4,000比特,即4千比特。在不壓縮的情況下,表T可能需要500字節(jié)乘以1000,000的空間,這等于500兆字節(jié)的存儲(chǔ)空間;并且在一秒內(nèi)移動(dòng)表T所需的帶寬可能為4吉比特每秒(Gbit/s)。舉例說(shuō)明可以如何組織數(shù)據(jù),表T的列A中的不同值的數(shù)目可以等于A的基數(shù)C,C為250。在該示例中,列A的字典可以是由從O到250的整數(shù)編號(hào)的C個(gè)值的列表。上至250的整數(shù)的二進(jìn)制表示需要8個(gè)比特(這是因?yàn)?的8次冪等于256),即1字節(jié)。假設(shè)示例的表T由與列A類似的10列構(gòu)成,則任意一列中未被壓縮列的條目平均占用50字節(jié)(500字節(jié)除以10列等于每列50字節(jié))。列A的字典就需要IOO千比特(這是根據(jù)這樣的事實(shí)250個(gè)條目x(1個(gè)1字節(jié)的值標(biāo)識(shí)符+用來(lái)表示字典條目中的相應(yīng)值的50字節(jié))等于大約是12千字節(jié),即大約為100千比特)。因此,利用基于字典的壓縮,列A可以占用1,000,000字節(jié),即大約是一兆字節(jié),因?yàn)槔没谧值涞膲嚎s,列A所需的總空間約為1.01百萬(wàn)字節(jié)(壓縮的列加上相應(yīng)字典的空間);而在不壓縮的情況下列A占用的標(biāo)稱空間可以是50百萬(wàn)字節(jié)。因此,壓縮因子可以約為50。圖1B是圖示結(jié)構(gòu)化數(shù)據(jù)的表170、表的列的字典172、屬性表174、以及增量索引176的框圖。大體上,圖1B的框圖的特征與圖1A的特征類似地工作。例如,表105和170二者都存儲(chǔ)可以如上所述分別使用圖1A和1B的字典IIO、172、利用基于字典的壓縮來(lái)進(jìn)行壓縮的記錄。與圖1A的框圖相比,圖1B的框圖包括增量索引176,其可以被用來(lái)存儲(chǔ)對(duì)列的數(shù)據(jù)的改變,所述改變可以包括增加、修改、或刪除。具體來(lái)說(shuō),增量索引176包括對(duì)壓縮的列中的數(shù)據(jù)的改變的結(jié)果。作為典型增量索引的一種情況,增量索引176的字典值可以按時(shí)間順序排列(order)。按時(shí)間順序排列可以反映對(duì)數(shù)據(jù)所做的改變?cè)跁r(shí)間上的順序,如將增量索引176中的值與所指示的文檔標(biāo)識(shí)符的關(guān)聯(lián)所指示的那樣。例如,與值標(biāo)識(shí)符3相關(guān)聯(lián)的文檔標(biāo)識(shí)符1、4和8的列表178可以指示文檔標(biāo)識(shí)符1在文檔標(biāo)識(shí)符4之前被添加,所述文檔標(biāo)識(shí)符4在文檔標(biāo)識(shí)符8之前被添加。增量索引176的字典值的按時(shí)間順序排列可以在不修正先前條目的情況下有利地實(shí)現(xiàn)遞增寫(xiě)入(incrementalwrite)。圖IB的表170可以反映對(duì)圖1A的表105的改變或圖1A的表105的增量。例如,對(duì)應(yīng)于增量索引176的表170的每行可以表示被添加到對(duì)應(yīng)于主索引120的表105的行。再例如,如果表170中的行具有與表105的行相同的標(biāo)識(shí)符,則對(duì)應(yīng)于增量索引176的表170中的該行可以表示對(duì)表105中該行的替換。再例如,表170中的行可以表示與表105中具有相同記錄標(biāo)識(shí)符的行之間的差異(例如,同一記錄的各個(gè)列中的值的正的或負(fù)的增量差。增量索引176的實(shí)施方式可以不同。例如,雖然圖1B將增量索引176示為包括對(duì)增量值的基于字典的壓縮,但并不是必須如此。圖1C是圖示從主索引和增量索引生成結(jié)果集合的示例。例如,增量索引176可以與列的壓縮數(shù)據(jù)的索引(例如,諸如圖1A的主索引120)結(jié)合使用,其中增量索引176可以將數(shù)據(jù)的變化存儲(chǔ)在該索引中。增量索引176和列的壓縮數(shù)據(jù)的索引二者均可以被搜索,并且可以將來(lái)自這兩個(gè)源的結(jié)果合并以產(chǎn)生合成結(jié)果,該合成結(jié)果反映對(duì)壓縮的數(shù)據(jù)所做的改變(例如,如下面參考增量緩沖器所討論的那樣)。在該例中,通過(guò)從主索引尋找總收入以及向其增加來(lái)自增量索引的總收入,來(lái)計(jì)算公司(標(biāo)記為"IBM")的總收入。具體來(lái)說(shuō),命令180"RETURNTOTALREVENUEFORIBMSALES"("返回IBM銷售的總收入,,)可以被服務(wù)器程序分成兩個(gè)操作,其中這兩個(gè)操作包括第一操作182,其用于來(lái)自主索引的IBM的收入(在主索引中,圖1A的第5和第6行對(duì)應(yīng)于用于"IBM"的值標(biāo)識(shí)符3,總值為10歐元);以及第二操作184,其用于來(lái)自增量索引的IBM的收入(在增量索引中,圖1B的第1、4和8行對(duì)應(yīng)于用于"IBM"的值標(biāo)識(shí)符3,總值為9歐元)。并且,可以通過(guò)操作數(shù)186來(lái)合并來(lái)自這兩個(gè)操作的結(jié)果,其中合并可以包括向主索引的結(jié)果增加增量索引的結(jié)果。該增加量可以是正的或負(fù)的??梢酝ㄟ^(guò)首先刪除舊的行然后插入更新的行來(lái)處理對(duì)主索引中的條目的更新,其中在一種實(shí)施方式中刪除可以由增量索引中的負(fù)增加量來(lái)表示,而插入可以由增量索引中的正增加量來(lái)表示。圖2A-2B是圖示結(jié)構(gòu)化數(shù)據(jù)的表202、204的框圖。總的來(lái)說(shuō),第一表202表示沒(méi)有根據(jù)基于字典的壓縮進(jìn)行壓縮的銷售表的實(shí)現(xiàn)方式,而第二表204表示根據(jù)基于字典的壓縮進(jìn)行壓縮的第一表202的實(shí)現(xiàn)方式。的不同記錄的行。例如,列表示銷售編號(hào)206、日期208、地點(diǎn)代碼210、產(chǎn)品代碼212、售出的產(chǎn)品數(shù)量214、包裝屬性216、貨幣單位218、單位為美分的總值220、以及發(fā)票編號(hào)222。第一行224包括作為記錄的信息的組合,其包括銷售編號(hào)S2551、日期20040904、地點(diǎn)代碼L164、產(chǎn)品代碼P21191等。第二表204將第一表的列206-222的值表示為基于字典的壓縮的值。壓縮的值的類型包括屬性,但不包括關(guān)鍵指標(biāo)(原因在于那可能與值的壓縮無(wú)關(guān)),并且屬性由字典232中的標(biāo)識(shí)符來(lái)表示。例如,第一表202的銷售編號(hào)206的值被壓縮為第二表204的第一列中的6比特整數(shù)值(因?yàn)?8比特整數(shù)標(biāo)識(shí)符可以表示多達(dá)大約25萬(wàn)個(gè)值),其中,那些整數(shù)值可以代表第一字典230中的值,而第一表202的售出數(shù)量關(guān)鍵指標(biāo)值214未被表示在字典中(并且被表示為浮點(diǎn)數(shù),原因在于這無(wú)需與值的壓縮相關(guān))。第一字典230中的第一銷售標(biāo)識(shí)符0000表示第二表204的第一列228的值S2500。雖然圖2A-2B包括特定類型的基于字典的壓縮,但是這樣的壓縮可以不同。例如,雖然在圖2的第二表204中沒(méi)有根據(jù)基于字典的壓縮來(lái)對(duì)關(guān)鍵指標(biāo)進(jìn)行壓縮,但是在某些實(shí)施方式中,可以根據(jù)基于字典的壓縮來(lái)對(duì)關(guān)鍵指標(biāo)和屬性的組合進(jìn)行壓縮,可以只壓縮關(guān)^t指標(biāo),或者可以壓縮所選擇的關(guān)鍵指標(biāo)和屬性的組合。圖3是圖示屬性和關(guān)鍵指標(biāo)的基數(shù)的表300。例如,表300可以包括圖2A和圖2B的第一表202和第二表204的各個(gè)列的基數(shù)的列表。除了圖示基數(shù),表300還包括針對(duì)每個(gè)基數(shù)編碼各個(gè)列所需的比特?cái)?shù)。例如,編碼基數(shù)3的列^3所需的比特?cái)?shù)為2,因?yàn)?的二次冪為4,其是大于或等于3的2的最小整數(shù)冪。表300的列包括第一列305,其標(biāo)識(shí)另一表的列;第二列310,其指示相關(guān)聯(lián)的列中的值的基數(shù);以及第三列315,其指示基于相關(guān)聯(lián)的基數(shù)對(duì)相關(guān)聯(lián)的列進(jìn)行編碼所需的比特?cái)?shù)。例如,表300的第一條目325指示被標(biāo)識(shí)為M,的屬性的列具有基數(shù)24,對(duì)其進(jìn)行二進(jìn)制編碼需要5比特(因?yàn)?的5次冪是大于或等于24的2的最小的整數(shù)冪)。表300可以被用來(lái)通過(guò)基于列寬的值的基數(shù)生成列寬的值來(lái)減小表對(duì)存儲(chǔ)空間的影響,這可以與基于字典的壓縮一起組合使用。圖4A-4B是圖示根據(jù)基于向量的壓縮而被壓縮的列的框圖。該壓縮可以被稱為比特向量壓縮??偟膩?lái)說(shuō),該壓縮可以涉及找到列中最頻繁的值并且使用該列的比特向量來(lái)表示該值的出現(xiàn)或未出現(xiàn)。例如,l表示該值出現(xiàn)而0表示該值未出現(xiàn)。該壓縮還可以包括生成頻繁出現(xiàn)的值的出現(xiàn)次數(shù)并且從比特向量中去除該頻繁出現(xiàn)的值的出現(xiàn),以生成更小或簡(jiǎn)化的比特向量。例如,與圖4A中的框圖序列相比,圖4B中的框圖序列還包括將排序的值的比特向量簡(jiǎn)化為頻繁出現(xiàn)的值的出現(xiàn)次數(shù)以及表示其它值的縮短的比特向量。圖4A-4B的列中的值可以是基于字典壓縮的值。在圖4A的第一系列框圖中,如第一箭頭404所指示,比特向量406是為列402的值生成的。如第二箭頭408所指示,比特向量406由0和l構(gòu)成(populate),,其中O表示未出現(xiàn)頻繁出現(xiàn)的值0000,而l表示出現(xiàn)該值。用來(lái)構(gòu)成比特向量的頻繁出現(xiàn)的值可以是出現(xiàn)最頻繁的值或者僅僅是比其它值出現(xiàn)得更為頻繁的值。確定值是否頻繁出現(xiàn)可以基于掃描一列數(shù)據(jù)得到的掃描值的計(jì)數(shù)(tally),或者基于對(duì)被預(yù)期為出現(xiàn)最頻繁的值的統(tǒng)計(jì)分析(例如,在只有異常值為非空的異常表中,可以預(yù)期空值為出現(xiàn)最頻繁的值)。用于確定值出現(xiàn)是否頻繁的出現(xiàn)范圍可以被限制為一列數(shù)據(jù)(即,在逐列的基礎(chǔ)上頻繁出現(xiàn)的值可能不同)。如箭頭410所指示,可以通過(guò)去除出現(xiàn)最頻繁的值的出現(xiàn)來(lái)壓縮列402的值。例如,從列402去除值0000以生成壓縮的列412。為了基于壓縮的列412重建來(lái)自列402的值,可以使用比特向量406來(lái)指示壓縮后的列412中的值的位置以及頻繁出現(xiàn)的值的位置。例如,一旦已經(jīng)執(zhí)行基于字典的壓縮,可以通過(guò)如下部署相關(guān)列的比特向量來(lái)實(shí)現(xiàn)進(jìn)一步的壓縮。對(duì)于包含諸如空值這樣的頻繁重復(fù)的值的給定列A,在列A中可能找到最頻繁的值F并且使用該列的比特向量V對(duì)其進(jìn)行編碼。比特向量V可以具有N項(xiàng),其中N是表示列A中的行的數(shù)目的正整數(shù)。如果將v寫(xiě)成列A旁邊的列,那么V可以包括在A中值F的每次出現(xiàn)旁邊的1和A中任何其它行旁邊的0。比特向量V可以從列向量A中分離,并且可以從A中刪除所有包括值F的行,以生成壓縮的列向量A氣可以通過(guò)根據(jù)向量¥的指定重新插入值?來(lái)從壓縮的列向量八*重建列A,并且可以通過(guò)基于字典的壓縮技術(shù),使用所指定的字典來(lái)重建未壓縮的列的可讀值。舉例說(shuō)明可以如何實(shí)現(xiàn)縮減存儲(chǔ)空間的例子,對(duì)于N等于l,OOO,OOO行并具有列A的示例表T,使列A中的最頻繁的值F在A中出現(xiàn)9卯,000次。A中的另外10,000個(gè)值可以取自A的字典中列出的不同值的集合中的剩余值,其中,A的字典可以包含總共C個(gè)不同值,C為250。在此示例中,列A的比特向量V可以包含l,OOO,OOO比特,這大約為1兆比特,即約為125千字節(jié)。壓縮的列八*可以包括IO,OOO個(gè)條目,其中每一個(gè)用8比特(即,l字節(jié))整數(shù)編碼,以給出10千字節(jié)(即,10,000個(gè)條目xl字節(jié))的空間占用。在不壓縮的情況下列A所需的總空間是50MB(如參照未被壓縮的示例列A所討論的)。在利用向量壓縮的情況下所需的總空間可以包括字典的空間、用于壓縮的列八*的空間、以及用于比特向量V的空間?;谙蛄康膲嚎s版本的列A所需的總空間可以是147千字節(jié)(用于字典的12千字節(jié)、用于壓縮的列的IO千字節(jié)和用于比特向量的125千字節(jié))。可以實(shí)現(xiàn)大約為340的壓縮因子(即,未被壓縮的50,000千字節(jié)/根據(jù)基于向量的壓縮的實(shí)施方式壓縮的147千字節(jié))。與圖4A的第一系列框圖相比,圖4B的第二系列框圖涉及對(duì)數(shù)據(jù)的列進(jìn)行排序,以幫助生成表示頻繁出現(xiàn)的值的出現(xiàn)次數(shù)的數(shù)量。在圖4B的第二系列框圖中,如指向排序后的列418的第一箭頭416所示,生成排序版本的列414。然后,如指向比特向量422和簡(jiǎn)化的列424(該簡(jiǎn)化的列424去除了頻繁出現(xiàn)的值0000)的第二箭頭420所示,頻繁出現(xiàn)的值用比特向量422表示,并且排序后的列418將頻繁出現(xiàn)的值置于了新的位置。如第三箭頭426所示,生成表示頻繁出現(xiàn)的值的出現(xiàn)數(shù)量的次數(shù)428。此外,比特向量422被化簡(jiǎn)以去除頻繁出現(xiàn)的值的分組,以生成簡(jiǎn)化的或縮短的比特向量430。由于一些數(shù)據(jù)可能沒(méi)有被排序到比特向量422的前端或頂部,所以縮短的比特向量430可以被用來(lái)確定之后在化簡(jiǎn)的列424中是否出現(xiàn)頻繁出現(xiàn)的值。例如,跨越各個(gè)列的數(shù)據(jù)之間的相關(guān)性、排序規(guī)則、或因子的組合可能阻礙了列的值被排序到頻繁出現(xiàn)的值的分組。為了重建完整的列,可以結(jié)合簡(jiǎn)化的列424,使用值在分組中出現(xiàn)的次數(shù)428和縮短的比特向量430。例如,一旦借助基于字典的壓縮和基于向量的壓縮對(duì)表進(jìn)行了壓縮,那么在許多列具有許多頻繁出現(xiàn)的值(例如,多個(gè)空值或零值)的許多實(shí)例的情況下可以進(jìn)行更深層次的壓縮。表中的行可以被排序?yàn)楸M可能多地將它們的列中最頻繁出現(xiàn)的值置于列的頂部(例如,如參照?qǐng)D6的表600所描述的那樣),并且可以為列生成比特向量。在比特向量中,頻繁出現(xiàn)的值的最頂部的塊可以被替換為記錄頻繁出現(xiàn)的值在該塊中出現(xiàn)得有多頻繁的次數(shù)(例如,如圖4B的編號(hào)428所示)。該次數(shù)的使用可以使比特向量能夠被縮短并且提高總的壓縮比。舉個(gè)更為詳細(xì)的例子,示例表T可以具有M列,其中第l列中出現(xiàn)最頻繁的值為F—1,第2列中出現(xiàn)最頻繁的值為F—2,等等,以此類推直到F—M,其中第J列中的值F—J出現(xiàn)的次數(shù)可以被寫(xiě)為IF一JI并且第J列可以是任意列(即,從第1到第M列中的任意一列)??梢詫?duì)列進(jìn)行這樣編號(hào),使得依照最頻繁的值F的頻率給出列的次序,以便具有最多F值的排在第一而具有最少F值的排在最后。因此,第1到第M列可以這樣被編號(hào),使得IF—1|>|F—2|>...〉|F—Ml(例如,可以是圖6的表600中的列602的編號(hào)方式)。由第1列對(duì)表T的行進(jìn)行排序,使得所有的值F—1都位于頂部。對(duì)于頂部的IF一1I行的內(nèi)部順序來(lái)說(shuō),排序順序可以是無(wú)關(guān)緊要的,頂部的IFJI行可以依照第2列排序,以使得所有的值F—2都位于頂部。.現(xiàn)在,對(duì)于具有值F—2的行的頂部塊的內(nèi)部順序來(lái)說(shuō),排序順序可以是無(wú)關(guān)緊要的,從而這些行可以依照第3列排序以使得所有的值F—3都位于頂部。行的排序可以繼續(xù)直到具有值F—(M-l)的行的最頂部的塊被排序,以將值F—M置于頂部(例如,繼續(xù)對(duì)除了最后的第M列之外的所有列進(jìn)行排序)。所有FJ行位于頂部,很大數(shù)目的F一2行位于頂部,稍少些的F—3個(gè)行位于頂部,等等,完整性逐漸減小(如圖6的表600中所描繪的)。這種排序方式對(duì)于最大化最終壓縮比來(lái)說(shuō)可能不是理論上的最佳的排序,但是可能相對(duì)容易實(shí)施,使得它比更復(fù)雜的方法運(yùn)行得快(例如,更高效地利用處理資源),并且可能往往接近最佳排序。接續(xù)這個(gè)詳細(xì)的示例,可以為第1到第M列編寫(xiě)比特向量V_l到V_M,其中第J列的每個(gè)比特向量V_J包括用于值F_J的出現(xiàn)的值'l,以及用于任意其它值的值'O'。結(jié)果可以是比特向量Vj的集合,其中每一個(gè)比特向量V—J以值F一J的實(shí)體塊開(kāi)始。對(duì)于每一個(gè)V—J,值Fj的實(shí)體塊在它們的位置中寫(xiě)入數(shù)量n—J,該數(shù)字記錄在V—J中刪除了多少比特。對(duì)于稀疏表T(即,最頻繁的值頻繁出現(xiàn)的表,實(shí)例中該值不一定相鄰),由縮短的比特向量V、J加上數(shù)量n—J所占用的空間明顯小于全部比特向量V_J占據(jù)的空間?;诳s短的向量的壓縮可以極大地提高列中的值的聚集效應(yīng)(aggregation20effect)。例如,在所有的頻繁值F—J為零的情況下,聚集具有列的長(zhǎng)度為n一J的初始段的值可能是司空見(jiàn)慣的(例如,由于njx0等于0),并且開(kāi)發(fā)這種小活(triviality)的代碼會(huì)比沒(méi)有基于縮短的向量的壓縮的情況更整潔并且更力口快速。舉一個(gè)可以實(shí)現(xiàn)多少壓縮的例子,如以上所述再次令表T具有N個(gè)行,N為l,OOO,OOO;該表具有從列A—1到列A一IO的10個(gè)列;在列AJ中出現(xiàn)990,000次的最頻繁的值F—1;以及列A—1中的另夕卜10,000個(gè)值,這些值包含總共250個(gè)不同值,每個(gè)值1字節(jié)。不利用基于縮短的向量的壓縮,而是利用基于向量的壓縮,最頻繁出現(xiàn)的值F—1的列A*—l會(huì)占用IO千字節(jié)而比特向量V—1會(huì)占用125千字節(jié)。利用基于縮短的向量的壓縮,縮短的比特向量V*—l可以包含10,000比特并占用1.25千字節(jié)。表示排序的列A一l的V—1的1比特的塊的數(shù)量n—1在十進(jìn)制計(jì)數(shù)法中可以是990,000而在二進(jìn)制計(jì)數(shù)法中需要20比特(即,不到三字節(jié))。利用基于縮短的向量的壓縮而被壓縮的A一l所需的總空間可以包括用于字典的空間、用于短列A*—l的空間、用于短比特向量V*—l的空間、以及用于數(shù)量n—1的空間。因此,利用基于縮短的向量的壓縮的A一l的空間可以是小于27千字節(jié)(12千字節(jié)、IO千字節(jié)、1.25千字節(jié)和3個(gè)字節(jié))。如上所述,在不進(jìn)行壓縮的情況下,列A—1所需的總空間可能為50兆字節(jié)。利用基于縮短的向量的壓縮,壓縮因子可以大于1800(50,000千字節(jié)/27千字節(jié),適當(dāng)?shù)厣崛?。具有基于縮短的向量的壓縮的其它列(比如,列A—2至A一IO)的壓縮因子可能更小,這取決于有多少個(gè)值F—J被排序到它們的列的頂部,其中J為2到10,但是對(duì)于稀疏表來(lái)說(shuō),總壓縮因子仍然可以高到足以使這樣的壓縮非常值得,即使將重建列以及根據(jù)需要讀出所選擇的值所需的開(kāi)銷代碼考慮在內(nèi)也是如此。對(duì)于基于向量的壓縮和基于縮短的向量的壓縮二者來(lái)說(shuō),可能需要一些開(kāi)銷資源消耗(包括但不限于處理和存儲(chǔ)空間消耗)來(lái)壓縮和解壓縮列,以及在沒(méi)有解壓縮整列的情況下方便高效地讀取列中的值。附加開(kāi)銷的運(yùn)行可能既占用空間(包括但不限于主存儲(chǔ)空間)又耗費(fèi)時(shí)間(例如,按照處理器核心資源的百分比利用率所測(cè)量的時(shí)間),并且可能在為了采用基于縮短的向量的壓縮而設(shè)置閾值時(shí)考慮此不利后果(例如,與基于向量的壓縮、基于字典的壓縮相對(duì)比,或者不與它們中任何一個(gè)相對(duì)比)??梢岳迷囂椒ú⑼ㄟ^(guò)在各種表上進(jìn)行測(cè)試來(lái)設(shè)置所述閾值。在涉及包含海量數(shù)據(jù)的表的實(shí)施方式中,可以利用對(duì)壓縮技術(shù)的選擇(例如,不同的技術(shù)用于不同的列)來(lái)使存儲(chǔ)空間消耗而非處理消耗最小化。通過(guò)最小化存儲(chǔ)空間消耗,可以需要較少的硬件資源,比如刀片式服務(wù)器的數(shù)量以及安裝的物理存儲(chǔ)器的數(shù)量。此外,當(dāng)最少的存儲(chǔ)器占用量會(huì)允許在主存儲(chǔ)器(例如,易失性存儲(chǔ)器,比如隨機(jī)存取存儲(chǔ)器,其響應(yīng)時(shí)間比諸如硬盤(pán)驅(qū)動(dòng)器的、用于永久存儲(chǔ)的輔助存儲(chǔ)器要快)中壓縮以及搜索數(shù)據(jù)時(shí),壓縮數(shù)據(jù)和響應(yīng)查詢的整體速度可能提高,并且用于實(shí)施壓縮的處理開(kāi)銷可以較小,在可接受的范圍之內(nèi)。圖5是圖示用于壓縮數(shù)據(jù)和搜索壓縮后的數(shù)據(jù)的系統(tǒng)500的框圖。系統(tǒng)500包括搜索引擎管理工具502、主機(jī)504和存儲(chǔ)器506。通常,系統(tǒng)500可以被用于通過(guò)使用搜索引擎管理工具502來(lái)搜索主機(jī)504的壓縮后的數(shù)據(jù),并且所述數(shù)據(jù)可以由主機(jī)504來(lái)組織和壓縮。此外,保存在主機(jī)504的存儲(chǔ)器中的數(shù)據(jù)可以以壓縮或未壓縮的形式永久存留在存儲(chǔ)器506中。搜索引擎管理工具502可以是集成的服務(wù),其具有執(zhí)行搜索和壓縮的服務(wù),冗余地實(shí)施在每個(gè)主機(jī)504上(例如以提供相互監(jiān)視和備份這樣的方式)。主機(jī)504可以被組織成使得主機(jī)504中的每一個(gè)保存數(shù)據(jù)行的一部分。例如,第一主機(jī)508可以保存第一個(gè)一百萬(wàn)行,而第二主機(jī)510可以保存第二個(gè)一百萬(wàn)行??缭街鳈C(jī)504的數(shù)據(jù)行分布可以是均勻的,這可以促進(jìn)并行處理。例如,可以這樣做以促進(jìn)對(duì)跨越主機(jī)504解壓縮、搜索以及重新壓縮數(shù)據(jù)行的并行處理。這樣分布數(shù)據(jù)的結(jié)果是,從一到M的一系列列中的每列,其中M是正數(shù),可以被分為從1到N的若干部分,其中N是正整數(shù),并且每個(gè)主機(jī)被分配一個(gè)部分,其中每個(gè)主機(jī)負(fù)責(zé)被分配至該主機(jī)的那個(gè)部分(例如,負(fù)責(zé)所分配的部分的索引和壓縮,或者負(fù)責(zé)所分配的部分的解壓縮、搜索以及重新壓縮)。數(shù)據(jù)的表的邏輯索引可以被存儲(chǔ)在主機(jī)504之一中,并且該邏輯索引可以被用來(lái)確定數(shù)據(jù)駐留在主機(jī)504中的哪里,并且用來(lái)協(xié)調(diào)處理。例如,第一主機(jī)508包括邏輯索引518,其可以指示數(shù)據(jù)行位于主機(jī)504的哪里。作為協(xié)調(diào)處理的示例,搜索引擎管理工具502可以向第一主機(jī)508查詢響應(yīng)于搜索的結(jié)果并且將結(jié)果合并,以提供給搜索引擎管理工具502。主機(jī)504可以是共享存儲(chǔ)器506的刀片式服務(wù)器。存儲(chǔ)器506可以包括對(duì)應(yīng)于來(lái)自數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)表中的每一個(gè)的索引,例如第一索引512,在主機(jī)504為所述數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)壓縮。例如,表可以是多維OLAP(OnLineAnalyticalProcessing,在線分析處理)立方體的事實(shí)表(facttable)和維表。索引可以包含具有索引結(jié)構(gòu)的元數(shù)據(jù)的邏輯索引和壓縮后的列的集合。例如,第一索引512包括邏輯索引514和被壓縮的列的集合516,其中邏輯索引514可以包括主機(jī)504的數(shù)據(jù)的元數(shù)據(jù)。主機(jī)504中的每一個(gè)可以負(fù)責(zé)壓縮它們所負(fù)責(zé)的數(shù)據(jù)行。例如,第一主機(jī)508可以負(fù)責(zé)壓縮在被壓縮的列520中的數(shù)據(jù)行。所執(zhí)行的壓縮可以是在本文檔中描述的壓縮類型中的任何類型。諸如基于縮短的向量的壓縮的壓縮方案可以與每個(gè)索引一起存儲(chǔ)在主機(jī)上,并且在分離索引的情況下由邏輯索引來(lái)對(duì)其進(jìn)行協(xié)調(diào)。主機(jī)504中的每一個(gè)還包括增量緩沖器,例如,第一主機(jī)508包括第一增量緩沖器522。增量緩沖器可以存儲(chǔ)主機(jī)的各個(gè)索引部分的任何變化。例如,第一增量緩沖器522可以為表的第一部分存儲(chǔ)對(duì)存儲(chǔ)在數(shù)據(jù)列522中的數(shù)據(jù)的變化。增量緩沖器可以被用來(lái)存儲(chǔ)主機(jī)504中的數(shù)據(jù)的變化,而不是要求響應(yīng)于每次變化而更新數(shù)據(jù)(例如,更新可以是異步的,以避免在對(duì)數(shù)據(jù)進(jìn)行查詢期間妨礙性能)。與將變化同步寫(xiě)入所存儲(chǔ)的列的情況相比,無(wú)需針對(duì)各個(gè)變化而更新壓縮后的列會(huì)使得壓縮能夠?qū)⒄w系統(tǒng)性能提高到更高的程度。例如,如果更新被積累在增量緩沖器中并且以較低的頻率利用積累的更新來(lái)更新主索引,則可以減少與整合更新相關(guān)聯(lián)的處理開(kāi)銷,這是因?yàn)樗饕M(jìn)行1000個(gè)小更新以及每次都不得不對(duì)索引進(jìn)行的解壓縮和重新壓縮,而是可以將所述1000個(gè)更新寫(xiě)到增量緩沖器中,然后將它們?nèi)恳黄饘?xiě)到主索引中,這樣僅僅需要一次解壓縮和重新壓縮周期,從而實(shí)現(xiàn)將開(kāi)銷資源消耗減小一千倍。為了找到搜索結(jié)果,增量緩沖器可以與主索引中的被壓縮的數(shù)據(jù)一起被搜索,并且來(lái)自增量緩沖器的結(jié)果可以與來(lái)自主索引的結(jié)果合并,以生成結(jié)合了變化的結(jié)果。在一些實(shí)施方式中,根據(jù)實(shí)施方式和配置細(xì)節(jié),主機(jī)504中的每一個(gè)還可以包括一個(gè)或多個(gè)增量緩沖器,例如,每一個(gè)索引一個(gè)增量緩沖器。圖6是圖示對(duì)跨越多列的數(shù)據(jù)進(jìn)行排序的表600的框圖。行604中的每一個(gè)包括在列602之間相關(guān)的值。例如,第一行608包括表示業(yè)務(wù)對(duì)象的結(jié)構(gòu)數(shù)據(jù)的值的組合,其中第一行608中的每個(gè)值與第一行608中的其它值相關(guān),以使得對(duì)第一列610的排序也對(duì)其它列中的數(shù)據(jù)進(jìn)行排序,從而保持第一行608的值的組合。業(yè)務(wù)對(duì)象可以被建模為連接表(joinedtables)的集合。建模為連接表的集合可以是以業(yè)務(wù)對(duì)象能夠被建模成連接表的集合的方式定義業(yè)務(wù)對(duì)象的結(jié)果,因此,搜索引擎可以通過(guò)對(duì)表的行進(jìn)行搜索并計(jì)算業(yè)務(wù)對(duì)象的指定連接來(lái)操控對(duì)象。表600中的數(shù)據(jù)可以是基于字典的壓縮值。表600中的數(shù)據(jù)可以是如下行為的結(jié)果在基于向量的壓縮技術(shù)的準(zhǔn)備中將數(shù)據(jù)排序以將出現(xiàn)最頻繁的值編組。例如,對(duì)于列602中的每一個(gè)來(lái)說(shuō),值O可以是出現(xiàn)最頻繁的值,并且行可以已經(jīng)被排序,以使得在列602的最頂部生成該值的分組。表600中的行604的排序可能已經(jīng)考慮了列602之間出現(xiàn)最頻繁的值。例如,合計(jì)行606指示列602中的每一個(gè)中出現(xiàn)最頻繁的值的出現(xiàn)次數(shù)。列602可以已經(jīng)被排列為使得第一列610的出現(xiàn)最頻繁的值比列602中的每一個(gè)的其它頻繁出現(xiàn)的值出現(xiàn)得更頻繁,并且其它列的最頻繁出現(xiàn)的值也已經(jīng)被排列為使得在列中出現(xiàn)較頻繁的值被從A—2到A一9排列。在對(duì)列的排序的基礎(chǔ)上,可以對(duì)行進(jìn)行排序,以在行的一端生成盡量多的、分組中的出現(xiàn)頻繁的值,并且該排序可以考慮列之間的相關(guān)性。例如,可以按照列包含多少個(gè)0值,如合計(jì)行606所示,將列水平地排列為A—1到A一9。;陂標(biāo)記為列A一l的第一列610可以對(duì)其所有行排序?yàn)閷⑺?值置于頂部。然后,被標(biāo)記為列八_2的第二列612可以對(duì)第1到第19行排序?yàn)閷⑦@些行的0值置于頂部。被限制于第1到第19行的第二列612的排序可以基于維持第一列610的頂部最多值的排序次序以及數(shù)據(jù)行之間的數(shù)據(jù)的相關(guān)性。例如,由于第一列610的第l到第19行包括該列的出現(xiàn)最頻繁的值,所以,為了維持最頻繁出現(xiàn)的值在第1到第19行的分組,在第二列612中可以僅僅對(duì)那些行進(jìn)行排序。對(duì)于剩余的列中的每一個(gè),可以遵循這種排序技術(shù)。例如,被標(biāo)記為列A—3的第三列614可以對(duì)第1到第15行進(jìn)行排序以將那些行的0值置于頂部,其中其它行的0值可以保持在它們的位置(例如,第17行包括0值)。再例如,被標(biāo)記為列A_4的第四列616可以對(duì)第1到第14行進(jìn)行排序以將0值置于那些行的頂部;被標(biāo)記為列A—5的第五列618可以對(duì)第1到第10行進(jìn)行排序以將那些行的0值置于頂部;被標(biāo)記為列A—6的第六列620可以對(duì)第1到第8行進(jìn)行排序以將那些行的0值置于頂部;被標(biāo)記為列A—7的第七列622可以對(duì)第1到第7行進(jìn)行排序以將那些行的0值置于頂部;;故標(biāo)記為列A_8的第八列624可以對(duì)第1到第6行進(jìn)行排序以將那些行的0值置于頂部;被標(biāo)記為列A_9的第九列626可以對(duì)第1到第4行進(jìn)行排序以將那些行的0值置于頂部??梢允褂没谙蛄康膲嚎s,諸如參照?qǐng)D4B描述的基于縮短的向量的壓縮來(lái)壓縮被排序的列中的每一個(gè)。列的排序可以通過(guò)將較大塊的頻繁出現(xiàn)的值推到列的一端,從而例如使得利用此排序生成的比特向量比在不進(jìn)行這樣的排序的情況下生成的比特向量短,從而使壓縮的存儲(chǔ)空間節(jié)省最優(yōu)化。盡管表600包括可以作為排序的結(jié)果的特定數(shù)據(jù)組織,但是排序可以不同并且數(shù)據(jù)可以不同。例如,盡管對(duì)于列602中的每一個(gè)來(lái)說(shuō),同樣的值0是出現(xiàn)最頻繁的值,但是表可以不同,并且對(duì)于列602中的每一個(gè)來(lái)說(shuō),不同的值可以是出現(xiàn)最頻繁的值。再例如,一列中的出現(xiàn)最頻繁的值可以被用來(lái)對(duì)所有列排序,或者不需要對(duì)所有列排序。圖7A-7B是圖示壓縮數(shù)據(jù)和實(shí)現(xiàn)對(duì)壓縮后的數(shù)據(jù)的搜索的處理700和702的流程圖。處理700、702可以由圖5的主機(jī)504來(lái)實(shí)現(xiàn)。例如,主機(jī)504中的每一個(gè)可以對(duì)該主機(jī)所負(fù)責(zé)的數(shù)據(jù)部分執(zhí)行處理700。被壓縮的數(shù)據(jù)可以是結(jié)構(gòu)化的業(yè)務(wù)數(shù)據(jù)??梢栽诖鎯?chǔ)器中壓縮和搜索數(shù)據(jù),這是因?yàn)閿?shù)據(jù)的顯著壓縮可以允許對(duì)數(shù)據(jù)進(jìn)行節(jié)省成本的存儲(chǔ)器內(nèi)處理(例如,可以減少月良務(wù)的數(shù)目或物理存儲(chǔ)器的數(shù)量)。通常,在圖7A的處理700中,對(duì)存儲(chǔ)器中的數(shù)據(jù)列的基于字典的值進(jìn)行排序(704),生成表示列的頻繁出現(xiàn)的值的向量(706),生成表示頻繁出現(xiàn)的值的數(shù)目(708),并且存儲(chǔ)所述數(shù)目和縮短的向量(710)?;谧值涞闹档呐判蚩梢园ㄡ槍?duì)一列或多列值從最低值到較高值的排序。如果對(duì)多列值排序,則所述排序可以包括基于列的順序在其它列之前對(duì)一些列進(jìn)行排序(例如,基于出現(xiàn)最頻繁的值的數(shù)目在表的列中的順序)。例如,可以執(zhí)行基于參照?qǐng)D6的表600描述的、基于列602的順序?qū)Υ?J602進(jìn)行的排序。所述排序可以考慮列之間的數(shù)據(jù)的相關(guān)性。例如,基于字典的值可以表示利用對(duì)于同一行跨列的相關(guān)性來(lái)進(jìn)行結(jié)構(gòu)化的數(shù)據(jù),并且可以維持行中的值的關(guān)聯(lián)性。所述排序可以在服務(wù)器中進(jìn)行,所述服務(wù)器諸如圖5中的主才幾504中的一個(gè)。例如,對(duì)基于字典的值的排序可以包括對(duì)于表的每一列,對(duì)列進(jìn)行排列,以使得首先排列任何列中包括出現(xiàn)最頻繁的值(MFOV)的列,并且基19于之前一列的最頂部范圍內(nèi)的記錄對(duì)其它列進(jìn)行排序(714)。生成表示列的頻繁出現(xiàn)的值的向量(706)。該向量可以是利用比特表示行中頻繁出現(xiàn)的值的出現(xiàn)或未出現(xiàn)的比特向量??梢詾樗辛谢騼H為某些列(例如,圖5的主機(jī)504中的各個(gè)主機(jī))。頻繁出現(xiàn)的值可以、但并不一定是出現(xiàn)最頻繁的值,諸如在列的范圍內(nèi)出現(xiàn)最頻繁的值。例如,可以生成每列的出現(xiàn)最頻繁的值的比特向量表示(716)。生成表示頻繁出現(xiàn)的值的數(shù)字(708)。每個(gè)數(shù)字可以表示列中頻繁出現(xiàn)的值的出現(xiàn)次數(shù)。例如,圖4B包括數(shù)字6,其表示頻繁出現(xiàn)的值1000出現(xiàn)6次。出現(xiàn)的次數(shù)可以被限制為在列的一端(例如,在頂部或底部)頻繁出現(xiàn)的值的組中的出現(xiàn)的次數(shù)。例如,一列可以具有一組在頂部頻繁出現(xiàn)的值,所述數(shù)字可以表示該值在那個(gè)組中出現(xiàn)的次數(shù),并且所述列可以包括該值的其它實(shí)例。例如,可以生成表示在每列的最頂部部分頻繁出現(xiàn)的值的實(shí)例的數(shù)字(718)。存儲(chǔ)數(shù)字和縮短的向量(710)。例如,表示頻繁出現(xiàn)的值的出現(xiàn)的數(shù)字可以與縮短的向量一起被存儲(chǔ)。例如,可以為表的每一列存儲(chǔ)一組數(shù)量和比特向量??s短的向量可以是表示表示頻繁出現(xiàn)值的出現(xiàn)的向量,并且從該向量去除了所述數(shù)字所表示的值的出現(xiàn)以生成所述縮短的向量。除了存儲(chǔ)縮短的向量之外,可以從列中去除在所述值的組中頻繁出現(xiàn)的值的實(shí)例,以生成縮短或簡(jiǎn)化的列。例如,可以去除包括出現(xiàn)最頻繁的值的比特向量的頂端(720),并且可以存儲(chǔ)每一列的表示出現(xiàn)最頻繁的值的出現(xiàn)次數(shù)的數(shù)字和縮短的比特向量(722)。同樣,可以去除包括出現(xiàn)最頻繁的值的組的列的頂端或者可以去除出現(xiàn)最頻繁的值的所有實(shí)例(例如,最頂端的實(shí)例和其它實(shí)例,如果有的話),以生成縮短的列(并且,例如可以使用該比特向量重建出現(xiàn)最頻繁的值的所有實(shí)例)。一般來(lái)說(shuō),除了實(shí)施圖7A的處理700的子處理之外,圖7B的處理702還包括生成基于字典的壓縮值(712;例如,如參照?qǐng)D1A所描述的那樣),縮短表示列的值的向量(720;例如,如在以上段落中描述的),將壓縮后的列存儲(chǔ)在存儲(chǔ)器中(722),以及按照需要對(duì)列進(jìn)行解壓縮和重新壓縮列,以執(zhí)行查詢(724)。對(duì)壓縮后的列執(zhí)行搜索可以包括將壓縮后的列的數(shù)據(jù)加載到存儲(chǔ)器中(例如,將來(lái)自永久存儲(chǔ)器的壓縮數(shù)據(jù)加載到非易失性存儲(chǔ)器),將該數(shù)據(jù)解壓縮為臨時(shí)的結(jié)構(gòu),以及按照該搜索的規(guī)定選擇行。盡管圖7A和圖7B的處理700、702包括特定順序的特定處理,但是可以存在附加的、更少的或不同的子處理,并且那些子處理可以是以其它不同的順序。例如,可以基于列的出現(xiàn)最頻繁的值的比特向量表示對(duì)列進(jìn)行排序,而不是對(duì)整列進(jìn)行排序(例如,可以僅僅將出現(xiàn)最頻繁的值排序到列的一端,而其它值不需要在它們之間進(jìn)行排序)。再例如,可以基于對(duì)是否期望用一種類型的壓縮(如果有的話)來(lái)優(yōu)化性能(例如,降低存儲(chǔ)器消耗)的確定,來(lái)應(yīng)用基于字典的壓縮、基于普通向量的壓縮、以及基于縮短的向量的壓縮。例如,如果預(yù)期與列的基于非字典的值相比,基于字典的值和字典將消耗更少的存儲(chǔ)器,則可以執(zhí)行基于字典的壓縮。再例如,可以只對(duì)具有屬性而非關(guān)鍵指標(biāo)的行使用任意類型的壓縮來(lái)進(jìn)行壓縮。盡管每幅圖描述了特征的特定組合,但是實(shí)施方式可以改變。例如,附加的、不同的或更少的組件可以被包括在圖5的系統(tǒng)500中。這里描述的主題可以用包括本說(shuō)明書(shū)中公開(kāi)的結(jié)構(gòu)裝置和它們的結(jié)構(gòu)等同物的數(shù)字電子電路或計(jì)算機(jī)軟件、固件、硬件、或者它們的組合來(lái)實(shí)現(xiàn)。這里描述的主題可以實(shí)現(xiàn)為一個(gè)或多個(gè)計(jì)算機(jī)程序產(chǎn)品,即,有形地具體實(shí)施在信息載體中(例如在機(jī)器可讀存儲(chǔ)設(shè)備中或在傳播信號(hào)中)的一個(gè)或多個(gè)計(jì)算機(jī)程序,以供數(shù)據(jù)處理裝置執(zhí)行,或者用于控制數(shù)據(jù)處理裝置的操作,所述數(shù)據(jù)處理裝置例如可編程處理器、計(jì)算機(jī)或多個(gè)計(jì)算機(jī)。計(jì)算機(jī)程序(也稱作程序、軟件、軟件應(yīng)用或代碼)可以用任何形式的編程語(yǔ)言來(lái)編寫(xiě),編程語(yǔ)言包括匯編語(yǔ)言或解釋語(yǔ)言,并且計(jì)算機(jī)程序可以任何形式配置,包括作為獨(dú)立程序或者作為模塊、組件、子程序、或者其它適合用于計(jì)算機(jī)環(huán)境的任何單元。計(jì)算機(jī)程序不一定對(duì)應(yīng)于文件。程序可以存儲(chǔ)在保持其它程序或數(shù)據(jù)的文件的一部分中,存儲(chǔ)在專用于所述程序的單個(gè)文件中,或者存儲(chǔ)在多個(gè)協(xié)作文件中(例如,存儲(chǔ)一個(gè)或多個(gè)模塊、子程序或代碼部分的文件)。計(jì)算機(jī)程序可以被部署成在一臺(tái)計(jì)算機(jī)上或者在位于一個(gè)地點(diǎn)或者分布在多個(gè)地點(diǎn)并通過(guò)通信網(wǎng)絡(luò)互連的多個(gè)計(jì)算機(jī)上執(zhí)行。本說(shuō)明書(shū)中所描述的處理和邏輯流,包括這里描述的主題的方法和步驟,可以由一個(gè)或多個(gè)可編程處理器來(lái)執(zhí)行,該可編程處理器執(zhí)行一個(gè)或多個(gè)計(jì)算機(jī)程序,以通過(guò)對(duì)輸入數(shù)據(jù)進(jìn)行操作并生成輸出來(lái)執(zhí)行這里描述的主題的功能。所述處理和邏輯流也可以由專用邏輯電路來(lái)執(zhí)行,并且這里描述的主題的裝置也可以被實(shí)現(xiàn)為專用邏輯電路,專用邏輯電路例如FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)或ASIC(專用集成電路)。舉例來(lái)說(shuō),適合于執(zhí)行計(jì)算機(jī)程序的處理器包括通用微處理器和專用微處理器兩者,以及任何種類的數(shù)字計(jì)算機(jī)的任何一個(gè)或多個(gè)處理器。一般來(lái)說(shuō),處理器將從只讀存儲(chǔ)器、隨機(jī)訪問(wèn)存儲(chǔ)器或者二者接收指令和數(shù)據(jù)。計(jì)算機(jī)的主要元件是用于執(zhí)行指令的處理器以及用于存儲(chǔ)指令和數(shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)設(shè)備。一般來(lái)說(shuō),計(jì)算機(jī)還將包括用于存儲(chǔ)數(shù)據(jù)的一個(gè)或多個(gè)大容量存儲(chǔ)設(shè)備,或者被可搡作地耦接到所述一個(gè)或多個(gè)大容量存儲(chǔ)設(shè)備,以便從其接收數(shù)據(jù)或向其發(fā)送數(shù)據(jù)或者二者都進(jìn)行,大容量存儲(chǔ)設(shè)備例如磁盤(pán)、^t光盤(pán)或者光盤(pán)。適于體現(xiàn)計(jì)算機(jī)程序指令和數(shù)據(jù)的介質(zhì)包括所有形式的易失性存儲(chǔ)器(例如,隨機(jī)訪問(wèn)存儲(chǔ)器)或非易失性存儲(chǔ)器,舉例來(lái)說(shuō),包括半導(dǎo)體存儲(chǔ)設(shè)備,例如,EPROM、EEPROM、閃存設(shè)備;磁盤(pán),例如內(nèi)部硬盤(pán)或可移動(dòng)盤(pán);磁光盤(pán);以及CD-ROM和DVD-ROM盤(pán)。所述處理器和存儲(chǔ)器可以由專用邏輯電路補(bǔ)充,或者合并到所述專用邏輯電路中。為了提供與用戶的交互,這里描述的主題可以在具有用于向用戶顯示信息的顯示設(shè)備以及用戶可以通過(guò)其向計(jì)算機(jī)提供輸入的鍵盤(pán)、定點(diǎn)設(shè)備的計(jì)算機(jī)上實(shí)現(xiàn),顯示設(shè)備例如CRT(陰極射線管)或LCD(液晶顯示器),定點(diǎn)設(shè)備例如鼠標(biāo)或跟蹤球。其它類型的設(shè)備也可以用來(lái)與用戶進(jìn)行交互;例如,提供給用戶的反饋可以是任何形式的感覺(jué)反饋,例如,視覺(jué)反饋、聽(tīng)覺(jué)反饋、或觸覺(jué)反饋;并且,來(lái)自用戶的輸入可以被以任何形式接收,包括聲音、語(yǔ)音或者觸覺(jué)輸入。這里描述的主題可以在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn),該計(jì)算機(jī)系統(tǒng)包括后端組件(例如,數(shù)據(jù)服務(wù)器)、中間件組件(例如,應(yīng)用服務(wù)器)、或者前端組件(例如,具有用戶通過(guò)其可以與這里描述的主題的實(shí)施方式進(jìn)行交互的圖形用戶界面或網(wǎng)絡(luò)瀏覽器的客戶計(jì)算機(jī)),或者這樣的前端組件、中間件、后端組件的任意組合。通過(guò)任何形式或介質(zhì)的數(shù)字?jǐn)?shù)據(jù)通信,例如,通信網(wǎng)絡(luò),可以將系統(tǒng)的組件相互連接。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(LAN)和廣域網(wǎng)(WAN),例如因特網(wǎng)。計(jì)算機(jī)系統(tǒng)可以包括客戶機(jī)和服務(wù)器??蛻魴C(jī)和服務(wù)器通常在邏輯意義上遠(yuǎn)離對(duì)方,并且典型地通過(guò)通信網(wǎng)絡(luò)來(lái)進(jìn)行交互??蛻魴C(jī)和服務(wù)器的關(guān)系借助運(yùn)行在各自計(jì)算機(jī)上的彼此具有客戶機(jī)-服務(wù)器關(guān)系的計(jì)算機(jī)程序而發(fā)生。已經(jīng)按照具體實(shí)施例描述了這里描述的主題,并且其它實(shí)施例也可以被實(shí)施并且也在所附權(quán)利要求書(shū)的范圍內(nèi)。例如,操作可以不同但仍然達(dá)到期望的結(jié)果。在特定實(shí)施方式中,多任務(wù)和并行處理可以是優(yōu)選的。其他實(shí)施例也在所附權(quán)利要求書(shū)的范圍內(nèi)。權(quán)利要求1、一種計(jì)算機(jī)程序產(chǎn)品,有形地實(shí)現(xiàn)在計(jì)算機(jī)可讀介質(zhì)中,所述計(jì)算機(jī)程序產(chǎn)品可操作以使得數(shù)據(jù)處理裝置執(zhí)行操作,所述操作包括生成基于字典的壓縮值的列,所述基于字典的壓縮值的列以基于列的數(shù)據(jù)庫(kù)的每列的可能值的字典為基礎(chǔ),并且是結(jié)構(gòu)化的業(yè)務(wù)數(shù)據(jù);對(duì)所述列進(jìn)行排序,以使得在所述列的順序中排在第一的第一列具有的該第一列中的最頻繁出現(xiàn)值比其它列的頻繁出現(xiàn)值出現(xiàn)得更頻繁;對(duì)所述第一列進(jìn)行排序,以使得該第一列的最頻繁出現(xiàn)值的實(shí)例位于該第一列的一端;對(duì)所述其它列中的至少一個(gè)進(jìn)行排序,以使得所述其它列中的至少一個(gè)的最頻繁出現(xiàn)值的實(shí)例朝向各個(gè)其它列的端部;生成用于所述列中的至少一個(gè)的比特向量,所述比特向量中的每一個(gè)表示各列的最頻繁出現(xiàn)值,所述生成包括使比特向量的每個(gè)比特在最頻繁出現(xiàn)值存在于相應(yīng)列的相應(yīng)行中時(shí)表示該最頻繁出現(xiàn)值存在.;生成用于具有相關(guān)聯(lián)的比特向量的列中的每一個(gè)的數(shù)量,該數(shù)量表示列的一端的最頻繁出現(xiàn)值的出現(xiàn)量;基于與比特向量相關(guān)聯(lián)的數(shù)量,從比特向量的每一個(gè)中去除各個(gè)列的一端的最頻繁出現(xiàn)值的表示;以及存儲(chǔ)用于所述一個(gè)或多個(gè)比特向量的每一個(gè)的一個(gè)或多個(gè)數(shù)量,以實(shí)現(xiàn)對(duì)每一個(gè)所述數(shù)量和所述比特向量所表示的數(shù)據(jù)的非易失性存儲(chǔ)器搜索。2、如權(quán)利要求l所述的產(chǎn)品,其中,所述基于字典的壓縮值是表示在表的同一行之間具有數(shù)據(jù)相關(guān)性的結(jié)構(gòu)化業(yè)務(wù)數(shù)據(jù)的值。3、如權(quán)利要求2所述的產(chǎn)品,其中,所述業(yè)務(wù)數(shù)據(jù)包括建^f莫為連接表的集合的業(yè)務(wù)對(duì)象。4、如權(quán)利要求1所述的產(chǎn)品,其中,在多個(gè)硬件服務(wù)器中并行執(zhí)行所述產(chǎn)品的操作。5、如權(quán)利要求4所述的產(chǎn)品,其中,所述操作還包括從對(duì)應(yīng)于所述一個(gè)或多個(gè)數(shù)量從列中去除最頻繁出現(xiàn)值,以生成簡(jiǎn)化列,并代替所述列而存儲(chǔ)該簡(jiǎn)化的列。6、如權(quán)利要求l所述的產(chǎn)品,其中,為所述列中的每一個(gè)或所有所述列生成所述比特向量。7、如權(quán)利要求l所述的產(chǎn)品,其中,在與所述列分離的增量緩沖器中存儲(chǔ)對(duì)所述列的基于字典的壓縮值的改變,并且所述改變被異步地整合。8、一種計(jì)算機(jī)程序產(chǎn)品,有形地實(shí)現(xiàn)在計(jì)算機(jī)可讀介質(zhì)中,所述計(jì)算機(jī)程序產(chǎn)品可操作以使得數(shù)據(jù)處理裝置執(zhí)行操作,所述操作包括生成與數(shù)據(jù)列的值相對(duì)應(yīng)的比特向量,所述數(shù)據(jù)列包括基于字典壓縮的值,所述生成包括使所述向量的每個(gè)比特在所述值存在于所述列的行中時(shí)表示該值存在,而在另外的值存在于該列的行中時(shí)表示該值不存在;生成表示所述列的最頻繁出現(xiàn)值的出現(xiàn)量的數(shù)量;從所迷比特向量去除在所述列中該最頻繁出現(xiàn)值的表示;以及存儲(chǔ)所述數(shù)量和所述比特向量,以實(shí)現(xiàn)對(duì)所述數(shù)量和所述比特向量所表示的數(shù)據(jù)的搜索。9、如權(quán)利要求8所述的產(chǎn)品,其中,所述基于字典的壓縮值是表示在表的同一行之間具有數(shù)據(jù)相關(guān)性的結(jié)構(gòu)化業(yè)務(wù)數(shù)據(jù)的值。10、如權(quán)利要求8所述的產(chǎn)品,其中,在非易失存儲(chǔ)器中、在多個(gè)硬件服務(wù)器上并行執(zhí)行所述產(chǎn)品的操作。11、如權(quán)利要求8所述的產(chǎn)品,其中,所述比特向量對(duì)應(yīng)于所迷列的最頻繁出現(xiàn)值。12、如權(quán)利要求8所述的產(chǎn)品,其中,所述操作還包括從所述列去除所述最頻繁出現(xiàn)值,以生成簡(jiǎn)化列,并且代替所述列而存儲(chǔ)所述簡(jiǎn)化列。13、如權(quán)利要求8所述的產(chǎn)品,其中,將對(duì)所述列的基于字典的壓縮值的改變存儲(chǔ)在與所述列分離的增量緩沖器中,并且異步地整合所述改變。14、如權(quán)利要求8所述的產(chǎn)品,其中,所述操作還包括生成基于字典的壓縮值;以及對(duì)所述列的基于字典的壓縮值進(jìn)行排序。15、一種方法,包括生成表示在列的相鄰行的組中頻繁出現(xiàn)值的出現(xiàn)量的數(shù)量;生成用于所述列的頻繁出現(xiàn)值的向量,所述向量表示在所述列的行中是否存在該頻繁出現(xiàn)值,并且所述向量省略了表示所述相鄰行的組的部分;以及存儲(chǔ)所述數(shù)量和所述向量以實(shí)現(xiàn)對(duì)所述數(shù)量和所述向量所表示的數(shù)據(jù)的搜索。16、如權(quán)利要求15所述的方法,其中,所述列的值表示具有在表的同一行之間具有數(shù)據(jù)相關(guān)性的結(jié)構(gòu)化業(yè)務(wù)數(shù)據(jù)。17、如權(quán)利要求15所述的方法,其中,所述向量對(duì)應(yīng)于所述列的最頻繁出現(xiàn)值。18、如權(quán)利要求15所述的方法,還包括從所述列中去除頻繁出現(xiàn)值,以生成簡(jiǎn)化列,并且替代所述列而存儲(chǔ)所述簡(jiǎn)化列。19、如權(quán)利要求15所述的方法,其中,將對(duì)所述列的值的改變存儲(chǔ)在與所述列分離的增量緩沖器中,并且異步整合所述改變。20、如權(quán)利要求15所述的方法,其中,所述向量是比特向量。全文摘要公開(kāi)了包括計(jì)算機(jī)程序產(chǎn)品的方法和裝置,用于基于值的出現(xiàn)對(duì)表進(jìn)行壓縮??傮w來(lái)說(shuō),生成表示在列的相鄰行的組中頻繁出現(xiàn)值的出現(xiàn)量的數(shù)量,生成表示在所述列的行中是否存在該頻繁出現(xiàn)值的向量,并且存儲(chǔ)所述數(shù)量和所述向量以實(shí)現(xiàn)對(duì)所述數(shù)量和所述向量所表示的數(shù)據(jù)的搜索。向量可以省略表示相鄰行的組的部分。值可以是表示諸如業(yè)務(wù)對(duì)象的業(yè)務(wù)數(shù)據(jù)的基于字典的壓縮值。壓縮可以在存儲(chǔ)器內(nèi)并行執(zhí)行,以改進(jìn)存儲(chǔ)器利用率、網(wǎng)絡(luò)帶寬消耗和處理性能。文檔編號(hào)G06F17/30GK101311931SQ200810107938公開(kāi)日2008年11月26日申請(qǐng)日期2008年5月21日優(yōu)先權(quán)日2007年5月21日發(fā)明者岡特·拉德斯托克,安德魯·羅斯,弗朗茲·費(fèi)爾伯申請(qǐng)人:Sap股份公司