Infobright的基本特征:
優點:
查詢性能高:百萬、千萬、億級記錄數條件下,同等的SELECT查詢語句,速度比MyISAM、InnoDB等普通的MySQL存儲引擎快5~60倍
存儲資料量大:TB級資料大小,幾十億條記錄
高壓縮比:在我們的項目中為18:1,極大地節省了資料存儲空間
基于列存儲:無需建索引,無需分區
适合複雜的分析性SQL查詢:SUM, COUNT, AVG, GROUP BY
支援事務(但不支援 savepoint)
限制:
不支援資料更新:社群版Infobright隻能使用“LOAD DATA INFILE”的方式導入資料,不支援INSERT、UPDATE、DELETE
不支援高并發:隻能支援10多個并發查詢;
ICE版本不對于infobright引擎不能使用主從結構;
Infobright 和 MySQL
Server層采用MySQL,存儲引擎層采用Infobright,由于是列式存儲引擎,Infobright 不能作為MySQL的插件存在,MySQL 也不能使用 infobright的 Knowledge Grid特性;仍可使用 MyISAM 和 CSV MEMORY 存儲引擎;
整體架構圖:
MySQL 與 infobright 各自分工:
MySQL: connect,tools,resources;驗證;服務管理,各種內建工具
Infobright: load 、compress data; 列式存儲引擎, Knowledge Grid 中繼資料統計資訊;
優化/執行
對于ICE版本,如果想要使用Innodb 這樣的引擎的話,最後借助federated 遠端連接配接存儲引擎;
架構分析:
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構架是Infobright高性能的重要原因。
Knowledge Grid可分為四部分,DPN、Histogram、CMAP、Pack/Pack
Histogram用來提高數字類型(比如date,time,decimal)的查詢的性能。是裝載資料的時候就産生的;
DPN中有mix、max,Histogram中把Min-Max分成1024段,如果Mix_Max範圍小于1024的話,每一段就是就是一個單獨的值。
Histogram的作用就是快速判斷目前DP是否滿足查詢條件。
CMAP是針對于文本類型的查詢,也是裝載資料的時候就産生的。用數值記錄某個字元串是否出現;0表示沒有出現,1表示出現過。查詢中文本的比較歸根究底還是按照位元組進行比較,是以根據CMAP能夠很好地提高文本查詢的性能。
Pack-To-Pack是Join操作的時候産生的,它是表示join的兩個DP中操作的兩個列之間關系的位圖,也就是二進制表示的矩陣。
Brighthouse.ini 記憶體推薦配置:
注意:infobright 可使用bhload 導入資料;
從infobright導出含有null的資料的時候,不會顯示,是以在導入到其他MySQL時候,會造成 column不對應;
壓縮比率指的是資料庫中的原始資料大小/壓縮後的資料大小,而不是文本檔案的實體資料大小/壓縮後的資料大小。
查詢優化部分:
對于字元串列的屬性 添加Comment Lookup可以減少存儲空間,提高壓縮率,采用comment lookup可以提高查詢效率。Comment Lookup實作機制很像位圖索引,實作上利用簡短的數值類型替代char字段已取得更好的查詢性能和壓縮比率;CommentLookup 一般要求資料類别的總數小于10000并且目前列的單元數量/類别數量大于10。Comment Lookup比較适合年齡,性别,省份這一類型的字段;
盡量不适用or,可以采用in或者union取而代之;
盡量使用獨立的子查詢和join操作代替非獨立的子查詢;
不在where裡面使用MySQL函數和類型轉換符;
盡量避免會使用MySQL優化器的查詢操作;
避免使用跨越Infobright表和MySQL表的查詢操作;
select裡面盡量剔除不要的字段。
本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1255762,如需轉載請自行聯系原作者