背景

论文 Brighthouse: AnAnalytic Data Warehouse for Ad-hoc Queries。VLDB 2008

brighthouse它是一个面向列的数据仓库。在数据存储和压缩柱而言,压缩比达到10:1。其核心Knowledge Grid(知识网格)层,即一个能自己主动调节、所存出具特别小的元数据层,替代了索引的功能,提供了数据过滤、统计信息表达、实际数据位置信息等内容。让brighthouse能够作为一个分析型的数据仓库。,达到ad-hoc查询的速度。

Knowledge Grid层介入的是query优化和运行阶段。降低数据读入量和解压缩开销。

这篇论文中的brighthouse就是商业数据仓库infobright。

介绍

面向列的架构比較适合分析型数据仓库,面向行的架构比較适合OLTP系统。brighthouse是面向列的。

Knowledge Gird是一个data about data的思路,提供一些相似数据的统计信息。来帮助query优化和运行阶段取得想要的数据,这是brighthouse设计最核心的部分。从层次上说。介于query优化、运行层和数据(压缩)存储层之间。并且Knowledge Grid存储的元数据非常小,全然能够存在内存里。

Knowledge Grid由Knowledge Nodes组成,每一个Node上记录了压缩数据的元数据信息,这些实际数据存储在Data Packs里。数据量比較庞大,是按列存的,不做分区(这部分信息由Knowledge Node维护)。且压缩过。

所以Data Packs相当于代表了brighthouse的数据存储模型,而Knowledge Grid相似元数据层。

架构和模块

架构图:

本文摘录 - Infobright-LMLPHP

灰色部分是mysql原有的模块。白色与蓝色部分则是 infobright自身的。

跟mysql一样的两层结构。上面的逻辑层处理查询逻辑。以下的是存储引擎。

通过这张图主要说明几个部分,数据导入导出、DataPack、Knowledge Grid、优化和运行。

逻辑层右端的loader与unloader是infobright的数据导入导出模块,是一个独立的服务。

存储层最底层是Data Pack。每一个Pack装着某一列的64K个元素。全部数据依照这种形式打包存储,DataPack依据不同数据类型採用不同的压缩算法,压缩比非常高。

Knowledge Grid里面包括两类结点:

每一个Data Pack Node相应一个Data Pack,存储一些统计信息,如min, max, avg, null的个数。总个数等;

Knowledge Node存储了一些更高级的统计信息,以及与其他表的连接信息。这里面的信息有些是数据加载时已经算好的,有些是随着查询进行而计算的,所以说是带自己主动化的。

Knowledge Grid里面还存了这样几种数据信息。

1.  Histograms(HISTS),为数字型的列创建的柱状图。以二进制的方式存。

2.  Character Maps(CMAPS)。为字母型的列创建的信息,比方String里面各个字母出现的情况。

3.  Pack-to-Packs。这部分是为join型的操作准备的,关联了两张table的某条件下两个column值。

应用方面。

HISTS适合between语句。由于柱状图表达了最大,最小,range内分别的信息。

CMAPS适合LIKE语句。由于是和字母相关的。

Pack-to-Packs适合join操作。为join操作提供适合条件的相应table的Row编号。

以上大致说明了几张数据统计信息表示和适合的场景。

query优化和运行方面,參考了粗糙集的思路来设计,把数据分为相关,不相关,怀疑三种类型,相应正向region,负向region和boundary region。

总结

Infobright作为开源的MySQL数据仓库解决方式,引入了列存储方案。高强度的数据压缩,优化的统计计算等内容,本文是摘抄了infobright论文里最重要的设计点,KnowledgeGird是infobright设计上的核心。

掌声 :)

版权声明:本文博客原创文章。博客,未经同意,不得转载。

05-10 23:01