基于Infobright的MySQL数据仓库方案测试

February 10th, 2009 | by 超群.com | 知识共享署名-非商业性使用-相同方式共享,转载请保留链接。

数据仓库之父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目前还不支持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 fields terminated by “\t”;

我们比较一下文件大小:

数据类型      数据大小
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或者更为灵活的统计功能的时候。

Tags: , , ,

  1. 7 Responses to “基于Infobright的MySQL数据仓库方案测试”

  2. By bihuman on Feb 10, 2009 | Reply

    加入我们网站,谢谢

  3. By Anonymous on Mar 4, 2009 | Reply

    ice的版本官方的说法是不能进行DML操作的吗?请问楼主是如何insert的?谢谢,好像只有iee版本是可以dml操作的,不知道iee版本哪能得到

  4. By 超群.com on Mar 4, 2009 | Reply

    @楼上

    我没有作insert操作,我用的是load data infile “/path/to/file” into table tbl_name fields terminated by “\t”,记得加上fields terminated by “\t”,貌似infobright社区版有这个bug,不指定导入不进去。

    因为没有用到insert,我还没注意infobright社区版不支持insert update delete等DML,不过我们一般用它来处理大量数据,insert意义不太大,不过不支持,让人觉得挺不爽的,尤其是商业版本支持,开源还是不太彻底,估计以后会慢慢加入进去吧。

  5. By reasonpun on Jul 26, 2009 | Reply

    需要导入仓库的数据好像不能放在类似/home或者/root目录下,不知道什么原因

  6. By aosoo on Jul 20, 2010 | Reply

    infobright 的压缩比差不多是18:1,其实现在我最关心的是能否应用到生产环境中,是不是稳定的。
    比如我的www.aosoo.com 这是个站长工具网站,我们可能会手机很多用户的信息,目前的话是直接用mysql存一些数据的,但是发现有些查询很慢,因此关注infobright。

  7. By 超群.com on Jul 22, 2010 | Reply

    @aosoo

    Infobright不适合线上的应用,支持的并发很少,只适合后台统计分析之类的应用。

  1. 1 Trackback(s)

  2. Sep 2, 2009: Twitter Trackbacks for 基于Infobright的MySQL数据仓库方案测试 » 超群.com的博客 [fuchaoqun.com] on Topsy.com

Post a Comment