MySQL Infobright-数据仓库笔记[转]
http://www.fhand.com/blog/archives/tag/brighthouse
由于项目中的登录log一直比较大,目前是每周切分一张表,每次做月季度数据分析的时候就很痛苦,今天特定请教了一下公司DBA的同学,学到了两个解决方法。一个是把每天的登录按照位运算的形式保存,查询的时候使用bit_count(field)来计算,速度会大大提升,这个以后在项目中实践了再来分享;另一个就是使用Infobright引擎,Infobright是一个列存数据仓库软件,可以与MySQL集成,作为MySQL的一个存储引擎来使用。详细的框架结构可以参考官方的白皮书,国内也有介绍的,比如这一篇文章。
Infobright是一个与MySQL集成的开源数据仓库(DataWarehouse)软件,可作为MySQL的一个存储引擎来使用,SELECT查询与普通MySQL无区别。
一、Infobright的基本特征:
优点:
查询性能高:百万、千万、亿级记录数条件下,同等的SELECT查询语句,速度比MyISAM、InnoDB等普通的MySQL存储引擎快5~60倍
存储数据量大:TB级数据大小,几十亿条记录
高压缩比:在我们的项目中为23:1,极大地节省了数据存储空间
基于列存储:无需建索引,无需分区
适合复杂的分析性SQL查询:SUM,COUNT,AVG,GROUPBY
限制:
不支持数据更新:社区版Infobright只能使用“LOADDATAINFILE”的方式导入数据,不支持INSERT、UPDATE、DELETE
不支持高并发:只能支持10多个并发查询。
安装可以参考这篇文章MySQLInfobright数据仓库快速安装笔记[原创]。不过最新版已经没有64位的源码,我们可以直接下载rpm或者deb版本进行安装。
1.Downloadtheinstallpackage(e.g.infobright-3.4-x86_64.rpm)totheserverwhereyouareinstallingInfobright
2.Obtainrootuseraccess
3.ToinstalltheRPMpackage,run:
rpm-ivhinfobright_version_name.rpm[optional:--prefix=path]
ToinstalltheDEBpackage,run:
dpkg-iinfobright_version_name.deb
Note:PleasedonotinstallICEintherootorhomedirectoriesduetopossibleMySQLpermissioncheckingissuesduringinstall,startup,and/orload.[需要注意会有mysql的权限问题,所以安装的目录需要chownmysql:mysql授予访问权限]
4.Tochangethedefaultinstalloptions,afterinstallationrun:
/usr/local/infobright/postconfig.sh
Youcanrunthisscriptatanytimeafterinstallationtochangethedatadir,CacheFolder,socket,andport.ThescriptmustberunasrootandICEmustnotberunning.【需要在infobright停止运行的时候再修改目录相关,该脚本需要在安装目录下运行,所以需要承cd/usr/local/infobright/
】
5.Theinstallationdeterminestheoptimummemorysettingsbasedonthephysicalmemoryofthesystem.Youmaychangethesesettingsbyeditingthefilebrighthouse.iniwithinthedatadirectory.
Important:Thememorysettingsassumethattherearenootherservicesonthemachineconsumingsignificantmemory.Ifthisisnotthecase,pleaselowerthememorysettingsforInfobright.
6.TostartorstopICE,run:
/etc/init.d/mysqld-ibstart
/etc/init.d/mysqld-ibstop
7.ToconnecttoICE,usethescriptmysql-ib:
/usr/bin/mysql-ib[optional:db_name]
8.TouninstallICE,runeither:
rpm-einfobright
dpkg-rinfobright
9.示例:从普通的MySQL数据库(假设MySQL安装路径为/usr/local/webserver/mysql)导出数据到csv文件:
/usr/local/webserver/mysql/bin/mysql-S/tmp/mysql3306.sock-Dtongji_logs-e"select*fromlog_visits_2010_05_10intooutfile'/data0/test.csv'FIELDSTERMINATEDBY','ENCLOSEDBY'"'ESCAPEDBY'\'LINESTERMINATEDBY'n';"
10.示例:普通MySQL和Infobright建表对比
①、普通MySQL的InnoDB存储引擎建表:
CREATETABLEIFNOTEXISTS`log_visits_2010_05_12`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`cate_id`int(11)NOTNULL,
`site_id`int(11)unsignedNOTNULL,
`visitor_localtime`char(8)NOTNULL,
`visitor_idcookie`varchar(255)NOTNULL,
PRIMARYKEY(`id`),
KEY`cate_site_id`(`cate_id`,`site_id`),
KEY`visitor_localtime`(`visitor_localtime`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
②、Infobright的BRIGHTHOUSE存储引擎建表:
CREATETABLEIFNOTEXISTS`log_visits`(
`id`int(11)NOTNULL,
`cate_id`int(11)NOTNULL,
`site_id`int(11)NOTNULL,
`visitor_localtime`char(8)NOTNULL,
`visitor_idcookie`varchar(255)NOTNULL,
)ENGINE=BRIGHTHOUSEDEFAULTCHARSET=utf8;
注:BRIGHTHOUSE存储引擎建表时不能有AUTO_INCREMENT自增、unsigned无符号、unique唯一、主键PRIMARYKEY、索引KEY。
11、示例:从csv文件导入数据到Infobright数据仓库:
/usr/local/infobright/bin/mysql-S/tmp/mysql3307.sock-Ddw--skip-column-names-e"LOADDATAINFILE'/data0/test.csv'INTOTABLElog_visits_2010_04_13FIELDSTERMINATEDBY','ESCAPEDBY'\'LINESTERMINATEDBY'n';"
12、更改目录后不能启动mysqld的种种解答
1.配置文件在/etc/my-ib.cnf;2.启动脚本/etc/init.d/mysqld-ib可以知道配置文件中设置了mysql的sock,必须得让mysql对mysql.sock存放路径有访问权限