注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zjcjack的博客

 
 
 

日志

 
 

infobright: 系统结构  

2012-04-04 22:32:37|  分类: infobright |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上次初步介绍了基于mysql的数据仓库实现:infobright,这里深入介绍其结构及工作原理。下图是infobright白皮书中展示的系统架构,灰色部分是mysql原有的模块,白色与蓝色部分则是infobright自身的。下面说说它的几个主要概念及其相互协作原理。

infobright架构图

infobright架构图

系统结构分析:

  1. 跟mysql一样的两层结构,上面的逻辑层处理查询逻辑,下面的是存储引擎。
  2. 逻辑层右端的loader与unloader是infobright的数据导入导出模块,也即处理SQL语句里LOAD DATA INFILE … 与SELECT … INTO FILE任务,由于infobright面向的是海量数据环境,所以这个数据导入导出模块是一个独立的服务,并非直接使用mysql的模块。
  3. 逻辑层的infobright优化器包在mysql查询优化器的外面,如下面将会提到的,因为它的存储层有一些特殊结构,所以查询优化方式也跟mysql有很大差异。
  4. 存储层最底层是一个个的Data Pack(数据块)。每一个Pack装着某一列的64K个元素,所有数据按照这样的形式打包存储,每一个数据块进行类型相关的压缩(即根据不同数据类型采用不同的压缩算法),压缩比很高。它上层的压缩器与解压缩器就做了这个事情。
  5. 压缩层再向上就是infobright最重要的概念:Knowledge Grid(知识网格),这也是infobright放弃索引却能应用于大量数据查询的基础。它包含两类结点:每个Data Pack Node(知识节点)对应于一个Data Pack,存储该Data Pack的一些统计信息,如min, max, avg, null的个数,甚至不同值的量等等;Knowledge Node则存储了一些更高级的统计信息,以及与其它表的连接信息,这里面的信息有些是数据载入时已经算好的,有些是随着查询进行而计算的,所以说是具备一定的“智能”的。

查询原理(为什么infobright能处理大量数据的查询):

  1. 例如一个infobright表T,按列存储了两列A与B。A包含A1,A2,A3,A4;B包含B1,B2,B3,B4几个Data Pack。
  2. 输入一条查询语句:SELECT MAX(B) FROM T WHERE A>3。
  3. 根据查询infobright会先把A的知识网格数据取出来,因为A1-4都有相应的知识节点存储其范围,所以仅根据知识网络就能知道哪些数据块符合A>3这个查询要求。这里假设A1,A2,A3全部符合或半符合(半符合是指根据知识网格无法准确判断)要求。
  4. 然后取出B1,B2,B3的知识网格,仅凭知识网格中的max信息即可判断哪个数据块是全部符合或半符合要求的,这里假设是B2。
  5. 把B2取出来,解压缩,获取B2中的最大值。
  6. 返回结果。

下次再介绍一下这些天我使用infobright的一些实践经验。

转载请保留本文原始链接:http://www.wentrue.net/blog/?p=291

  评论这张
 
阅读(291)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017