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