Crazy knowledge base

mysql infinidb引擎试用总结

infinidb是列式存储数据库引擎,同类引擎还有infobright,infobright除压缩性能遥遥领先之外,其它功能似乎都逊于infinidb,本文只研究infinidb。

本测试使用vmware环境:

CentOS 5 64位
i5 3.10GHz 4核
4G内存
80G硬盘

1、安装infinidb

http://infinidb.org/
去官方网站注册一下个人信息,就可以下载安装包,偷懒哥们直接下载以下地址:
InfiniDB Community – 64 Bit RPMs
InfiniDB Test Scripts
tar -zxf calpont-infinidb-2.2.11-1.x86_64.rpm.tar.gz
rpm -ivh *.rpm

默认安装目录是/usr/local/Calpont/,如本机已经有mysql启动,建议infinidb改为3307端口。
配置文件 /usr/local/Calpont/mysql/my.cnf

2、启动关闭infinidb

/etc/init.d/infinidb start
/etc/init.d/infinidb stop

详见:http://infinidb.org/resources/getting-started

这一步可能出现一个小问题,在执行/usr/local/Calpont/bin/calpontAlias之后执行idbmysql别名无法识别,至少本人是碰到了这问题
cat
/usr/local/Calpont/bin/calpontAlias
复制出来直接在命令行下执行
alias idbmysql=’/usr/local/Calpont/mysql/bin/mysql –defaults-file=/usr/local/Calpont/mysql/my.cnf -u root’
然后再idbmysql就可以进infinidb数据库了

3、使用infinidb小示例

示例一看就懂,不多描述了,需注意的是第二个示例操作tpch2数据库时,先不急着做,下面会详细描述怎么通过tpch来生成数据做数据库压力测试。

详见:http://infinidb.org/categoryblog/98-can-you-give-me-an-example-of-using-the-bulk-load-utility

4、TPC-H生成测试数据,对infinidb做压力测试

首先要搞清楚TPC-H究竟是何方神圣,http://www.tpc.org/tpch/

TPC即美国交易处理效能委员会(Transaction Processing Performance Council),是一家非盈利机构,负责定义事务处理与数据库性能基准测试,并依据这些基准测试项目发布客观性能数据。TPC基准测试有极为严格的运行要求,并且在独立审计机构监督下进行。

TPC-H(商业智能计算测试)是TPC的重要测试标准之一,主要用来模拟真实商业的应用环境。与科学计算测试不同,商业智能计算测试是对现实中商用计算需求的全面模拟。它包括模拟真实商业交易数据库的动态查询,以及作为决策支持与数据库应用系统的参考。

其实通俗的理解就是通过程序生成随机数据,这个数据可以小到1G,大到几百G,只要你的硬盘允许可以无限大,然后通过数据库的导入功能,将数据导入数据库,对数据库进行复杂的查询,插入,更新操作测试。

首先下载tpch的源码包
http://www.tpc.org/tpch/spec/tpch_2_15.0.zip
解压之后可以进入tpch_2_15.0可以看到dbgen  ref_data两个目录,进入dbgen目录。
在dbgen目录可以看到一堆.c,.h文件,下面我们要对dbgen进行编译。
cp makefile.suite makefile
vi makefile
定义变量
cc = gcc
DATABASE = MYSQL
MACHINE = LINUX
WORKLOAD = TPCH

由于dbgen默认没有加入mysql的宏定义,我们需要手工修改tpcd.h文件
vi tpch.h
找到#ifdef DB2
在其上插入mysql的宏定义

#ifdef MYSQL
#define GEN_QUERY_PLAN “”
#define START_TRAN “START TRANSACTION”
#define END_TRAN “COMMIT”
#define SET_OUTPUT “”
#define SET_ROWCOUNT “limit %d;\n”
#define SET_DBASE “use %s;\n”
#endif

之后make编译dbgen,编译通过之后在当前目录可以看到dbgen,qgen二个可执行文件。

dbgen生成测试数据
qgen生成测试SQL查询语句

我们先来生成1G数据看看
./dbgen -f -s 1
-f 强行覆盖
-s 数据容量,1就是1G
命令执行完之后当前目录下我们可以看到多了几个.tbl文件,现在回到前面infinidb小示例中tpch2的例子,这些生成的tbl文件,就是tpch2示例中对应的表。

接下来我们解压infinidb_test_scripts_2211.tar.gz包,解压之后看到tests目录,进入tests目录可以看到好到create_tpch_schema.sql脚本。
进入数据库
idbmysql
创建tpch数据库
create database tpch;
退出数据库,导入create_tpch_schema.sql脚本
/usr/local/Calpont/mysql/bin/mysql –defaults-file=/usr/local/Calpont/mysql/my.cnf -uroot –database=tpch < /yourpath/create_tpch_schema.sql
然后我们再来跟着tpch2的例子继续
把dbgen生成的tbl文件至Calpont的import目录
mv *.tbl
/usr/local/Calpont/data/bulk/data/import
用infinidb的colxml命令给tpch数据库生成一个目录
/usr/local/Calpont/bin/colxml tpch -j 110
-j 就是JOB的意思,后面的ID随意指定
再用cpimport命令导数据
/usr/local/Calpont/bin/cpimport -j 110

至此导入数据完成,开始测试查询操作,可以使用dbgen下的qgen生成查询脚本。
cd /dbgen目录
利用queries下的1.sql模板文件生成SQL,生成的SQL可能有错,需要自己手工修改,其实在infinidb测试脚本tests目录下也有很多测试脚本,有兴趣可以去研究一下。
./qgen queries/1

导入传统mysql引擎的脚本
load data local infile ‘/root/tbldata/customer.tbl’ into table customer fields terminated by ‘|’;
load data local infile ‘/root/tbldata/lineitem.tbl’ into table lineitem fields terminated by ‘|’;
load data local infile ‘/root/tbldata/nation.tbl’ into table nation fields terminated by ‘|’;
load data local infile ‘/root/tbldata/orders.tbl’ into table orders fields terminated by ‘|’;
load data local infile ‘/root/tbldata/partsupp.tbl’ into table partsupp fields terminated by ‘|’;
load data local infile ‘/root/tbldata/part.tbl’ into table part fields terminated by ‘|’;
load data local infile ‘/root/tbldata/region.tbl’ into table region fields terminated by ‘|’;
load data local infile ‘/root/tbldata/supplier.tbl’ into table supplier fields terminated by ‘|’;
load data local infile ‘/root/tbldata/supplier.tbl’ into table supplier fields terminated by ‘|’;

1G容量lineitem表差不多能插入600万条数据,我们可以对比一下在600万条数据下,mysql传统引擎与infinidb的对比,结果必然大吃一惊。列式存储对于大数据量的查询果真厉害。不过insert操作infinidb就比较慢,所以要完全替代mysql想必还是有不小的问题,建议两者合用,对于实效性不高大数据量表可以查询infinidb数据库。

mysql infinidb引擎试用总结
滚动到顶部