背景
论文 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类似元数据层。
架构和模块
架构图:
灰色部分是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设计上的核心。
全文完 :)