背景

论文 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设计上的核心。

掌声 :)

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

本文摘录 - Infobright的更多相关文章

  1. 本文摘录 - FlumeJava

    本文节选不保证论文的完整性和理解的准确性  原始的MapReduce.分Map,Shuffle,Reduce. Map里包含shards. Shuffle理解为groupByKey的事情.Reduce ...

  2. effective C++学习三(仅供个人学习记录,本文摘录effective C++)

    条款 3:尽量用 new 和 delete 而不用 malloc 和 free  把 new和 delete 与malloc 和 free 混在一起用也是个坏想法.对一个用 new 获取来的指针调用 ...

  3. effective C++学习二(仅供个人学习记录,本文摘录effective C++)

    条款 2:尽量用<iostream>而不用<stdio.h> scanf 和 printf 很轻巧,很高效,你也早就知道怎么用它们,这我承 认.但尽管他们很有用,事实上 sca ...

  4. effective C++学习一(仅供个人学习记录,本文摘录effective C++)

    条款 1:尽量用 const 和 inline 而不用#define   #define ASPECT_RATIO 1.653 编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进 ...

  5. 高效CSS开发核心要点摘录

    做网站的,我们都知道尽量减少请求数,压缩CSS代码量,使用高效CSS选择符等方式可以来提高网站的载入速度和访问速度,也就是优化网站的性能. 下面分析了一些CSS的书写方式,很多都是我们知道并且正在使用 ...

  6. What's new in Windows 10 Enterprise with Microsoft Edge.(Windows 10 新功能)

    What's new in Windows 10 Enterprise with Microsoft Edge --带有Edge浏览器的Windows 10 企业版的新功能 本文摘录自公司群发邮件, ...

  7. UART to Serial Terminal(转载)

    前一篇<UART Explained>介绍了UART的基本信息,重点分析了UART的信号.本文摘录的文章则重点介绍了波特率(Baud Rate)相关的内容,波特率越高,传输速度越快,但实际 ...

  8. Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...

  9. Nodejs进阶:如何玩转子进程(child_process)

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 在node中,child_process这个模 ...

随机推荐

  1. 在android创建bitmap避免低记忆法

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...

  2. Asp.Net2.0下C#环境 Login控件实现用户登录

    原文:Asp.Net2.0下C#环境 Login控件实现用户登录 一.前台显示效果 二.前台代码             <asp:Login ID="Login1" run ...

  3. Java中的反射——(1)什么是反射

    Java程序中的各个Java类属于同一类事物,描写叙述这类事物的Java类名就是Class. public class ReflectTest { public static void main(St ...

  4. python学习笔记之十:文件和素材

    这里将介绍函数和对象--文件和流,让你在程序调用期间存储数据,并且可以处理来自其他程序的数据. 一. 打开文件 1.1 open函数 open函数用来打开文件,语法如下:open(name,[.mod ...

  5. Holding Bin-Laden Captive!(杭电1085)(母函数)

    Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  6. 数学思想方法-分布式计算-linux/unix技术基础(5)

    shell命令行参数 -bash-4.2$ cat test1.sh#!/bin/shecho "$0  "echo "$1  "echo "$2   ...

  7. HDU1163 Eddy&#39;s digital Roots【九剩余定理】

    Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  8. 如何使用ZEROBRANE STUDIO远程调试COCOS2D-X的LUA脚本(转)

    http://www.cocos2d-x.org/docs/manual/framework/native/v2/lua/lua-remote-debug-via-zerobrane/zh ZeroB ...

  9. Google Protocol Buffers和java字符串处理控制

    大多数的操作码被从夜晚复制.懒得敲. 直接在源代码和测试结果如下. serabuffer.proto档.使用下面的命令来生成java代码. protoc -I=./ --java_out=./ ser ...

  10. easyui动力头 &amp;&amp; 动态加入tabs

    今天,在实现了业务时的,我们需要根据后台操作,以产生多个数据tab页,而且每一个tab页表格根据需要动态生成的标题数据. 返回后台数据格例如,下面的公式: 实现方法例如以下: //$("#c ...