本文摘录 - Infobright
背景
论文 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的更多相关文章
- 本文摘录 - FlumeJava
本文节选不保证论文的完整性和理解的准确性 原始的MapReduce.分Map,Shuffle,Reduce. Map里包含shards. Shuffle理解为groupByKey的事情.Reduce ...
- effective C++学习三(仅供个人学习记录,本文摘录effective C++)
条款 3:尽量用 new 和 delete 而不用 malloc 和 free 把 new和 delete 与malloc 和 free 混在一起用也是个坏想法.对一个用 new 获取来的指针调用 ...
- effective C++学习二(仅供个人学习记录,本文摘录effective C++)
条款 2:尽量用<iostream>而不用<stdio.h> scanf 和 printf 很轻巧,很高效,你也早就知道怎么用它们,这我承 认.但尽管他们很有用,事实上 sca ...
- effective C++学习一(仅供个人学习记录,本文摘录effective C++)
条款 1:尽量用 const 和 inline 而不用#define #define ASPECT_RATIO 1.653 编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进 ...
- 高效CSS开发核心要点摘录
做网站的,我们都知道尽量减少请求数,压缩CSS代码量,使用高效CSS选择符等方式可以来提高网站的载入速度和访问速度,也就是优化网站的性能. 下面分析了一些CSS的书写方式,很多都是我们知道并且正在使用 ...
- 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 企业版的新功能 本文摘录自公司群发邮件, ...
- UART to Serial Terminal(转载)
前一篇<UART Explained>介绍了UART的基本信息,重点分析了UART的信号.本文摘录的文章则重点介绍了波特率(Baud Rate)相关的内容,波特率越高,传输速度越快,但实际 ...
- Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析
本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...
- Nodejs进阶:如何玩转子进程(child_process)
本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 在node中,child_process这个模 ...
随机推荐
- VMware WorkStation安装时提示The MSI failed
以前安装过其他版本的VMware workstation卸载不完全造成的 先把所有VMware相关服务关闭,然后打开注册表,搜索所有VMware相关键值,删除掉,然后再安装就可以了 前提是你机器上没有 ...
- Lucene 实例教程(四)之检索方法总结
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...
- Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理
原文链接: Spring Security with Maven原文日期: 2013年04月24日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述 本文通过实例为您介绍怎样使用 Mave ...
- 文件下载-SpringMVC中測试
直接改动文件路径就能够.其它都不须要改动,帮助类已经为大家写好,可直接使用 1.Scroller: /** * 下载文件 * @author liupeng * @param request * @p ...
- HDU ACM 2586 How far away ?LCA->并查集+Tarjan(离线)算法
题意:一个村子有n个房子,他们用n-1条路连接起来,每两个房子之间的距离为w.有m次询问,每次询问房子a,b之间的距离是多少. 分析:近期公共祖先问题,建一棵树,求出每一点i到树根的距离d[i],每次 ...
- 【NIO】dawn在buffer用法
网络编程,buffer它用于数据传输到网络上的集线器应用程序,不用说,一个重要的线.提到buffer我不能说什么零拷贝,buffer什么内存管理,在dawn在,基于directbuffer再次能够实现 ...
- 在Eclipse在使用JUnit4单元测试(0基础知识)
自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数.这些函数的功能可能非常强大,但我们在 ...
- Hibernate操作Clob数据类型
在POJO字符串可以声明为一个大型对象java.lang.String要么java.sql.Clob种类. 当程序从数据库加载Clob数据的类型.负荷只有一个Clob数据的逻辑指针类型.我们需要通过使 ...
- linux上安装Drupal
linux上安装Drupal 前言:国内用drupal的并不太多,网上资料也很少.要注意的是drupal尽量别使用apt来安装,特别是ubuntu平台的drupal做出了一定的更改,会妨碍后期的学习和 ...
- 在 树莓派上使用 c++ libsockets library
rpi默认安装的编译器是gcc-4.6.2 而现在最新的c++ libsockets library 需要使用支持c++-11特征的编译器,即需要4.8.2才可以.为此,需要先升级编译器才可以支持编译 ...