專利名稱:對基于列的數(shù)據(jù)編碼的結(jié)構(gòu)的高效的大規(guī)模處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及用于減小大規(guī)模量的數(shù)據(jù)的大小并提高處理或查詢數(shù)據(jù)的速度 的、高效的基于列的數(shù)據(jù)編碼。背景作為關(guān)于常規(guī)壓縮的背景,當(dāng)大量數(shù)據(jù)被存儲在數(shù)據(jù)庫中時,如當(dāng)服務(wù)器計算機 收集很長時間段內(nèi)的大量數(shù)據(jù)記錄或事務(wù)時,其他計算機有時候希望訪問該數(shù)據(jù)或該數(shù)據(jù) 的目標(biāo)子集。在這一情況下,其他計算機可經(jīng)由一個或多個查詢運算符來查詢所需數(shù)據(jù)。在 這一方面,歷史上,關(guān)系型數(shù)據(jù)庫已經(jīng)出于此目的而演變,并且已經(jīng)被用于此類大規(guī)模數(shù)據(jù) 集合,并且已經(jīng)開發(fā)了指示數(shù)據(jù)庫管理軟件代表查詢客戶機從關(guān)系型數(shù)據(jù)庫或一組分布式 數(shù)據(jù)庫中檢索數(shù)據(jù)的各種查詢語言。傳統(tǒng)上,關(guān)系型數(shù)據(jù)庫是根據(jù)對應(yīng)于記錄的、具有字段的行來組織的。例如,第一 行可能包括關(guān)于其對應(yīng)于各列的字段的各種信息(姓名1、年齡1、地址1、性別1等),這 些信息定義了該第一行的記錄;而第二行可能包括關(guān)于第二行的各個字段的各種不同信息 (姓名2、年齡2、地址2、性別2等)。然而,傳統(tǒng)上,客戶機對巨大量的數(shù)據(jù)的查詢或?qū)Ρ镜?查詢或本地商業(yè)智能檢索巨大量的數(shù)據(jù)受到限制,因為它們無法滿足實時或近乎實時的要 求。尤其是在客戶機希望具有來自服務(wù)器的最新數(shù)據(jù)的本地副本的情況下,在給定有限的 網(wǎng)絡(luò)帶寬和有限的客戶機高速緩存存儲的情況下,從服務(wù)器傳輸這樣大規(guī)模量的數(shù)據(jù)對于 許多應(yīng)用迄今仍是不切實際的。例如,當(dāng)前,掃描并聚集各自具有大約160字節(jié)數(shù)據(jù)的6億行數(shù)據(jù)(大約100吉字 節(jié)數(shù)據(jù)),使用兩個“按……分組”操作和四個聚集操作作為樣本查詢,如行業(yè)標(biāo)準(zhǔn)TPC-H度 量所測量的最快的已知關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)可以在大約39. 9秒內(nèi)遞送并處理 這些數(shù)據(jù)。這表示了以大約2. 5( /秒的位速率的,或大約1500萬行/秒的遞送。然而,現(xiàn) 有系統(tǒng)的當(dāng)今狀態(tài)從成本觀點來看需要大約$200,000,這對于大多數(shù)用戶而言是很高的進 入障礙。此外,盡管很快,但39. 9秒并未開始滿足最嚴(yán)密的實時需求和要求,并且為改進留 下了很大的空間。作為進一步的背景,由于將不同的行概念化為不同記錄對于作為體系結(jié)構(gòu)的一部 分的關(guān)系型數(shù)據(jù)庫是很方便的,因此由于如何組織關(guān)系型數(shù)據(jù)庫的本質(zhì),用于減小數(shù)據(jù)集 大小的技術(shù)迄今已聚焦于行。換言之,行信息通過將每一記錄的所有字段一起保持在一行 上來保存每一記錄,并且用于減小聚集數(shù)據(jù)的大小的傳統(tǒng)技術(shù)將字段保持在一起來作為編 碼其自身的一部分。行程長度編碼(RLE)是一種常規(guī)形式的數(shù)據(jù)壓縮,其中數(shù)據(jù)行程,即其中相同的 數(shù)據(jù)值出現(xiàn)在許多相繼的數(shù)據(jù)元素中的序列,作為單個數(shù)據(jù)值和計數(shù)來存儲,而非作為原 始行程來存儲。實際上,對于大量的E,定義行程長度“6個E”,而非列出“EEEEEE”來作為 一條目。RLE對于包含許多這樣的行程的數(shù)據(jù)是有用的,例如,相對簡單的圖形圖像,如圖 標(biāo)、線條畫和動畫。然而,在數(shù)據(jù)傾向于在各個值或各個像素等之間都是唯一的或者另外地 在每一處幾乎都是唯一的情況下,已知RLE較低效。由此,有時候RLE本身不會有助于高效
4的數(shù)據(jù)減小,從而浪費了珍貴的處理時間而只有極少或沒有增益。已經(jīng)應(yīng)用于數(shù)據(jù)的另一種類型的壓縮包括字典編碼,該編碼通過經(jīng)由與所得數(shù)據(jù) 一起使用的字典將字段數(shù)據(jù)值權(quán)標(biāo)化(tokenize)為諸如順序整數(shù)等采用緊湊表示的減小 的位集以從該緊湊表示中獲得原始字段數(shù)據(jù)值來操作。已應(yīng)用于數(shù)據(jù)的另一類型的壓縮包括值編碼,該編碼通過對數(shù)據(jù)執(zhí)行某種啟用更 緊湊表示的變換,例如對數(shù)據(jù)應(yīng)用可逆數(shù)學(xué)函數(shù),將實數(shù)轉(zhuǎn)換成整數(shù),這減少了表示數(shù)據(jù)所 需的位數(shù)。例如,諸如浮點數(shù)等實數(shù)在存儲器中比整數(shù)值占用更多空間,且因此可逆地將浮 點值轉(zhuǎn)換成整數(shù)值減小了存儲大小,且因此使用該數(shù)據(jù)的處理器可在需要時導(dǎo)出浮點值。已經(jīng)應(yīng)用于數(shù)據(jù)的還有一種類型的壓縮包括位打包,該位打包對不同數(shù)據(jù)值的數(shù) 量進行計數(shù)或確定不同值所跨越的范圍,然后用優(yōu)化函數(shù)所確定的最小數(shù)量的位來表示該 組數(shù)量或值。例如,可能給定列的每一字段僅跨有限的范圍,且因此代替如最初為該字段所 定義的那樣用例如10個位來表示每一值,結(jié)果可以是只需要6個位來表示值。位打包根據(jù) 數(shù)據(jù)的更高效的6位表示來還原值。這些常規(guī)壓縮技術(shù)中的每一個已經(jīng)獨立地例如經(jīng)由行集合運算符來應(yīng)用于關(guān)系 型數(shù)據(jù)庫的按行組織的信息,但這些技術(shù)中的每一個遭受缺點,因為沒有一種技術(shù)足以解 決滿足從數(shù)據(jù)庫快速地將巨大量的數(shù)據(jù)遞送到對于最新數(shù)據(jù)有實時要求的消費客戶機的 問題。主要地,常規(guī)的方法聚焦于減小所存儲的數(shù)據(jù)的大小以最大化對于給定的盤大小或 存儲限制能存儲的數(shù)據(jù)量。然而,由于對必須被傳送來完成詢問的壓縮存儲結(jié)構(gòu)的數(shù)據(jù)密集型解碼或整體式 大小,這些技術(shù)本身實際上可能最終會增大根據(jù)對數(shù)據(jù)的掃描或查詢而花費在數(shù)據(jù)上的處 理時間量。例如,采用許多常規(guī)的壓縮技術(shù),壓縮數(shù)據(jù)所花費的時間越長,在大小方面所達 到的節(jié)省就越大;然而另一方面,用此類常規(guī)壓縮方案壓縮數(shù)據(jù)所花費的時間越長,則作為 結(jié)果解壓并處理所花費的時間也越長。因此,常規(guī)系統(tǒng)無法提供不僅壓縮數(shù)據(jù),而且還以使 得對數(shù)據(jù)的查詢、搜索和掃描更快的方式來壓縮數(shù)據(jù)的數(shù)據(jù)編碼技術(shù)。另外,網(wǎng)絡(luò)傳輸帶寬的限制固有地限制了客戶機能多快地接收壓縮數(shù)據(jù),從而在 對巨大量的數(shù)據(jù)的請求上施加了瓶頸。因此,期望提供一種在數(shù)據(jù)大小減小和查詢處理速 度方面達到同時增益的解決方案。還期望提供一種允許在用于大量數(shù)據(jù)的基于查詢的系統(tǒng) 中進行高效壓縮和處理的改進的數(shù)據(jù)編碼技術(shù)。當(dāng)今的關(guān)系型數(shù)據(jù)庫和對應(yīng)的壓縮技術(shù)的上述缺點僅旨在提供常規(guī)系統(tǒng)的一些 問題的概覽,并且不旨在是窮盡性的。常規(guī)系統(tǒng)的其他問題以及此處所描述的各非限制性 實施例的對應(yīng)的益處可以在審閱以下描述后變得更顯而易見。概述此處提供了簡化概述以幫助能夠?qū)σ韵赂敿毜拿枋龊透綀D中的示例性、非限制 性實施例的各方面有基本或大體的理解。然而,本概述并不旨在作為詳盡的或窮盡的概觀。 相反,本概述的唯一目的是以簡化的形式來提出與一些示例性非限制性實施例相關(guān)的一些 概念,作為以下各實施例的更為詳細的描述的序言。描述了對基于列的數(shù)據(jù)編碼的結(jié)構(gòu)的處理的各實施例。各非限制實施例允許在大 規(guī)模數(shù)據(jù)存儲上進行高效的查詢處理。接收查詢所蘊含的列子集來作為對應(yīng)于不同數(shù)據(jù)列 的整數(shù)編碼的且壓縮的值序列?;谠跀?shù)據(jù)子集的整數(shù)編碼的且壓縮的值序列中出現(xiàn)的壓縮類型的轉(zhuǎn)變來定義跨列子集的查詢處理桶。然后在存儲器中以按桶計的方式并基于如以 下更詳細定義的當(dāng)前桶的類型,例如,純桶、單雜質(zhì)桶、雙雜質(zhì)桶等,來處理查詢。數(shù)據(jù)的基于列的組織以及混合的行程長度編碼和位打包技術(shù)的應(yīng)用允許實時的 高效且快速的查詢響應(yīng)?;旌蠑?shù)據(jù)減小技術(shù)與基于列的組織相呼應(yīng)的協(xié)同作用,加上歸功 于基于列的緊湊表示的掃描和查詢效率中的增益,以常規(guī)系統(tǒng)的一小部分成本得到了顯著 改進的數(shù)據(jù)壓縮,例如,以少于最快的已知常規(guī)系統(tǒng)的成本的1/10的成本但快了 400倍。這些和其他實施例在下面將更詳細地描述。附圖簡述各非限制性實施例參考附圖來進一步描述,附圖中各非限制性實施例參考附圖來進一步描述,附圖中
圖1是示出基于列的編碼技術(shù)以及對已編碼數(shù)據(jù)的查詢的存儲器內(nèi)客戶機側(cè)處 理的一般框圖;圖2是示出采用基于列的編碼技術(shù)的編碼裝置的示例性、非限制實現(xiàn)的框圖;圖3是示出用于向大規(guī)模數(shù)據(jù)應(yīng)用基于列的編碼的示例性、非限制過程的流程 圖;圖4是原始數(shù)據(jù)的基于列的表示的圖示,其中記錄被分解成其各自的字段,相同 類型的字段然后被串行化來形成向量;圖5是例示記錄數(shù)據(jù)的列化的非限制框圖;圖6示出了對關(guān)于查詢所接收到的列數(shù)據(jù)的存儲器內(nèi)客戶機側(cè)處理的工作可在 多個核之間拆分,以便共享處理跨列組織的大量行的負擔(dān);圖7是示出字典編碼的概念的非限制框圖;圖8是示出值編碼的概念的非限制框圖;圖9是示出在混合壓縮技術(shù)的一方面中應(yīng)用的位打包的概念的非限制框圖;圖10是示出在混合壓縮技術(shù)的另一方面中應(yīng)用的行程長度編碼的概念的非限制 框圖;圖11是示出采用基于列的編碼技術(shù)的編碼裝置的示例性、非限制實現(xiàn)的框圖;圖12是示出根據(jù)一實現(xiàn)的用于向大規(guī)模數(shù)據(jù)應(yīng)用基于列的編碼的示例性、非限 制過程的流程圖;圖13-14是執(zhí)行貪婪行程長度編碼壓縮算法的方式的示例性圖示,包括任選地應(yīng) 用閾值節(jié)省算法來應(yīng)用一替代壓縮技術(shù);圖15是進一步示出貪婪行程長度編碼壓縮算法的框圖;圖16是示出混合的行程長度編碼和位打包壓縮算法的框圖;圖17是示出基于總計的位節(jié)省分析來自適應(yīng)地提供不同類型的壓縮的混合壓縮 技術(shù)的應(yīng)用的流程圖;圖18是示出根據(jù)本發(fā)明的各實施例的基于列的編碼的示例執(zhí)行來減小總體數(shù)據(jù) 大小的框圖;圖19示出了關(guān)于純和非純區(qū)域之間的轉(zhuǎn)換(以及相反)可應(yīng)用于基于列的已編 碼數(shù)據(jù)的桶化過程;圖20示出了根據(jù)一實施例的關(guān)于列的桶化的非純等級;
圖21示出了將查詢/掃描運算符高效地劃分成對應(yīng)于與當(dāng)前查詢/掃描相關(guān)的 列中存在的不同類型的桶的子運算符;圖22示出了基于列的編碼的能力,其中所得的純桶表示數(shù)據(jù)的超過50%的行;圖23示出了用于以標(biāo)準(zhǔn)化方式指定對數(shù)據(jù)的查詢的、用于查詢語言的示例性、非 限制查詢構(gòu)件塊;圖M示出了對消費客戶機設(shè)備所請求的對于可經(jīng)由網(wǎng)絡(luò)獲得的大規(guī)模數(shù)據(jù)的樣 本查詢的代表性處理;圖25是示出根據(jù)各實施例的用于根據(jù)列來編碼數(shù)據(jù)的過程的流程圖;圖沈是示出根據(jù)一個或多個實施例的用于位打包整數(shù)序列的過程的流程圖;圖27是示出用于對數(shù)據(jù)的基于列的表示進行查詢的過程的流程圖;圖28是表示其中可實現(xiàn)此處所描述的各實施例的示例性、非限制性聯(lián)網(wǎng)環(huán)境的 框圖;以及圖四是表示其中可實現(xiàn)此處所描述的各實施例的一個或多個方面的示例性、非 限制性計算系統(tǒng)或操作環(huán)境的框圖。詳細描述概覽如在背景中所討論的,特別地,由于當(dāng)前壓縮技術(shù)的限制、網(wǎng)絡(luò)上的傳輸帶寬的限 制以及本地高速緩沖存儲器的限制,常規(guī)系統(tǒng)不足以處理在存儲器內(nèi)非??斓貜姆?wù)器或 “云”中的其他數(shù)據(jù)存儲讀取巨大量的數(shù)據(jù)的問題。例如,每秒讀取相當(dāng)于1. 5T字節(jié)的數(shù)據(jù) 將是非常好的技能,且目前成本是非常高的,其中最昂貴的常規(guī)解決方案以該速度的一小 部分來操作( 2. 5Gb/秒)。因此,在各非限制實施例中,向大量數(shù)據(jù)應(yīng)用面向列的編碼技術(shù)來壓縮數(shù)據(jù)且同 時組織數(shù)據(jù)以使得稍后對該數(shù)據(jù)的掃描/搜索/查詢運算顯著地更高效。作為以下內(nèi)容的 路標(biāo),首先描述各實施例的概覽,然后更詳細地討論示例性的、非限制任選實現(xiàn)來提供補充 的上下文和理解。首先,描述了用于對大量數(shù)據(jù)打包的基于列的編碼技術(shù),包括經(jīng)由混合壓 縮技術(shù)自適應(yīng)地在行程長度編碼的性能益處和位打包的性能益處之間進行折衷的示例性 實施例。在一示例性、非限制實施例中,在將原始數(shù)據(jù)列化成一組值序列,對每一列有一個 值序列(例如,串行化數(shù)據(jù)列的各字段,例如,所有“姓”串行化為一個序列,或所有“Po訂單 號”串行化為另一序列,等等)之后,對該數(shù)據(jù)進行“整數(shù)化”以便形成每一列的整數(shù)序列, 該整數(shù)序列根據(jù)字典編碼、值編碼或字典編碼和值編碼一起以任意次序來統(tǒng)一地表示。該 整數(shù)化階段得到統(tǒng)一表示的列向量,并且本身能達到顯著的節(jié)省,尤其是在數(shù)據(jù)中記錄了 諸如文本串等長字段的情況下。接著,檢查所有的列,壓縮階段迭代地將行程長度編碼應(yīng)用 于任何列的行程,這將導(dǎo)致對整體的列向量集合的最大量的整體大小節(jié)省。如上所述,打包技術(shù)是基于列的,其不僅提供了優(yōu)秀的壓縮,而且該壓縮技術(shù)本身 有助于在一旦將壓縮的整數(shù)列向量遞送到客戶機側(cè)之后快速地處理數(shù)據(jù)。在各非限制實施例中,如圖1所示,提供了基于列的編碼器/壓縮器110來用于壓 縮大規(guī)模數(shù)據(jù)存儲100并且還用于使得結(jié)果對于數(shù)據(jù)的掃描/搜索/查詢運算顯著更高 效。響應(yīng)于數(shù)據(jù)處理區(qū)C中的數(shù)據(jù)消費設(shè)備120的查詢,壓縮器110通過數(shù)據(jù)傳輸區(qū)B的傳輸網(wǎng)絡(luò)115來發(fā)送涉及該查詢的壓縮列。該數(shù)據(jù)被遞送到存儲器內(nèi)存儲130,且因此對 相關(guān)列的解壓可以由數(shù)據(jù)處理區(qū)C中的解碼器和查詢處理器140來非??斓貓?zhí)行。在這 一點上,向涉及該查詢的解壓的列所表示的行應(yīng)用桶走查來獲得額外的高效處理層。在桶 走查期間充分利用行的相似性,使得重復(fù)動作被一起執(zhí)行。如以下更詳細描述的,當(dāng)以具有 196GbRAM的標(biāo)準(zhǔn)或商用服務(wù)器將該技術(shù)應(yīng)用于真實的樣本數(shù)據(jù),如大量的web通信數(shù)據(jù)或 交易數(shù)據(jù)時,以大約每秒1. 5T字節(jié)數(shù)據(jù)實現(xiàn)了服務(wù)器數(shù)據(jù)的查詢/掃描,這是超越常規(guī)系 統(tǒng)的能力的極大飛躍,卻只花費了顯著降低的硬件成本。盡管可被壓縮的具體數(shù)據(jù)類型決不限于任何特定數(shù)據(jù)類型,且取決于對巨大量的 數(shù)據(jù)的大規(guī)模掃描的情形數(shù)量類似地是無限的,但在實時商業(yè)智能應(yīng)用中將這些技術(shù)應(yīng)用 于商業(yè)數(shù)據(jù)或記錄的商業(yè)重要性是不容置疑的。該壓縮技術(shù)所實現(xiàn)的查詢處理速度的極大 獲益將實時報告和趨勢標(biāo)識帶到了一個全新的水平。基于列的數(shù)據(jù)編碼如在概覽中所提到的,在各實施例中可向大量數(shù)據(jù)應(yīng)用面向列的編碼和壓縮來壓 縮且同時組織數(shù)據(jù)以使得稍后對數(shù)據(jù)的掃描/搜索/查詢運算顯著更高效。在各實施例中, 為了開始編碼和壓縮,最初將原始數(shù)據(jù)重新組織為列化的數(shù)據(jù)流。編碼器的一個實施例在圖2中概括地示出,其中在200處,從存儲接收或讀取原始 數(shù)據(jù),此時編碼裝置和/或編碼軟件250在210處將數(shù)據(jù)組織為列。在220處,將列流變換 成統(tǒng)一向量表示。例如,可應(yīng)用整數(shù)編碼來將像姓名或地點這樣的各個條目映射到整數(shù)。這 一整數(shù)編碼可以是字典編碼技術(shù),該技術(shù)可將數(shù)據(jù)減小2倍到10倍。另外,或另選地,值編 碼可在大小上提供1倍到2倍的減小。這在220處為每一列留下了一整數(shù)向量。這一性能 提高對所壓縮的數(shù)據(jù)敏感,并且這一大小減小范圍僅作為非限制估計來給出,以便給出不 同步驟的相對性能的一般概念。然后,在230處,可進一步壓縮已編碼的統(tǒng)一列向量。在一個實施例中,應(yīng)用行程 長度編碼技術(shù),該技術(shù)確定所有列上的最頻繁的值或值的出現(xiàn),在這一情況下,為該值定義 一行程長度,且該過程迭代直到行程長度編碼的益處為邊際效益的時刻,例如對于在列中 具有至少64次出現(xiàn)的重復(fù)出現(xiàn)的整數(shù)值。在另一實施例中,檢查應(yīng)用行程長度編碼所得的位節(jié)省,并且在該迭代過程的每 一步,通過應(yīng)用對行程長度的重新排序和定義來選擇各列中達到最大位節(jié)省的列。換言之, 由于目標(biāo)是用盡可能少的位來表示列,因此在每一步,在提供最大節(jié)省的列處最大化了位 節(jié)省。就這一點而言,行程長度編碼本身可以提供顯著的壓縮改善,例如100倍或更多。在另一實施例中,在230處應(yīng)用混合壓縮技術(shù),該技術(shù)采用了位打包和行程長度 編碼的組合。應(yīng)用檢查兩種技術(shù)的潛在節(jié)省的壓縮分析,并且在例如認(rèn)為行程長度編碼導(dǎo) 致不足夠的凈位節(jié)省的情況下,則向列向量的其余值應(yīng)用位打包。因此,一旦根據(jù)一個或 多個準(zhǔn)則確定行程長度節(jié)省是最小的,則該算法對于該列的其余相對唯一的值切換到位打 包。例如,在列中所表示的值變得相對唯一(其中非獨唯一或重復(fù)值已經(jīng)被行程長度編碼) 的情況下,可對這些值應(yīng)用位打包而非行程長度編碼在240處,輸出的是對應(yīng)于根據(jù)上述 技術(shù)編碼并壓縮的列值的一組壓縮的列序列。圖3概括地根據(jù)以原始數(shù)據(jù)300的輸入為開始的流程圖描述了上述方法。在310, 如上所述,根據(jù)原始數(shù)據(jù)300的列來重新組織數(shù)據(jù),而不是像常規(guī)系統(tǒng)那樣將記錄的每一字段保持在一起。例如,如圖4所示,每一列形成一獨立的序列,如序列C401、C402、C403、 C404、C405、C406。在零售交易數(shù)據(jù)是該數(shù)據(jù)的情況下,例如,列C401可能是產(chǎn)品價格的串, 列C402可能表示購買日期的串,列C403可能表示商店位置,等等。考慮到計算機系統(tǒng)所收 集的大多數(shù)真實世界數(shù)據(jù)在所表示的值方面并不是非常不同的,因此基于列的組織維持了 數(shù)據(jù)類型內(nèi)的固有相似性。在320處,基于列的數(shù)據(jù)經(jīng)歷一個或多個轉(zhuǎn)換來形成統(tǒng)一表示 的基于列的數(shù)據(jù)序列。在一個實施例中,步驟320經(jīng)由字典編碼和/或值編碼將每一列簡 化為數(shù)據(jù)的整數(shù)序列。在330處,用行程長度編碼過程以及可任選地用位打包來壓縮基于列的序列。在 一個實施例中,行程長度編碼過程對所有各列中達到最高壓縮節(jié)省的列的列數(shù)據(jù)值序列重 新排序。由此,行程長度編碼達到最高節(jié)省的列被重新排序來對由行程長度編碼替換的共 同值進行分組,然后為重新排序的組定義行程長度。在一個實施例中,跨各列迭代地應(yīng)用行 程長度編碼算法,在每一步檢查每一列來確定將達到最高壓縮節(jié)省的列。當(dāng)根據(jù)一個或多個準(zhǔn)則應(yīng)用行程長度編碼的益處變?yōu)檫呺H效益或最小,如不足夠 的位節(jié)省或節(jié)省小于一閾值時,則其應(yīng)用的益處相應(yīng)地下降。結(jié)果,該算法可以停止,或者 對于每一列中未被行程長度編碼來編碼的剩余值,可應(yīng)用位打包來進一步降低對這些值的 存儲要求。在組合中,混合行程長度編碼和位打包技術(shù)可能是強大的,以便減小列序列,尤 其是具有序列中表示的有窮或有限數(shù)量的值的那些序列。例如,字段“性別”僅有兩個字段值男和女。采用行程長度編碼,這一字段可被相 當(dāng)簡單地表示,只要數(shù)據(jù)是根據(jù)如上所述的原始數(shù)據(jù)的基于列的表示來編碼的。這是因為 背景中所描述的聚焦于行的常規(guī)技術(shù)實際上通過將每一記錄的字段保存在一起而破壞了 列數(shù)據(jù)的共同性。接在諸如“21”等年齡值后面的“男”不如僅僅接在“男”或“女”值后面 的“男”值壓縮得那樣好。由此,數(shù)據(jù)的基于列的組織啟用了高效的壓縮,且該過程的結(jié)果 是數(shù)據(jù)340的一組離散的、統(tǒng)一表示且壓縮的、基于列的序列。圖5給出了基于實際數(shù)據(jù)的列化過程的示例。圖5的示例針對4個數(shù)據(jù)記錄500、 501、502和503,但這僅出于圖示簡單的目的,因為本發(fā)明可適用于上萬億字節(jié)的數(shù)據(jù)。一 般而言,當(dāng)計算機系統(tǒng)記錄交易數(shù)據(jù)時,它是逐個記錄地記錄的,且一般按照接收記錄的時 間次序來記錄。由此,數(shù)據(jù)實際上具有對應(yīng)于每一記錄的行。在圖5中,記錄500具有帶有值“Jon”511的姓名字段510、帶有值“555_1212”521 的電話字段520、帶有值“j0n@g0”531的電子郵件字段530、帶有值“2 1st St" 541的地址 字段討0、以及帶有值“Wash” 551的州字段550。記錄501具有帶有值“Amy”512的姓名字段510、帶有值“ 123_4567”522的電話字 段520、帶有值“Amy@WO”532的電子郵件字段530、帶有值“ 1 2nd Pl”542的地址字段M0、 以及帶有值“Mont” 552的州字段550。記錄502具有帶有值“Jimmy”513的姓名字段510、帶有值“765-4321 ”523的電話 字段520、帶有值“Jim@SO”533的電子郵件字段530、帶有值“9FlyRd,、43的地址字段M0、 以及帶有值“0reg”553的州字段550。記錄503具有帶有值“Kim”514的姓名字段510、帶有值“987_6M3”524的電話字 段520、帶有值“Kim@to”534的電子郵件字段530、帶有值“91Y St"544的地址字段M0、以 及帶有值“Miss” 554的州字段550。
當(dāng)行表示560被列化為重新組織的列表示570時,代替具有各自有5個字段的4 個記錄,形成對應(yīng)于這些字段的5個列。由此,列1對應(yīng)于帶有值“Jon”511、之后是值“Amy”512、之后是值“Jimmy”513、 之后是值“Kim”514的姓名字段510。類似地,列2對應(yīng)于帶有值“555-1212” 521、之后是 值 “ 123-4567” 522、之后是值 “765-4321 ” 523、之后是值 “987-6M3” 524 的電話字段 520。 列3對應(yīng)于帶有值“ jonOgo ” 531、之后是值“AmyOw0,,532、之后是值“ Jimfeo,,533、之后是 值“Kim@to”534的電子郵件字段530。進而,列4對應(yīng)于帶有值“2 1st St” Ml、之后是值 “1 2nd Pl,、42、之后是值“9 Fly Rd” M3、之后是值“91 Y St” M4的地址字段M0。以 及,列5對應(yīng)于帶有值“Wash”551、之后是值“Mont”552、之后是值“0reg”553、之后是值 “Miss” 554 的州字段 550。在一個實施例中,當(dāng)對應(yīng)于上述技術(shù)的壓縮列被加載到消費客戶機系統(tǒng)上的存儲 器中時,該數(shù)據(jù)跨每一列Cl、C2、C3、C4、C5、C6來分段,以形成段600、602、604、606等等。 在這一點上,由于每一段可包括數(shù)億行或更多,并行化提高了例如根據(jù)查詢對數(shù)據(jù)的處理 或掃描速度。每一段的結(jié)果被聚集,以形成一組完整的結(jié)果,而每一段被分開處理。圖7是示出此處所描述的實施例采用的字典編碼的非限制示例的框圖。典型的城 市列700可包括值“kattle”、“L0S AngeleW'Redmond”等等,且這些值可以不斷地重復(fù) 自己。采用字典編碼,已編碼的列710包括對應(yīng)于每一不同值的碼元,如每一值一個唯一整 數(shù)。由此,代替多次表示文本“Seattle”,存儲整數(shù)“1”,這要緊湊得多。越經(jīng)常重復(fù)自己的 值可以用到最緊湊表示(最少位、最少位變化等)的映射來枚舉。仍作為字 典720的一部分被包括在編碼中,但是“kattle”只需被表示一次而非許多次。已編碼列 710的存儲節(jié)省遠超過了字典720所蘊含的額外存儲。圖8是示出此處所描述的實施例采用的值編碼的非限制示例的框圖。列800表示 銷售額,且包括典型的包括小數(shù)的美元和美分表示,這涉及浮點存儲。為了使存儲更緊湊, 采用值編碼來編碼的列810可向其應(yīng)用因子10,例如102,以便使用整數(shù)代替浮點值來表示 各值,其中整數(shù)需要較少的位來存儲。該變換可類似地應(yīng)用于減少表示值的整數(shù)數(shù)量。例 如,列中始終以百萬結(jié)束的值,如2,000, 000、185,000, 000等都可除以IO6來將值減小到更 緊湊的表示2、185等。圖9是示出此處所描述的實施例采用的位打包的非限制示例的框圖。列900表示 通過字典和/或值編碼來整數(shù)化的訂單量,但保留了每行32位來表示這些值。位打包試圖 對段中的值使用最少數(shù)量的位。在該示例中,可使用10位/行來表示值590、110、680和 320,這表示了對于被應(yīng)用來形成列910的第一層位打包的充分節(jié)省。位打包還可移除共同的10 (或其他數(shù)字)的冪來形成第二打包列920。由此,如果 值如同該示例中那樣以0結(jié)束,這意味著不需要使用3位/行來表示訂單量,且將存儲結(jié)構(gòu) 減少到7位/行。類似于字典編碼,位節(jié)省遠超過了由于將數(shù)據(jù)恢復(fù)到列900所需的元數(shù) 據(jù)(如使用10的幾次冪)而引起的任何增加的存儲。作為形成第三打包列930的另一層位打包,可以認(rèn)識到它采取7位/行來表示像 68那樣的值,但是由于最低值是11,則范圍可位移11 (將每一個值減去11),因而最高數(shù)是 68-11 = 57,這可以僅用6位/行來表示,因為有26 = 64個值可能性。盡管圖9表示了打 包層的特定次序,但各層可用不同的次序來執(zhí)行,或者另選地,打包層可被選擇性地移除或用其他已知的位打包技術(shù)來補充。圖10是示出此處所描述的實施例采用的行程長度編碼的非限制示例的框圖。如 圖所示,由于值的重復(fù),諸如列1000等表示訂單類型的列可用行程長度編碼來高效地編 碼。列值行程表1010將訂單類型映射到訂單類型的行程長度。盡管表1010的元數(shù)據(jù)的表 示上允許些許變化,但基本思想是行程長度編碼對于100的行程長度可給出50倍的壓縮, 這要優(yōu)于位打包一般可為同一數(shù)據(jù)集提供的增益。圖11是此處提供的一實施例的概括框圖,其中將圖7-10的技術(shù)合成到統(tǒng)一編碼 和壓縮方案的各實施例中。原始數(shù)據(jù)1100根據(jù)列組織1110被組織為列流。字典編碼1120 和/或值編碼1130提供了如上所述的相應(yīng)大小減小。然后,在混合RLE和位打包階段,壓 縮分析1140在確定是應(yīng)用行程長度編碼1150還是位壓縮1160時跨各列檢查潛在的位節(jié)省。在圖12的流程圖中對圖11進行擴展。在1200,根據(jù)固有行表示來接收原始數(shù) 據(jù)。在1210,將數(shù)據(jù)重新組織為列。在1220,應(yīng)用字典和/或值編碼來第一次減小數(shù)據(jù)。 在1230,可應(yīng)用如上所述的混合RLE和位打包技術(shù)。在1M0,存儲基于壓縮的且編碼的列 的數(shù)據(jù)序列。然后,當(dāng)客戶機請求全部基于壓縮的已編碼列的數(shù)據(jù)序列或請求其一子集時, 在1250,將受影響的列發(fā)送到作出請求的客戶機。圖13是執(zhí)行混合壓縮技術(shù)的壓縮分析的示例性方式的框圖。例如,從列1300中計 算直方圖1310,該直方圖表示值的出現(xiàn)頻率,或各個行程長度的出現(xiàn)頻率。任選地,可設(shè)置 閾值1312,使得行程長度編碼不應(yīng)用于其中行程長度增益可能最小的、數(shù)量上較少的值的 重復(fù)出現(xiàn)。另選地,或另外地,位節(jié)省直方圖1320不僅表示了值的出現(xiàn)頻率,而且還表示了 將通過應(yīng)用該混合壓縮模型的壓縮技術(shù)中的一種或另一種來達到的總的位節(jié)省。另外,再 一次可任選地應(yīng)用閾值1322以便畫出其中行程長度編碼益處不足以應(yīng)用該技術(shù)的線。取 而代之,可對列的這些值應(yīng)用位打包。另外,任選地,在應(yīng)用列1300的行程長度編碼之前,可對列1300重新排序來將所 有最相似的值分組為經(jīng)重新排序的列1300。在該示例中,這意味著將A分組在一起以供行 程長度編碼,并留下B進行位打包,因為對于2個B值,頻率和總的位節(jié)省都未證明行程長 度編碼是合理的。在這一點上,可向其他列應(yīng)用重新排序來保持記錄數(shù)據(jù)處于鎖定步驟,或 者它可經(jīng)由關(guān)于如何撤消行程長度編碼的重新排序的列專用元數(shù)據(jù)來記住。圖14示出了一相似的示例,其中向相似的列1400應(yīng)用壓縮分析,但是更改了每一 次替換行程長度的位節(jié)省,使得現(xiàn)在,根據(jù)混合壓縮分析判斷要對2個B值執(zhí)行行程長度編 碼(即使是在10個A值之前),因為2個B值導(dǎo)致更高的凈位節(jié)省。在這一點上,與貪食 者從具有不同食物的10個不同盤子中進行選擇非常相像,應(yīng)用行程長度編碼是“貪婪的”, 這表現(xiàn)在它在每一步都跨所有列尋找大小減小方面的最高增益。類似于圖13,可構(gòu)建頻率 直方圖1410和/或位節(jié)省直方圖1420數(shù)據(jù)結(jié)構(gòu),以便作出關(guān)于是應(yīng)用如所描述的行程長 度編碼還是位打包的確定。同樣,在決定是否采取RLE或位打包時可使用任選閾值1412和 1422。經(jīng)重新排序的列1430可幫助行程長度編碼定義更長的行程長度,且因此達到更大的 行程長度節(jié)省。圖15示出了行程長度編碼的“貪婪”方面,該方面在每一步跨所有列來檢查哪里 達到最高位節(jié)省,并且可任選地包括將列重新排序為列1530、1532等來最大化行程長度節(jié)省。在某一點,行程長度節(jié)省可能相對不重要,因為值是相對唯一的,此時停止行程長度編 碼。在混合實施例中,向其余值的范圍應(yīng)用位打包,這在圖16中示出。在這一點上,應(yīng) 用混合壓縮技術(shù),經(jīng)重新排序的列1600包括RLE部分1610和位打包部分1620,它們一般分 別對應(yīng)于重復(fù)出現(xiàn)的值和相對唯一的值。類似地,經(jīng)重新排序的列1602包括RLE部分1612 和BP部分1622。在圖17所示的一個實施例中,混合算法計算來自位打包的位節(jié)省和來自行程長 度編碼的位節(jié)省1700,然后在1710將來自位打包的位節(jié)省和來自行程長度的位節(jié)省進行 比較或檢查這兩種節(jié)省以便在1720確定哪一壓縮技術(shù)最大化位節(jié)省。上述編碼和壓縮技術(shù)的示例性執(zhí)行示出了可在真實數(shù)據(jù)樣本1801、1802、1803、 1804、1805、1806、1807和1808上達到的顯著增益,其范圍在大約9倍到99. 7倍的性能改 進,且特別地取決于特定的大規(guī)模數(shù)據(jù)樣本中的相對的值重復(fù)量。圖19是示出此處在各實施例中描述的列化、編碼和壓縮過程的最終結(jié)果的框圖。 在這一點上,每一列C1、C2、C3、…、CN包括具有向其應(yīng)用行程長度編碼的同類重復(fù)值的區(qū) 域,以及圖中標(biāo)記為“其他”的、表示列中的各組異類值的其他區(qū)域。具有由行程長度定義 的相同的重復(fù)值的區(qū)域是純區(qū)域1920,且具有多樣化值的區(qū)域是非純區(qū)域1910,如圖例中 所指示的。在這一方面,當(dāng)一個人的眼睛“走查”各列時,作為此處討論的壓縮技術(shù)的固有 好處,浮現(xiàn)數(shù)據(jù)上的新視圖??缢懈髁?,在非純區(qū)域1910和純區(qū)域1920之間或從相反方向的第一轉(zhuǎn)換點,按 照從第一行到轉(zhuǎn)換點處的行的各行來定義桶。在這方面,桶1900沿著各列向下在每一轉(zhuǎn)換 點處定義,如虛線所示。桶1900由各轉(zhuǎn)換之間的行來定義。圖20示出了基于跨特定行的純和非純區(qū)域的數(shù)量來為桶定義的命名法。純桶 2000是沒有非純區(qū)域的桶2000。單非純桶2010是跨該桶的各行具有1個非純區(qū)域的桶。 雙非純桶2010是跨該桶的各行具有2個非純區(qū)域的桶。三非純桶具有3個非純區(qū)域,以此 類推。由此,在示例性數(shù)據(jù)加載過程期間,以適合稍后的高效查詢的表示來對數(shù)據(jù)進行 編碼、壓縮、存儲,并且壓縮技術(shù)可以是所使用的查找一段內(nèi)的數(shù)據(jù)分布并試圖比位打包更 頻繁地使用RLE壓縮的技術(shù)。在這一點上,RLE對于壓縮和查詢都提供了以下優(yōu)點=(A)RLE 通常比位打包需要少得多的存儲,以及(B) RLE包括高效地“快進”通過數(shù)據(jù)范圍同時執(zhí)行 諸如“按……分組”、“過濾”和/或“聚集”等查詢構(gòu)件塊運算的能力;這些運算可以在數(shù)學(xué) 上變成對按列組織的數(shù)據(jù)的高效運算。在各非限制實施例中,代替在對同一段中的另一列進行排序之前一次對一個列進 行排序,該壓縮技術(shù)基于數(shù)據(jù)的分布來對數(shù)據(jù)行進行聚類,且由此增加了在段中對RLE的 使用。如此處所使用的,術(shù)語“桶”用于描述行的聚類,為了避免疑惑,該術(shù)語應(yīng)被認(rèn)為與術(shù) 語“分區(qū)”不同,分區(qū)是定義明確的在線分析處理(OLAP)和RDBMS概念。以上討論的技術(shù)由于認(rèn)識到數(shù)據(jù)分布是歪斜的且在大量數(shù)據(jù)中很少存在均勻分 布,因而是有效的。在壓縮用語中,算術(shù)編碼通過以下來充分利用這一點以總計使用較少 的位為目的,使用較少的位來表示頻繁使用的字符,并使用較多的位來表示不頻繁使用的 字符。
采用位打包,利用固定大小的數(shù)據(jù)表示來進行較快的隨機存取。然而,此處描述的 壓縮技術(shù)還具有使用RLE的能力,這提供了對于較頻繁的值使用較少的位的方式。例如,如 果原始表(為圖示簡明起見,包括一個列“Coll”)表現(xiàn)如下
權(quán)利要求
1.一種用于處理數(shù)據(jù)的方法,包括響應(yīng)于查詢,接收2700所述數(shù)據(jù)的子集作為對應(yīng)于所述數(shù)據(jù)的不同列的整數(shù)編碼的 且壓縮的值序列;基于所述數(shù)據(jù)的子集的整數(shù)編碼的且壓縮的值序列的任一個中出現(xiàn)的壓縮類型的變 化來定義跨作為整數(shù)編碼的且壓縮的值序列接收的所述數(shù)據(jù)的子集的處理桶2710 ;以及在處理所述整數(shù)編碼的且壓縮的值序列以返回查詢結(jié)果時,基于當(dāng)前桶的類型來執(zhí)行 由所述查詢定義的運算2720。
2.如權(quán)利要求1所述的方法,其特征在于,所述接收2700包括在存儲器中接收所述子 集以便進行對所述數(shù)據(jù)的子集的快速的存儲器運算和處理。
3.如權(quán)利要求1所述的方法,其特征在于,所述接收2700包括從關(guān)系型數(shù)據(jù)庫接收所 述數(shù)據(jù)的子集,并且所述數(shù)據(jù)的不同列對應(yīng)于所述關(guān)系型數(shù)據(jù)庫的列。
4.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括基于跨所述序列的所述 桶中的值的不同部分是根據(jù)第一類型的壓縮還是第二類型的壓縮來壓縮的,來執(zhí)行所述查 詢所定義的運算。
5.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括基于跨所述序列的所述 桶中的值的不同部分是根據(jù)行程長度編碼壓縮還是位打包壓縮來壓縮的,來執(zhí)行所述查詢 所定義的運算。
6.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括基于有多少跨所述序列 的所述桶中的值的不同部分是根據(jù)位打包壓縮來壓縮的,來執(zhí)行所述查詢所定義的運算。
7.如權(quán)利要求6所述的方法,其特征在于,所述執(zhí)行2720包括基于是否(1)跨所述序 列的所述桶中的值的不同部分都是根據(jù)行程長度編碼壓縮來壓縮的,即定義了純桶,(2)除 了一個部分之外都是根據(jù)行程長度編碼來壓縮的,即定義了單非純桶,或(3)除了兩個部 分之外都是根據(jù)行程長度編碼來壓縮的,即定義了雙非純桶,來執(zhí)行所述查詢所定義的運 笪弁。
8.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括基于所處理的當(dāng)前桶的 類型來執(zhí)行所述查詢所定義的運算,以及按序處理桶。
9.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括通過利用多個處理器以 及從所述序列劃分的對應(yīng)數(shù)量的段來并行化所述查詢所定義的運算,每一段由一不同處理 器來處理。
10.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括在處理所述整數(shù)編碼的 且壓縮的值序列以返回查詢結(jié)果時,基于所處理的當(dāng)前桶的類型來執(zhí)行所述查詢所定義的 邏輯或查詢片運算,或其中已指定了關(guān)系的多個表之間的查詢聯(lián)接運算。
11.如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行2720包括在處理所述整數(shù)編碼的 且壓縮的值序列以返回查詢結(jié)果時,基于所處理的當(dāng)前桶的類型來執(zhí)行所述查詢所定義的 過濾運算、分組運算、代理列運算或聚集運算中的至少一個。
12.如權(quán)利要求11所述的方法,其特征在于,過濾運算、分組運算、代理列運算或聚集 運算中的至少一個在對于當(dāng)前桶的各階段中彼此分開地處理2720,且處理按桶發(fā)生。
13.一種用于處理數(shù)據(jù)的設(shè)備,包括高速存儲器內(nèi)存儲130,用于存儲數(shù)據(jù)的子集,所述數(shù)據(jù)的子集是作為對應(yīng)于所述數(shù)據(jù)的不同字段的整數(shù)編碼的且壓縮的值序列而接收的;以及至少一個查詢處理器140,所述至少一個查詢處理器根據(jù)桶走查過程來處理對所述數(shù) 據(jù)的子集的查詢,所述桶走查過程基于從行程長度編碼到位打包的壓縮算法轉(zhuǎn)換或相反的 轉(zhuǎn)換來定義跨所述值序列的桶,然后基于跨正被處理的當(dāng)前桶的序列應(yīng)用的壓縮類型,根 據(jù)為所述當(dāng)前桶確定的桶類型來按桶處理對所述數(shù)據(jù)的子集的查詢。
14.如權(quán)利要求13所述的設(shè)備,其特征在于,所述壓縮類型包括行程長度編碼和位打包。
15.如權(quán)利要求13所述的設(shè)備,其特征在于,所述至少一個查詢處理器140基于所述桶 類型來處理對所述數(shù)據(jù)的子集的查詢的過濾運算。
16.如權(quán)利要求13所述的設(shè)備,其特征在于,所述至少一個查詢處理器140基于所述桶 類型來處理對所述數(shù)據(jù)的子集的查詢的分組運算。
17.如權(quán)利要求13所述的設(shè)備,其特征在于,所述至少一個查詢處理器140基于所述桶 類型來處理對所述數(shù)據(jù)的子集的查詢的代理列運算。
18.如權(quán)利要求13所述的設(shè)備,其特征在于,所述至少一個查詢處理器140基于所述桶 類型來處理對所述數(shù)據(jù)的子集的查詢的聚集運算。
19.如權(quán)利要求13所述的設(shè)備,其特征在于,所述至少一個查詢處理器140基于不同的 桶類型來跨所有桶確定查詢結(jié)果。
20.如權(quán)利要求13所述的設(shè)備,其特征在于,還包括用于將所述整數(shù)編碼的且壓縮的 值序列解碼為所表示的數(shù)據(jù)字段的解碼器140。
21.一種數(shù)據(jù)查詢裝置,包括用于按照對應(yīng)于不同數(shù)據(jù)列的整數(shù)編碼的且壓縮的值序列檢索115、200查詢所蘊含 的列子集的裝置;用于基于出現(xiàn)在數(shù)據(jù)子集的整數(shù)編碼的且壓縮的值序列中的壓縮類型的變化來定義 跨所述列子集的查詢處理桶140的裝置;以及用于在存儲器中以按桶計的方式處理140所述查詢且在處理所述整數(shù)編碼的且壓縮 的值序列時基于當(dāng)前桶的類型來處理所述查詢的裝置。
全文摘要
本發(fā)明涉及對大規(guī)模數(shù)據(jù)存儲的高效查詢處理。一示例性過程包括按照對應(yīng)于不同數(shù)據(jù)列的整數(shù)編碼的且壓縮的值序列來檢索查詢所涉及的列的子集,基于出現(xiàn)在該數(shù)據(jù)子集的整數(shù)編碼的且壓縮的值序列中的壓縮類型的變化來定義跨列子集的查詢處理桶,以及在存儲器中以按桶計的方式處理查詢并且當(dāng)處理該整數(shù)編碼的且壓縮的值序列時基于當(dāng)前桶的類型來處理查詢。數(shù)據(jù)的基于列的組織以及混合的行程長度編碼和位打包技術(shù)的應(yīng)用允許實時的高效且快速的查詢響應(yīng)。
文檔編號G06F17/30GK102112986SQ200980130978
公開日2011年6月29日 申請日期2009年7月31日 優(yōu)先權(quán)日2008年7月31日
發(fā)明者A·耐茨, C·佩特克勒斯克 申請人:微軟公司