Infobright是开源的MySQL数据仓库解决方案,引入了列存储方案,高强度的数据压缩优化的统计计算(类似sum/avg/group by之类),列式存储 对单列处理效率非常高 如果涉及到多列相对较慢。
Infobright的默认存储引擎是brighthouse,但是Infobright还可以支持其他的存储引擎,比如MyISAM,MRG_MyISAM, Memory,CSV
企业版增加了DML支持,同时有一些额外的工具集
社区版不支持DML,没有在线热备工具
Infobright优点
-
高压缩比率,平均压缩比可达10:1,甚至可以达到40:1。
-
列存储,及时数据量十分巨大,查询速度也很快。用于数据仓库,处理海量数据没一套可不行。
-
不需要建索引,就避免了维护索引及索引随着数据膨胀的问题。把每列数据分块压缩存放,每块有知识网格节点记录块内的统计信息,代替索引,加速搜索。
-
单一台服务器可以高效的读写30T数据。具有可扩展性,这里是指对于同样的查询,当数据量是10T时,它耗费的时间不应该比1T数据时慢太多,基本是一个数量级内。
缺点:
-
不支持DML
-
不支持多核
-
不支持分布式
loader与unloader是infobright的数据导入导出模块,也即处理SQL语句里LOAD DATA INFILE ··· 与 SELECT “` INTO FILE任务,由于infobright面向的是海量数据环境
所以这个数据导入导出模块是一个独立的服务,并非直接使用muysql的模块
逻辑层的infobright优化器包再mysql查询优化器的外面,因为它的存储层有一些特殊结构,所以查询优化方式也跟mysql有很大差异
存储层最底层是一个个的Data Pack(数据块)。每一个pack装着某一列的64K个元素,所有数据按照这样的形式打包存储,每一个数据块进行类型相关的压缩(即根据不同类型采用不同的压缩算法),压缩比很高。它上层的压缩器与解压缩器就做了这个事情。
Knowledge Grid(知识网格)中包含两类节点:
-
每个Data Pack Node(数据包节点)对应一个Data Pack,存储改Data Pack的一些统计信息,如min,max,avg,null个数,单元总数count,sum总数等,甚至不同值的量等等;
-
KN(Knowledge Node,知识节点)则存储了一些更高级的统计信息以及与其他表的连接信息,这里面的信息有些事是数据载入时已经算好的,有些事随着查询进行而计算的,所以说是具备一定的“智能”的
KN里面存储着指向DP之间或者列之间关系的一些元数据集合,比如值发生的范围(Min_Max),列数据之间的关联。大部分的KN数据是装载数据的时候产生的,另外一些是查询的时候产生。
Histogram用来提高数字类型(比如data,time,decimal)的查询性能。Histogram是装载数据的时候就产生的。
DPN中有mix,max,Histogram中把Min-Max分成1024段,如果Min_Max范围小于1024的话,每一段就是一个单独的值。
这个时候KN就是一个数值是否在当前段的二进制表示。
CMAP是针对于文本类型的查询,也是装载数据的时候就产生的。CMAP是统计当前DP内,ASCII在1-64位置出现的情况。如下图所示
比如说上面的图说明了A再文本的第二个,第三个,第四个位置从来没有出现过。0表示没有出现,1表示出现过。
查询中文本的比较归根究底还是按照字节进行比较,所以根据CMAP能狗很好的提高文本查询的性能。
Pack-To-Pack(P-2-P)是join操作的时候产生的,它是表示join的两个DP中操作的两个列之间关系的位图,也就是二进制表示的矩阵。
这个sql在innodb里跑了2.96秒
infobright vs innodb
0.29s vs 2.96s