論文摘抄 - Infobright

背景

論文 Brighthouse: AnAnalytic Data Warehouse for Ad-hoc Queries,VLDB 2008

 

brighthouse是一個面向列的數據倉庫,在列存儲和壓縮數據方面,數據壓縮比達到10:1。其核心Knowledge Grid(知識網格)層,即一個能自動調節、所存出具特別小的元數據層,替代了索引的功能,提供了數據過濾、統計信息表達、實際數據位置信息等內容,讓brighthouse可以作爲一個分析型的數據倉庫,,達到ad-hoc查詢的速度。Knowledge Grid層介入的是query優化和執行階段,減少數據讀入量和解壓縮開銷。

 

這篇論文中的brighthouse就是商業數據倉庫infobright。


介紹

面向列的架構比較適合分析型數據倉庫,面向行的架構比較適合OLTP系統。brighthouse是面向列的。

 

Knowledge Gird是一個data about data的思路,提供一些類似數據的統計信息,來幫助query優化和執行階段取得想要的數據,這是brighthouse設計最核心的部分。從層次上說,介於query優化、執行層和數據(壓縮)存儲層之間。而且Knowledge Grid存儲的元數據非常小,完全可以存在內存裏。

 

Knowledge Grid由Knowledge Nodes組成,每個Node上記錄了壓縮數據的元數據信息,這些實際數據存儲在Data Packs裏,數據量比較龐大,是按列存的,不做分區(這部分信息由Knowledge Node維護),且壓縮過。所以Data Packs相當於代表了brighthouse的數據存儲模型,而Knowledge Grid類似元數據層。


架構和模塊

架構圖:


灰色部分是mysql原有的模塊,白色與藍色部分則是 infobright自身的。

跟mysql一樣的兩層結構,上面的邏輯層處理查詢邏輯,下面的是存儲引擎。

通過這張圖主要說明幾個部分,數據導入導出、DataPack、Knowledge Grid、優化和執行。

 

邏輯層右端的loader與unloader是infobright的數據導入導出模塊,是一個獨立的服務。

 

存儲層最底層是Data Pack。每一個Pack裝着某一列的64K個元素,所有數據按照這樣的形式打包存儲,DataPack根據不同數據類型採用不同的壓縮算法,壓縮比很高。


Knowledge Grid裏面包含兩類結點:

每個Data Pack Node對應一個Data Pack,存儲一些統計信息,如min, max, avg, null的個數,總個數等;

Knowledge Node存儲了一些更高級的統計信息,以及與其它表的連接信息,這裏面的信息有些是數據載入時已經算好的,有些是隨着查詢進行而計算的,所以說是帶自動化的。

 

Knowledge Grid裏面還存了這樣幾種數據信息。

1.  Histograms(HISTS),爲數字型的列創建的柱狀圖。以二進制的方式存。

2.  Character Maps(CMAPS),爲字母型的列創建的信息,比如String裏面各個字母出現的情況。

3.  Pack-to-Packs,這部分是爲join型的操作準備的,關聯了兩張table的某條件下兩個column值。

應用方面,

HISTS適合between語句,因爲柱狀圖表達了最大,最小,range內分別的信息。

CMAPS適合LIKE語句,因爲是和字母相關的。

Pack-to-Packs適合join操作,爲join操作提供適合條件的對應table的Row編號。

以上大致說明了幾張數據統計信息表示和適合的場景。

 

query優化和執行方面,參考了粗糙集的思路來設計,把數據分爲相關,不相關,懷疑三種類型,對應正向region,負向region和boundary region。

 

總結

Infobright作爲開源的MySQL數據倉庫解決方案,引入了列存儲方案,高強度的數據壓縮,優化的統計計算等內容,本文是摘抄了infobright論文裏最重要的設計點,KnowledgeGird是infobright設計上的核心。



全文完 :)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章