BKJIA資料庫頻道之前曾報導過《走進列資料庫Infobright的世界》,Infobright的總體構架圖如下:
如所示,Infobright採用了和MySQL一致的構架,分為兩層。上層是服務及應用管理,下層是儲存引擎。Infobright的預設儲存引擎是brighthouse,但是Infobright還可以支援其他的儲存引擎,比如MyISAM、MRG_MyISAM、Memory、CSV。Infobright通過三層來組織資料,分別是DP(Data Pack)、DPNData Pack Node)、KNKnowledge 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這篇論文。