基於Infobright的MySQL數據倉庫方案測試

數據倉庫之父Bill Inmon在1991年出版的“Building the Data Warehouse”一書中所提出的定義被廣泛接受——數據倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、集成的(Integrated)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合,用於支持管理決策(Decision Making Support)。

簡單的講數據倉庫是一個面向主題的、集成的、不可更新的、隨時間不斷變化的數據集合,它用於支持企業或組織的決策分析處理,這一句也是抄的,更直白 的舉例就是公司的歷史交易數據集合,網站的歷史訪問數據集合,這一句是原創的。

Infobright是開源的MySQL數據倉庫解決方案,引入了列 存儲 方案,高強度的數據壓縮,優化的統計計算(類似sum/avg/group by之類),下面是Infobright的架構圖:

 

infobright 是開源的基於mysql 的數據倉庫(data warehouse)
商業版叫IEE(InfoBright Enterprise Edition)
還有個免費的社區版,叫ICE(InfoBright Community Edition)

 

安裝篇:

Infobright目前還不支持windows系列操作系統,不過你可以裝在Linux虛擬機上,或者從官方直接下載做好的VMWARE虛擬機 ,這裏的測試環境是CentOS 5.2 32bit操作系統。Infobright也不支持以插件的形式集成到已有的MySQL系統中去,官方的說法是對MySQL做了很多修改,不支持以插件的 形式使用。

詳細的安裝參照http://www.infobright.org/wiki/Install_Guide/ ,需要注意的是 如果你的系統中已經有MySQL(默認端口3306),你需要重新設定一下安裝參數,比如像我的:

./install-infobright.sh –datadir=/data/infobright/data –cachedir=/data/infobright/cache –port=9527 –config=/etc/my-ib.cnf –socket=/tmp/mysql-ib.sock –user=mysql –group=mysql

配置文件包括MySQL配置文件(/etc/my-ib.cnf)和Infobright配置文件(在安裝時候指定的數據目錄內,比如/data /infobright/data/brighthouse.ini),如果需要支持MySQL原生的SQL查詢,需要修改 brighthouse.ini設定

AllowMySQLQueryPath = 1

這樣不至於有些SQL語句不能執行,安裝完成,啓動服務:

/etc/init.d/mysqld-ib start

通過命令行:mysql-ib -uroot直接連接,默認密碼爲空,修改密碼:

/usr/local/infobright/bin/mysqladmin  -u root -p password NEWPASSWORD

測試篇:

測試數據是一個1.5GB大的文本數據,數據格式類似:

用戶ID  內容ID  用戶打分



765331  3868    5



716091  3868    3



1663216 3868    3



51971   3868    5

在測試數據庫中新建兩張表,一個爲Infobright支持的brighthouse存儲引擎,一個爲MySQL原生的MyISAM存儲引擎,其他 內容一致:

CREATE TABLE `t_ib` (
`uid` mediumint(9) NOT NULL,
`cid` smallint(6) NOT NULL,
`rating` tinyint(4) NOT NULL
) ENGINE=BRIGHTHOUSE;

CREATE TABLE `t_mis` (
`uid` mediumint(9) NOT NULL,
`cid` smallint(6) NOT NULL,
`rating` tinyint(4) NOT NULL
) ENGINE=MyISAM

將數據load進表:

load data infile ‘path/to/data.txt’ into table table_name;

我們比較一下文件大小:

數據類型      數據大小



data.txt 1.5GB



data.tar.gz 429MB



MyISAM表 671MB



Infobight表 280MB

超過5:1的壓縮比,雖然沒有傳說中10:1,但數據的大小比tar.gz過還要小近一半,壓縮能力可見一斑。

準備進行SQL的測試,不能在BRIGHTHOUSE存儲引擎上建索引,因爲根本就不需要建,我們在MyISAM引擎表上建立如下索引:

create index id on t_mis(cid);

執行下列SQL語句,查詢內容ID大於9527的條目數(爲了節省篇幅,略去結果集,只返回執行時間):

mysql> select count(*) from t_mis where cid > 9527;



1 row in set (41.81 sec)







mysql> select count(*) from t_ib where cid > 9527;



1 row in set (13.66 sec)

Infobright花費的時間只有MyISAM的1/4左右,再測試一下找出被用戶打分最多的10條內容:

mysql> select cid from t_mis group by cid order by count(*) desc limit 10;



10 rows in set (1 min 21.30 sec)







mysql> select cid from t_ib group by cid order by count(*) desc limit 10;



10 rows in set (39.02 sec)

Infobright大概只花費了MyISAM 1/3多一點的時間。再查詢一下評價最好的10條內容:

mysql> select cid from t_mis group by cid order by avg(rating) desc limit 10;



10 rows in set (6 min 16.15 sec)







mysql> select cid from t_ib group by cid order by avg(rating) desc limit 10;



10 rows in set (1 min 1.25 sec)

不到1/6時間。

後記:

強悍的壓縮比率,高效的SQL統計性能,Infobright的表現很是不錯。對於網站開發者來說,建立一個Infobright數據倉庫系統用來 保存網站的歷史訪問元數據應該是一個不錯的選擇,尤其是需要OLAP 或者更爲靈活的統計功能的時候。

 

這裏有幾個有用的網址:

介紹:http://www.wentrue.net/blog/?p=283

系統結構:http://www.wentrue.net/blog/?p=291

實戰:http://www.wentrue.net/blog/?p=289

下載:http://www.infobright.org/Download/ICE/

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