如上图所示,Infobright采用了和MySQL一致的构架,分为两层。
上层是服务及应用管理,下层是存储引擎。
Infobright的默认存储引擎是brighthouse,但是Infobright还可以支持其他的存储引擎,比如MyISAM、MRG_MyISAM、Memory、CSV。
infobright ice版本中不允许对brighthouse引擎进行写入,对于其他引擎没有限制。
这意味着我们可以灵活运用ice版本,一般数据级别的表、需要频繁进行写操作的表使用myisam引擎存储,特别巨大的数据表、以读为主数据表使用brighthouse引擎存储。
mysql> insert into a values ('1');
ERROR 1031 (HY000): Table storage engine for 'a' doesn't have this option
mysql> insert into c values ('1');
Query OK, 1 row affected (0.08 sec)
表a是brighthouse引擎,表c是myisam引擎。
infobright的导入
ice版brighthouse引擎的写入方式只能是load data
infobright ice使用手册的第36页列举了一些import时可能遇到的报错和处理方法,但是比较笼统。
结合个人在实验中遇到的一些问题,简单说明一下:
一、load data时一定要指定分隔符,这与myisam、innodb load data infile 时默认字段(列)分隔符是 \t不同
如果不指定分隔符会抛出以下错误:
mysql> load data local infile '/data/111.txt' into table a;
ERROR 5 (HY000): Unable to detect the line terminating sequence, please specify it explicitly.
mysql> load data local infile '/data/111.txt' into table a fields terminated by '\t';
Query OK, 9 rows affected (0.12 sec)
Records: 9 Deleted: 0 Skipped: 0 Warnings: 0
二、字段中的特殊字符和字符集
1、如果数据库与表的字符集不统一,导入数据时会抛出
infobright :ERROR 2 (HY000) at line 1: Wrong data or column definition. Row: 39075, field: 2
关于mysql字符集和校对规则这里不多赘述,目前我们常用的字符集utf8在infobright中被全面支持,详见infobright ice使用手册的第30页
所以字符集一定统一使用utf8
2、某些特殊fields不会转义,即使你escaped by '\\'
这个问题同样会抛出infobright :ERROR 2 (HY000) at line 1: Wrong data or column definition. Row: 39075, field: 2
我在实际操作中发现 大于小于号正反斜杠 > < \ / 等等都会报错,没有更好的解决方法,只能与研发共同制定规则在使用brighthouse引擎的表中尽量不使用特殊字符
infobright的导出
导出有两种方法:select into和mysqldump,这基本与mysql的使用一致
但是使用mysqldump时需要注意 要加上single-transaction选项,否则会抛出:
mysqldump: Got error: 1031: Table storage engine for 'BRIGHTHOUSE' doesn't have this option when using LOCK TABLES
因为brighthouse引擎使用列存储方式,不支持锁定。
brighthouse的文件系统和压缩方式
以同样一张300多万的表做实验,关于brighthouse引擎的压缩介绍在手册的第26~28页
myisam:
-rw-rw---- 1 mysql mysql 180M Feb 27 13:41 loginlog_201203.MYD
-rw-rw---- 1 mysql mysql 123M Feb 28 03:00 loginlog_201203.MYI
innodb(row_format=compressed):
-rw-rw---- 1 mysql mysql 8.6K Mar 6 10:32 ddd.frm
-rw-rw---- 1 mysql mysql 332M Mar 6 10:38 ddd.ibd
brighthouse:
21M ./loginlog_201203.bht
myisam数据文件+索引文件为303m
innodb压缩模式下为332m
brighthouse所有文件一共21m
show full columns命令可以看到表每一列的信息,包括大小和压缩比
mysql> show full columns from loginlog_2012031;
也可以在文件系统下查看表的物理文件,可以看到brighthouse引擎以列为单位进行存储:
[root@dev_cvs loginlog_2012031.bht]# ll -h
total 21M
-rw-rw---- 1 mysql mysql 4.4K Feb 27 13:42 TA00000000000001.ctb
-rw-rw---- 1 mysql mysql 117 Feb 27 13:42 TA00000.ctb
-rw-rw---- 1 mysql mysql 1.9K Feb 27 13:42 TA00000DPN.ctb
-rw-rw---- 1 mysql mysql 12M Feb 27 13:42 TA00001000000001.ctb //username列的数据块
-rw-rw---- 1 mysql mysql 107 Feb 27 13:42 TA00001.ctb
-rw-rw---- 1 mysql mysql 1.9K Feb 27 13:42 TA00001DPN.ctb //username列的数据块节点
-rw-rw---- 1 mysql mysql 666K Feb 27 13:42 TA00002000000001.ctb
-rw-rw---- 1 mysql mysql 124 Feb 27 13:42 TA00002.ctb
-rw-rw---- 1 mysql mysql 1.9K Feb 27 13:42 TA00002DPN.ctb
-rw-rw---- 1 mysql mysql 7.6M Feb 27 13:42 TA00003000000001.ctb
-rw-rw---- 1 mysql mysql 106 Feb 27 13:42 TA00003.ctb
-rw-rw---- 1 mysql mysql 1.9K Feb 27 13:42 TA00003DPN.ctb
-rw-rw---- 1 mysql mysql 3.1K Feb 27 13:42 TA00004000000001.ctb
-rw-rw---- 1 mysql mysql 119 Feb 27 13:42 TA00004.ctb
-rw-rw---- 1 mysql mysql 1.9K Feb 27 13:42 TA00004DPN.ctb
-rw-rw---- 1 mysql mysql 66 Feb 27 13:35 Table.ctb
-rw-rw---- 1 mysql mysql 117 Feb 27 13:35 TB00000.ctb
-rw-rw---- 1 mysql mysql 107 Feb 27 13:35 TB00001.ctb
-rw-rw---- 1 mysql mysql 124 Feb 27 13:35 TB00002.ctb
-rw-rw---- 1 mysql mysql 106 Feb 27 13:35 TB00003.ctb
-rw-rw---- 1 mysql mysql 119 Feb 27 13:35 TB00004.ctb