本文共 2825 字,大约阅读时间需要 9 分钟。
新的环境,新的机会,喜欢自由的我现在感觉不错,终于可以自在的记录我想记录的东西了,哈哈~关于GoogleApp的企业套件我也给自己弄了一套,感觉挺不错,和Outlook可以直接整合起来,不过只能以POP3的形式,IMAP的还是不行(国内还是不行啊)
最近发现一个不错的东西 [Infobright] ,Mysql的数据仓库解决方案~
首先我们来做一些性能测试:
测试数据是一个1.5GB大的文本数据,数据格式类似:
用户ID 内容ID 用户打分765331 3868 5716091 3868 31663216 3868 351971 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.5GBdata.tar.gz 429MBMyISAM表 671MBInfobight表 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时间。
下面深入介绍其结构及工作原理:
下图是infobright白皮书中展示的系统架构,灰色部分 是mysql原有的模块,白色与蓝色部分则是 infobright自身的。下面说说它的几个主要概念及其相互协作原理。
系统结构分析:
查询原理(为什么infobright能处理大量数据的查询):
转载地址:http://qbbci.baihongyu.com/