Infobright列數據庫的構架分析
51CTO數據庫頻道之前曾報導過《走進列數據庫Infobright的世界》,Infobright的總體構架圖如下:
如上圖所示,Infobright采用了和MySQL一致的構架,分為兩層。上層是服務及應用管理,下層是存儲引擎。Infobright的默認存儲引擎是brighthouse,但是Infobright還可以支持其他的存儲引擎,比如MyISAM、MRG_MyISAM、Memory、CSV。Infobright通過三層來組織數據,分別是DP(Data Pack)、DPN(Data Pack Node)、KN(Knowledge Node)。而在這三層之上就是無比強大的知識網絡(Knowledge Grid)。
數據塊(DP)是存儲的***層,列中每64K個單元組成一個DP。DP比列更小,具有更好的壓縮比率;又比單個數據單元更大,具有更好的查詢性能。
數據塊節點(DPN),DPN和DP之間是一對一的關系。DPN記錄著每一個DP里面存儲和壓縮的一些統計數據,包括***值、最小值、null的個數、單元總數count、sum等等。
KN里面存儲著指向DP之間或者列之間關系的一些元數據集合,比如值發生的范圍(MIin_Max)、列數據之間的關聯。大部分的KN數據是裝載數據的時候產生的,另外一些事是查詢的時候產生。
在這三層之上是知識網絡(Knowledge Grid),Knowledge Grid構架是Infobright高性能的重要原因。
Knowledge Grid可分為四部分,DPN、Histogram、CMAP、P-2-P。
DPN如上所述。Histogram用來提高數字類型(比如date,time,decimal)的查詢的性能。Histogram是裝載數據的時候就產生的。DPN中有mix、max,Histogram中把Min-Max分成1024段,如果Mix_Max范圍小于1024的話,每一段就是就是一個單獨的值。這個時候KN就是一個數值是否在當前段的二進制表示。
Histogram的作用就是快速判斷當前DP是否滿足查詢條件。如上圖所示,比如select id from customerInfo where id>50 and id<70。那么很容易就可以得到當前DP不滿足條件。所以Histogram對于那種數字限定的查詢能夠很有效地減少查詢DP的數量。
CMAP是針對于文本類型的查詢,也是裝載數據的時候就產生的。CMAP是統計當前DP內,ASCII在1-64位置出現的情況。如下圖所示
比如上面的圖說明了A在文本的第二個、第三個、第四個位置從來沒有出現過。0表示沒有出現,1表示出現過。查詢中文本的比較歸根究底還是按照字節進行比較,所以根據CMAP能夠很好地提高文本查詢的性能。
Pack-To-Pack是Join操作的時候產生的,它是表示join的兩個DP中操作的兩個列之間關系的位圖,也就是二進制表示的矩陣。
Knowledge Grid還是比較復雜的,里面還有很多細節的東西,可以參考官方的白皮書和Brighthouse: an analytic data warehouse for ad-hoc queries這篇論文。
原文鏈接:http://blog.chinaunix.net/u2/72637/showart_2306089.html
【編輯推薦】