Mysql应用开源MySQL高效数据仓库解决方案:Infobright详细介绍
《Mysql应用开源MySQL高效数据仓库解决方案:Infobright详细介绍》要点: MYSQL应用Infobright是一款基于独特的专利知识网格技术的列式数据库.Infobright是开源的MySQL数据仓库办理方案,引入了列存储方案,高强度的数据压缩,优化的统计计算(类似sum/avg/group by之类),infobright 是基于mysql的,但不装mysql亦可,因为它本身就自带了一个.mysql可以粗分为逻辑层和物理存储引擎,infobright主要实现的就是一个存储引擎,但因为它自身存储逻辑跟关系型数据库根本不同,所以,它不能像InnoDB那样直接作为插件挂接到mysql,它的逻辑层是mysql的逻辑层加上它自身的优化器. MYSQL利用Infobright特征 MYSQL应用长处:
MYSQL应用Infobright的价值
MYSQL应用Infobright的适用场景
MYSQL应用限制:
MYSQL应用与MySQL对比
MYSQL应用infobright有两个发布版:开源的ICE及闭源商用的IEE.ICE提供了足够用的功能,但不能 INSERT,DELETE,UPDATE,只能LOAD DATA INFILE.IEE除提供更充分的功能外,据说查询速度也要更快. MYSQL应用社区ICE版,国内各年夜企业均有测试,投入生成系统的较少,主要有以下原因:
MYSQL应用ICE与IEE版本区别 MYSQL应用IEE包括针对大多数企业工作需求的附加特性,如:更好的查询性能、DML语句支持、分布式导入等.另外,IEE版本还包括了一定级别的Infobright原厂或代理商的支持救援服务、产品培训等.
MYSQL应用架构 MYSQL应用基于MySQL的内部架构 C Infobright采取与MySQL类似的内部架构,下面是Infobright的架构图: MYSQL利用 MYSQL应用灰色部门是mysql原有的模块,白色与蓝色部门则是 infobright自身的. MYSQL应用Infobright跟mysql一样的两层布局:
MYSQL应用Infobright的模块
MYSQL应用Data Pack(数据块)压缩层 MYSQL应用存储引擎最底层是一个个的Data Pack(数据块).每一个Pack装着某一列的64K个元素,所有数据依照这样的形式打包存储,每一个数据块进行类型相关的压缩(即根据不同数据类型采用不同的压缩算法),压缩比很高.它上层的压缩器与解压缩器就做了这个事情. MYSQL应用Infobright号称数据压缩比率是10:1到40:1.前面我们已经说过了Infobright的压缩是根据DP里面的数据类型,系统自动选择压缩算法,而且自适应地调节算法的参数以达到最优的压缩比.先看看在实验环境下的压缩比率,如下图所示: MYSQL利用 MYSQL应用整体的压缩比率是20.302.但是这里有一个误区,这里的压缩比率指的是数据库中的原始数据大小/压缩后的数据大小,而不是文本文件的物理数据大小/压缩后的数据大小.很明显前者会比后者大出不少.在我的实验环境下,后者是7:1左右.一般来说文本数据存入数据库之后大小会比原来的文本大不少,因为有些字段被设置了固定长度,占用了比实际更多的空间.还有就是数据库里面会有很多的统计信息数据,其中就包含索引,这些统计信息数据占据的空间绝对不小.Infobright虽然没有索引,但是它有KN数据,通常情况下KN数据大小占数据总大小的1%左右. MYSQL应用既然Infobright会根据具体的数据类型进行压缩,那我们就看看分歧的数据类型具有什么样的压缩比率.如下表所示: MYSQL利用 MYSQL应用首先看看Int类型的压缩比率,结果是压缩比率上Int<mediumint<smallint.细心地读者会很容易发现tinyint的压缩比率怎么会比int还小.数据压缩比率除了和数据类型有关之外,还和数据的差异性有特别大关系,这是显而易见.posFlag只有0,1,-1三种可能,这种数据显然弗成能取得很好的压缩比率. MYSQL应用再看看act字段,act字段使用了comment lookup,比简单的char类型具有更佳的压缩比率和查询性能.comment lookup的原理其实比拟像位图索引.对于comment lookup的使用下一章节将细细讲述.在所有的字段当中date字段的压缩比率是最高的,最后数据的大小只有0.1M.varchar的压缩比率就比拟差了,所以除非必要,不然不建议使用varchar. MYSQL应用上面的数据很清楚地展示了Infobright强大的压缩性能.在此再次强调,数据的压缩不只是和数据类型有关,数据的差异程度起了特别大的作用.在选择字段数据类型的时候,个人觉得性能方面的考虑应该摆在第一位.好比上面表中一些字段的选择就可以优化,ip可以改为bigint类型,date甚至可以根据需要拆分成year/month/day三列. MYSQL利用Knowledge Grid(知识网格) MYSQL应用压缩层再向上就是infobright最重要的概念:Knowledge Grid(知识网格)这也是infobright放弃索引却能应用于大量数据查询的基础.Knowledge Grid构架是Infobright高性能的重要原因.它包括两类结点:
MYSQL应用 MYSQL应用Knowledge Grid可分为四部门,DPN、Histogram、CMAP、P-2-P. MYSQL利用DPN如上所述. MYSQL应用Histogram用来提高数字类型(好比date,time,decimal)的查询的性能.Histogram是装载数据的时候就产生的.DPN中有mix、max,Histogram中把Min-Max分成1024段,如果Mix_Max范围小于1024的话,每一段就是就是一个单独的值.这个时候KN就是一个数值是否在当前段的二进制表示. MYSQL利用 MYSQL应用Histogram的作用就是快速判断当前DP是否满足查询条件.如上图所示,好比select id from customerInfo where id>50 and id<70.那么很容易就可以得到当前DP不满足条件.所以Histogram对于那种数字限定的查询能够很有效地减少查询DP的数量. MYSQL应用CMAP是针对于文本类型的查询,也是装载数据的时候就发生的.CMAP是统计当前DP内,ASCII在1-64位置出现的情况.如下图所示 MYSQL利用 MYSQL应用比如上面的图说明了A在文本的第二个、第三个、第四个位置从来没有出现过.0表示没有出现,1表示出现过.查询中文本的比较归根究底还是依照字节进行比较,所以根据CMAP能够很好地提高文本查询的性能. MYSQL应用Pack-To-Pack是Join操作的时候产生的,它是表示join的两个DP中操作的两个列之间关系的位图,也便是二进制表示的矩阵. MYSQL利用
MYSQL应用粗拙集(Rough Sets)是Infobright的核心技术之一.Infobright在执行查询的时候会根据知识网络(Knowledge Grid)把DP分成三类:
MYSQL应用案例: 代码如下:SELECT COUNT(*) FROM employees WHERE salary > 100000 AND age < 35 AND job = ‘IT' AND city = ‘San Mateo'; MYSQL利用
MYSQL应用从上面的分析可以知道,Infobright能够很高效地执行一些查询,而且执行的时候where语句的区分度越高越好.where区分度高可以更精确地确认是否是相关DP或者是不相关DP亦或是可以DP,尽可能减少DP的数量、减少解压缩带来的性能损耗.在做条件判断的使用,一般会用到上一章所讲到的Histogram和CMAP,它们能够有效地提高查询性能.多表连接的时候原理也是相似的.先是利用Pack-To-Pack产生join的那两列的DP之间的关系.比如:SELECT MAX(X.D) FROM T JOIN X ON T.B = X.C WHERE T.A > 6.Pack-To-Pack产生T.B和X.C的DP之间的关系矩阵M.假设T.B的第一个DP和X.C的第一个DP之间有元素交叉,那么M[1,1]=1,否则M[1,1]=0.这样就有效地减少了join操作时DP的数量.前面降到了解压缩,顺便提一提DP的压缩.每个DP中的64K个元素被当成是一个序列,其中所有的null的位置都会被单独存储,然后其余的non-null的数据会被压缩.数据的压缩跟数据的类型有关,infobright会根据数据的类型选择压缩算法.infobright会自适应地调节算法的参数以达到最优的压缩比. MYSQL应用Knowledge Grid还是比拟复杂的,里面还有很多细节的东西,可以参考官方的白皮书和Brighthouse: an analytic data warehouse for ad-hoc queries这篇论文. MYSQL利用comment lookup的使用 MYSQL应用前面已经阐发了Infobright的构架,简要介绍了Infobright的压缩过程和工作原理.现在来讨论查询优化的问题. MYSQL利用 MYSQL应用1)配置环境:在Linux下面,Infobright环境的配置可以依据README里的要求,配置brighthouse.ini文件. MYSQL利用2)选取高效的数据类型 MYSQL应用Infobright里面支持所有的MySQL原有的数据类型.此中Integer类型比其他数据类型更加高效.尽可能使用以下的数据类型:
MYSQL应用效率比较低的、不保举使用的数据类型有:
MYSQL利用Infobright数据类型使用的一些经验和注意点:
MYSQL应用3)使用comment lookup MYSQL应用comment lookup只能显式地使用在char或者varchar上面.Comment Lookup可以减少存储空间,提高压缩率,对char和varchar字段采用comment lookup可以提高查询效率.Comment Lookup实现机制很像位图索引,实现上利用简短的数值类型替代char字段已取得更好的查询性能和压缩比率.Comment Lookup的使用除了对数据类型有要求,对数据也有一定的要求.一般要求数据类别的总数小于10000并且当前列的单元数量/类别数量大于10.Comment Lookup比拟适合年龄,性别,省份这一类型的字段. MYSQL应用comment lookup使用很简单,在创立数据库表的时候如下定义即可: 代码如下:act ? char(15) ? comment 'lookup', part ?char(4) comment 'lookup', MYSQL利用? MYSQL利用4)尽量有序地导入数据 MYSQL应用前面分析过Infobright的构架,每一列分成n个DP,每个DPN列面存储着DP的一些统计信息.有序地导入数据能够使不同的DP的DPN内的数据差异化更明显.好比按时间date顺序导入数据,那么前一个DP的max(date)<=下一个DP的min(date),查询的时候就能够减少可疑DP,提高查询性能.换句话说,有序地导入数据就是使DP内部数据更加集中,而不再那么分散. MYSQL利用5)使用高效的查询语句. MYSQL应用这里涉及的内容比拟多了,总结如下:
MYSQL应用Infobright执行查询语句的时候,大部分的时间都是花在优化阶段.Infobright优化器虽然已经很强大,但是编写查询语句的时候很多的细节问题还是需要程序员注意. MYSQL应用Infobright导入对象
MYSQL应用参考链接:
欢迎参与《Mysql应用开源MySQL高效数据仓库解决方案:Infobright详细介绍》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |