INFOBRIGHT介绍
在这里,我将结合我自己的使用以及对开源数据仓库的了解,INFOBRIGHT做下简单的介绍。
INFOBRIGHT产品分为社区版ICE和企业版IEE。相信大家对ICE都有很多的了解。ICE具备了INFOBRIGHT大部分的功能,我列举如下:
1. 超高的压缩比例。 普通10:1, 在极限情况下可以达到40:1 甚至更高。
2. 超强劲的数据导入性能。 ICE 有自己专业的数据导入工具BHLOADER, 不过受到了一些限制,比如不能利用到多核导入。
3. 超强的数据查询能力。 特别适合对于数据统计以及报表生成类得查询。
4. 超大的单表存放规模。 正是因为第一点,超强的压缩比,所以可以存放大量的数据, 节约了磁盘的存储,大大节省了成本。
5. 申请了专利的知识网格体系,这点是其他开源数据仓库哪怕是商业的数据仓库产品所没有的。
6. 与主要的BI分析工具的兼容性。 比如Pentaho等等。
但是除了以上的优点外, ICE 有以下的限制:
1. 不支持数据更新。 这个限制对于我们即要求查询性能外还要对数据库进行写入的需求, 造成了很大的不变。 这个估计是很多人试用后放弃试用ICE的第一个原因。
2. 不支持对多核的使用。 不但不支持查询的多并发,而且连导入导出也没有这样的支持。这个也是放弃ICE的一个原因。 谁也不愿意自己的强劲的硬件只能被用到1%,这样也会被老板给骂死的,他的钱不能白白的被这样折腾。
3. 只能单机使用,不具备任何的复制以及扩展。 这点对于我们现在的大规模海量数据情何以堪那?
所幸的是, INFOBRIGHT提供了商业版本IEE。IEE支持ICE的所有优点,并且弥补了他的不足, 放宽了对他的限制。 特别是早新的版本4.0.x里面提供了一套令人更加兴奋的工具:DLP---分布式数据导入工具。
DLP 优点如下:
1. 减轻了数据库服务器的负载,使它能处理更多的请求。
2. 对应用完全透明, 不用编写额外的代码来处理复杂的导入工作。
3. 数据库的导入时间随着DLP部署的机器的增多二线性减少。当然,这些机器可以是非常廉价的PC服务器,也可以是旧的机器。节省了大量的成本。
4. 减少了对网络带宽的占用。 DLP在导入之前对原始数据已经进行了高效的压缩。
安装
rpm -i infobright-migrator-1.0-x86_64-eval.rpm
rpm -i infobright-4.5.0-4-x86_64-eval.rpm
rpm -i infobright-dlp-1.4-x86_64-iee.rpm
默认参数如下:
Current config file: [/etc/my-ib.cnf] Current brighthouse.ini file: [/usr/local/infobright-4.5.0-x86_64/data/brighthouse.ini] Current datadir: [/usr/local/infobright-4.5.0-x86_64/data] Current CacheFolder in brighthouse.ini file: [/usr/local/infobright-4.5.0-x86_64/cache] Current socket: [/tmp/mysql-ib.sock] Current port: [5029]
可以改变默认参数
/usr/local/infobright/postconfig.sh
它是用来改变安装的datadir,CacheFolder, socket和port的
把认证文件 iblicense-*.lic 放到 /usr/local/infobright/ 目录下
开启或者关闭服务的命令:
/etc/init.d/mysqld-ib start
/etc/init.d/mysqld-ib stop
连接
/usr/bin/mysql-ib
卸载infobright
的命令:
rpm -e infobright
设置root密码
/usr/local/infobright/bin/mysqladmin -u root password 'pass'
允许远程客户端通过root登录infobright
# mysql-ib -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
DLP工具所在目录
/opt/infobright/tools/distributed-load-processor
在插表时遇到
ERROR 1070 (42000): Too many key parts specified; max 0 parts allowed
是因为有索引导致的,去掉索引就可以了,BRIGHTHOUSE存储引擎建表时不能有AUTO_INCREMENT自增、unsigned无符号、unique唯一、主键PRIMARY KEY、索引KEY。
Infobright目录结构:/data/infobright/
解压后,你会发现这不就是一个MySQL吗,infobright-3.3.1是集成于mysql-5.1.40,很自然的就会把infobright理解成MySQL的一个特殊引擎,这又进一步体现出MySQL具有可插拔引擎接口的特点。
cache目录:README里面说是临时文件生成和存放地,但是我一直没有看到里面有文件按出现。
data目录:
bh.err —— 错误日志这个和MySQ记录启动关闭信息以及一些错误和警告提示,但在infobright中它还有一个特殊的任务就是记录执行计划,因为 infobright没有explain/profile这样的工具。
brighthouse.ini —— infobright的配置文件,里面有使用内存大小的分配规则、选择是否开启执行计划记录功能等。
内存占用设置在brighthouse.ini 里
# ServerMainHeapSize - Size of the main memory heap in the server process, in MB ServerMainHeapSize=6000 # LoaderMainHeapSize - Size of the memory heap in the loader process, in MB. LoaderMainHeapSize=800
brighthouse.log —— 这个日志中记录了infobright引擎启动和关闭操作,已经我们在导入数据是遇到的错误。
brighthouse.seq —— 这个文件中记录的数字我也不是很理解;查了下,说是被使用的最大的表的号码。我的那个文件里面是708,在BH_RSI_Repository中,可以找到这样的数字,但是我没有看到708,最大的那个数字就是707。
general_query.log —— 这个和MySQL中的那个什么都能记录下来的日志一样。
slow_query.log —— 慢查询日志,里面有那个用户在什么时间那条语句的执行时间和锁消耗的时间。
BH_RSI_Repository子目录:里面都是rsi文件,似乎和Knowledge Grid相关,一类是HIST开头的,一类是CMAP开头的。
相关数据库子目录:里面分别是对应各个表的frm文件,和bht目录。
/usr/local/infobright/bin/mysqldump 备份脚本
一旦有数据插入就会执行多条类似这样的语句:
/usr/local/infobright-4.5.0-x86_64/bin/bhloader bhload-info-13499-1463118653-17607 /tmp/bhload-info-13499-1463118653-17607
如何调整infobright的存储目录结构
/etc/init.d/mysqld-ib stop
cd /usr/local/infobright
sh postconfig.sh
(1) Move existing data directory to other location,
(2) Move existing cache directory to other location,
(3) Configure server socket,
(4) Configure server port,
(5) Relocate datadir path to an existing data directory.
Datadir Path to the directory where tables will be created and stored. Use a high-performance storage such as a RAID.
Cachedir Path to the directory where temporary files will be created and stored. Should be located on a fast drive, possibly not the same as the data.
Allow at least 100 GB of free space (depending on database size).
Note: The Cachedir option is disabled when the Datadir option is chosen. To change
Cachedir, rerun the postconfig utility and do not choose Datadir.
Port Listening port for the Infobright server instance.
Socket Socket connection point for client connections. (The socket connection point will be created during the Infobright installation.)
/etc/init.d/mysqld-ib start
//emoji符号会导致插入不进去,IB并且不抛出任何错误
老少皆知的方法
1. comment 'lookup':对于选择少于10000的字符串型字段,这是一个非常实用的优化
列式存储,无需创建索引和分区,再也不用关心索引失效了!
那么,货币流表分表是不是对IB的误用?