试用mysql的infobright引擎
换了新的单位我现在也从oracle从业者变成了mysql从业者,当然放弃oracle的原因主要是因为在新单位可以尽量少的写代码了。
现在我面对的是一个数据仓库,和上一家公司一样,数据仓库最让我们技术人员受不鸟的是数据量太大,存储,I/O,效率都让人想死,每次有些统计分析要求,在清单表里查询简直是让我等到花儿都谢了。那么会有什么好的办法呢?我想这个问题提出来会有很多人告诉我用hadoop。是的,hadoop是现在最流行的大数据解决方案,但是hadoop有一个问题,就是我们小组现在没有人会,还需要很长的时间去学习,去搭建,而且我也不愿意轻易放弃传统的关系型数据库,说真的我连Mango都很抵制。
我想起来以前在单位的时候有人推荐给我们用Greenplum,据我搜索到的资料显示,Greenplum速度很快,而且是基于PostgreSQL的,本来就是关系型数据库,学习起来没有什么压力,但是商业授权是要钱的,我们现在可没办法申请经费,于是作罢。
我自然而然的就想到了列式数据库SybaseIQ,当然也是要钱的,不过mySQL的Infobright引擎不要钱,起码社区版本不要钱。这就是插件式数据库的好处,总有一款引擎适合你。社区版的Infobright不支持DML,但是对于我测试来说没什么,以后上生产了也没什么,因为每天才导一次数据,loaddata完全能hold住。
下载地址在这里http://www.infobright.org/,看到org我就舒服,肯定不要钱。关于安装,这个东西下载好以后直接安装,不需要安装mySQL,因为它自带了一个。貌似自带的这个除了infobright之外只支持MyISAM和Memory引擎,但是这都不是问题,需要InnoDB可以另外下载一个mySQL用。linux版本的安装可能稍微复杂点,网上能搜索到的都是基于一个叫张宴的人写的复制的,我没测试也就没有发言权。我用的是windows版本的,一路下一步就可以了,安装好之后只需要改动它的配置文件my-ib.ini就可以了,里面写的很明白。
下面说说测试结果,我是在单位机器上测试的,根据单位的保密原则,我没办法把截图带回来。但是通过我三天的简单测试,在我的PC上(i5处理器,2G内存,WindowsXP SP2, 500G硬盘(7200rpm))。用loaddata导入2G的数据大概需要2分钟;一个1亿条数据的表,自己关联自己查询count(*),也不过就是2分钟。性能相当彪悍。如果把这个数据库测试拿到Pc服务器上去做,估计效果会让人眼前一亮。
如果需要看比较科学的测试,可以参考这个网站:http://www.actionsky.com/infobright/styles/performance/default.html。这个好像是infobright在国内的代理。
下面说点闲话。在上一家公司的时候,我做的最多的事情就是优化SQL,我之前也在oracle的框架下作了好多事情,但是随着数据量的暴增,就算再怎么优化,IO也是个瓶颈,索引也就没什么用了,我感到了无助。当时我想是不是真的关系型数据库要完蛋了,以后就是mongo这些noSQL的天下了?这几天测试之后我发现noSQL取代关系型数据库还是需要一段时间的。在weibo这种需要实时相应的系统里,可能noSQL会很吃香,但是在数据仓库领域,我想以列式数据库为代表的关系型数据会大放异彩,现在比较主流的大家可以去看看:SybaseIQ,这可能是最早的列式数据库了;南大通用的GBase,国货精品;Infobright,开源的,如果有能力,可以自己改了。顺便提一句,上面说到了Greenplum很快,但是Greenplum是在PostgreSQL之上构建的,pg是开源的,如果公司实力强大,甚至可以做一个不亚于gp性能的数据库,我希望以后能用上国产的。