背景

论文 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. 本科非cs菜鸟计算机面试实录

    两年制小硕,本硕期间差不多都打酱油的.本科非cs专业,硕士cs,编程基础一般,专业基础尚可.研究生期间分析分析了pgsql数据库的源码:同时实验室一些杂项目:自己业余为了应试读了些计算机书.自己当时q ...

  2. [Network]Application Layer

    1 Principles of Network Applications 1.1 Application Architectures Client-Server Peer-to-Peer Hybird ...

  3. POJ 1274 The Perfect Stall 水二分匹配

    主题链接:id=1274">点击打开链接 呵呵 #include<cstdio> #include<cstring> #include<cstdlib&g ...

  4. android选择和裁剪图像拍摄的图像

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39994913 近期从曾经的项目中扒下来一个经常使用的模块.在这里有必要记录一下的. ...

  5. java.lang.RuntimeException: Method called after release()

    主要引起是因為在 camera.stopPreview();   camera.release(); 前沒有將setPreviewCallback 設置為null, 解決情況: public void ...

  6. OWIN与Katana

    OWIN与Katana详解   前言 我胡汉三又回来了,!!!!, 最近忙成狗,实在没空写博文,实在对不起自己,博客园上逛了逛发现 我大微软还是很给力的 asp.net core 1.0 .net c ...

  7. Grub2配置详解(转)

    grub2基础教程-修订版                                      smallapple 目录 一.grub2新特性 二.grub2安装与启动 三.grub2配置文件 ...

  8. 重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom

    原文:重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom [源码下载] ...

  9. javaweb学习总结(七)——HttpServletResponse对象(一)(转)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...

  10. 【原创】纯OO:从设计到编码写一个FlappyBird (三)

    第二部分请点这里 下面首先来实现Bing接口! 实现Bing接口的类取名SimpleBing. 容易发现,SimpleBing类总的来说要向下,但点击一下又得向上,向上到了一定界限又得向下,但我们又只 ...