Skip to content


infobright: 系统结构

上次初步介绍了基于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

收藏或分享到:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • Twitter

Posted in Database.

Tagged with , , , , .


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. cep says

    版主您好!
    看了你的技术文章,受益匪浅,真是好啊。
    看来你对infobright有很深的研究了,我也是一个infobright的研究者,很多东西还不清楚,很想请教一下版主,不知道可否与您取得联系呢?
    期盼你的回复:
    我的email:birdtwo.good@gmail.com
    QQ:183440851

  2. ziyoujiedao says

    希望能与楼主交流 msn:ziyoujiedao@hotmail.com



Some HTML is OK

or, reply to this post via trackback.