Google Dremel数据模型详解(上)

首先简单介绍一下Dremel是什么,能解决什么问题。第二部分着重讲Dremel的数据模型,即数据结构。第三部分将谈一下在此数据结构上设计的算法。

起源

Dremel的数据模型起源于分布式系统的应用环境(Protocol Buffers,一种在Google内广泛使用,现已开源的实现)。其数据模型是基于强类型的嵌套记录,抽象语法可以表示成下面公式:


一个例子:


嵌套列式存储

2.1 记录结构的无损表示

首先来看一下Dremel的数据模型是如何在列式存储下无损的表示出记录的结构的(lossless representation of record structure in a columnar format)。如果仅仅是数值(values)的话,数值本身无法传递出记录(record)的结构信息。我们不知道两个数值是属于两条不同的记录还是在一条记录下,同时我们也不知道一些可选的字段(field)是否显式定义。因此,我们引入了两个概念:Repetition LevelDefinition Level

为了说清楚Dremel模型是如何无损地表示数据的,我想到了两种画法。最终还是决定采用第一种画法,类似有向图,感觉与后面的FSM状态机能更好的对应上。


Repetition Level

Dremel论文中对repetition level的定义听起来比较抽象:at what repeated field in the field's path the value has repeated。意思就是在路径上,在哪个repeated字段上重复了。还是看个例子解释一下吧,以之前的图例中的文档r1中的Code字段为例。


上图清晰地表示出三个Code字段与文档中字段的对应关系。下面来看一下这三个Coderepetition level(简写为r) 021是如何计算出来的。下图忽略无关的字段,将三个Code字段的完整路径都表示出来。那么就可以简单易懂地看出,r就是这些字段路径上,发生重复了的字段的level。请参考下图中的注释就能很快理解。


大家可能还注意到Name.Code表中除了en-usenen-gb三行外,还有两行NULL。第二个NULL是描述文档r2的,我们就分析一下第一个NULL的含义吧。因为文档r1的第二个Name字段下没有Code,而为了说明en-gb是属于第三个Name字段下的,所以在enen-gb之间加了一行NULL,其r也等于1(Name重复)。同时,由于Code在定义中是required的字段,所以事实上这一行NULL也暗示了:在第二个Name字段下Language也是不存在的。不然Language存在而下面却没有Name,这是不符合文档定义的。

以此类推,其他字段的r值都是这样计算出来的。同时注意一点:我们只保存了有值的字段,如DocIdName.UrlName.Language.Code等,而像LinksName.Language等字段是没必要保存的。


Definition Level

definition level(简写为d)在论文中的定义还比较清楚:Each value of a field with path p , esp. every NULL, has a definition level specifying how many fields in p that could be undefined (because they are optional or repeated) are actually present尤其对于NULL来说,路径p上有多少字段可以是不存在(例如在文档定义中是optionalrepeated,而不是required),然而实际却存在的。例如文档r1Links下没有Backward字段,然而Links字段却存在(因为Links下有Forward),所以我们在Links.Backward表中保存一条NULL,并且d=1。对于非NULL字段来说,意义不大,因为d的值对于每种字段来说都是相同的,例如Code都是2Country都是3


值得注意的几点是:

Ø  在路径上计算多少字段本可以不存在时,包含了当前字段本身。例如计算Country:us时,Country本身也是optional,也计入总数,所以d=3

Ø  每种字段只计算1次。例如最下面的Country:gb,在其路径上的3Name都满足条件,但只计1次,所以d=3,而不是5(前面提过,也许是我这第一种画法的缘故,需要这一条规则来限定)

数据压缩

前面介绍了数据的保存方法,实际上真正保存时,数据还会被进一步压缩。

Ø  不显式保存NULL,因为它可以通过d来确定:d < 路径上repeatedoptional字段总数,就说明是NULL。可以通过前面的例子印证一下。

Ø  总是会被定义的字段的d不会被保存。

Ø  r也是仅在必要时才会保存。例如d=0暗示r=0,所以r可以省略不存。

Ø  DocId这种所有level都是0的,实际上不会保存任何level信息。

Ø  尽可能使用位图。例如假如d最大是3,那么我们只使用2bit来保存。

2.2 快速编码成列式存储

略,详见论文附录部分的伪代码。

2.3 高效地组装记录

高效地从列式存储数据中组装出记录,对像MapReduce这种面向记录的数据处理工具来说非常重要。我们的目标是:给定字段的子集,我们能重新构建出仅包含选中字段的原始记录,而过滤掉其他字段。核心思想是:使用有限状态机(finite state machine, FSM)读取每个字段的值和level,顺序地追加到输出流中。FSM为每种字段都关联一个field reader。状态转变通过repetition level来标记。一旦reader抓取到值,我们继续看下一repetition level来决定使用哪个readerFSM就这样从开始状态到结束状态遍历完每条记录。

 

下面还是用前面的例子,通过DocIdName.Language.Country这两个字段的重建,来详细解析一下FSM的工作过程。关键步骤用红色加粗标记。


1.      FSM委托Reader1读取DocId第一行,通过r=0重建记录。

2.      检查DocId第二行,发现r=0,则Reader1停在当前游标位置FSM将状态变化到Name.Language.Country

3.      FSM委托Reader2读取Name.Language.Country第一行,通过r=0重建记录。

4.      FSM委托Reader2读取Name.Language.Country第二行。通过r=2(说明Language字段重复,即Language有多个)重建记录。

5.      FSM委托Reader2读取Name.Language.Country第三行。通过r=1d=1(说明只有Name字段不是NULL)重建记录。

6.      略过第四行。

7.      检查到第五行,发现r=0Reader2停在当前位置。FSM再次发生状态变化,继续重建文档2的记录。

8.      FSM委托Reader1继续读取DocId第二行(之前Reader1就停在这里了)

9.      到这里应该已经很清楚了,最后过程就略说了:DocId中没有数据了,FSM状态变化,Reader2继续读取Country的最后一行数据,重建出记录。

注:论文原图中少了第二个Name字段,我觉得应该加上吧。在第五步被重新构建出来。为什么在原图中没有呢?

前面例子的完整FSM就是这样的:




转载于:https://www.cnblogs.com/xiaomaohai/p/6157675.html

Google之海量数据的交互式分析工具Dremel Google Dremel 原理 简介 DremelGoogle 的“交互式”数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充。Dremel作为Google BigQuery的report引擎, 阅读详情

相关推荐

交互式大数据处理模型-Google Dremel

背景 在大数据时代的背景下,数据是显得如此丰富和可爱。而理所当然的,大数据的存储和计算就是其相关业务的两大亮点了。总结业界一些处理大数据的方式,做了如下比较。 此次,我主要介绍Google Dremel。值得一提的是,Drill是Dremel的开源版本,Google自己的OpenDremel也整合到了Drill中,不过Drill还在Apache孵化器里,得到阶段性的成果还需要一段时间。

千秋大业奋当先 1956

Dremel学习总结1

文章目录前言一、Dremel是什么?二、数据模型三、嵌套式的列存储1.特点区别2.记录的无损表示3.列式储存 前言 虽然 MapReduce 在处理数据时的确有其便捷性。但是当利用 MapReduce 从海量的数据集中提取出有效的特征时,很可能需要等待几个小时甚至更长时间才能出结果,假如发现代码的算法有问题,无法有效地提取特征,因此又重新修改了代码,并再次运行。这样的过程可能要反复好几 次,总的耗时可能多达数天,所以效率极低。 就此Google的团队结合其自身的实际需求,借鉴搜索引擎和并行数据库的一些技

m0_51960101的博客 3742

Dreamwear免安装版

Dreamwear免安装版,不用注册,无限期使用

学习笔记(3):海量数据的交互式分析工具-Dremel

产生背景 Google公开了MapReduce计算框架之后,由于其强大的数据分析和处理能力,很快被视为数据分析的一个实际标准,各种围绕MapReduce框架的开发层出不穷。但互联网的发展,数据种类和应用需求呈现出爆炸式增长。MapReduce作为一种面向批处理的框架,在很多领域不再实用了。对此出现了两种思路,一种是对MapReduce进行改造,使其除了能进行批处理外还能进行其他类型的数据能力,比如处理流数据。另一种思路就是完全抛开MapReduce,根据具体的应用重新进行架构。很明显后一种思路对问题的解决更

zty666_的博客 2055

Google云计算之Dremel

Dremel1.基本概述2.产生背景3.支持的应用4.数据模型5.嵌套式的列存储6.查询语言执行7.性能分析 1.基本概述 Dremel是一款海量数据交互式分析工具 Dremel和MapReduce并不是互相替代,而是相互补充的技术。在不同的应用场景下各有其用武之地。 Drill的设计目标就是复制一个开源的Dremel,但是从目前来看,该项目无论是进展还是影响力都达不到Hadoop的高度。 2.产生背景 虽然 MapReduce 在处理数据时的确有其便捷性。但是当利用 MapReduce 从海量的数

ProChick's Blog 4194

海量数据的交互式分析工具Dremel

字符τ是一个数据类型的定义,可以是原子类型,也可以是记录类型。Ai代表该τ的命名,即Ai就是某个τ类型的变量。原子类型原子类型允许的取值类型包括整型、浮点型、字符串等。记录类型①记录类型可以包括多个域,是使用递归方式定义的,即τ能够由其余以前定义好的τ组成。②记录型数据包括三种类型:必须的(Required)、可重复的(Repeated)、可选的(Optional),其中Required类型必须出现且仅能出现一次。

qq_51580006的博客 1915

【翻译】Dremel: Interactive Analysis of WebScale Datasets

文章目录作者公司摘要1. 简介2. 背景3. 数据模型4.嵌套列式存储4.1 重复和定义级别重复级别定义级别编码4.2 将记录拆分成列4.3 记录组装5. 查询语言6. 查询执行树结构查询调度器7. 实验本地磁盘MR 和 Dremel服务树拓扑每个分片的直方图记录内聚合可扩展性落后者8. 观察9. 相关工作10. 总结11. 致谢12. 参考文献附录A. 列条带化算法B. 记录组装算法C. FSM 构造算法D. SELECT-PROJECT-AGGREGATE计算算法 作者 Sergey Melnik, A

qq_27639777的博客 1412

Google Dremel数据模型详解

转载自:http://blog.csdn.net/dc_726/article/details/41627613 首先简单介绍一下Dremel是什么,能解决什么问题。第二部分着重讲Dremel数据模型,即数据结构。第三部分将谈一下在此数据结构上设计的算法。 1 起源 Dremel数据模型起源于分布式系统的应用环境(Protocol Buffers,一种在Google内广泛

myrainblues的专栏 2353

Dremel:在网络规模数据集上的交互式分析

Dremel是一个在只读的嵌套数据上的可伸缩的、交互式的点对点的查询系统。通过结合多层执行树和列式数据布局,其有能力在数秒之内在万亿行的表上成功执行聚合查询。系统可以扩展到数千个CPU以及PB级的数据,且在Google有成千上万的用户。在本论文中,我们描述了Dremel的架构和实现,并解释它是如何补充基于MapReduce的计算的,我们展示了一个新颖的列式存储表达,其支持嵌套格式的记录,并讨论了在数千节点的系统上做的一些实验。

不动明王1984的博客 768

Dremel学习总结2

文章目录一、Dremel数据重组1.什么是数据重组2.Dremel的数据重组实现原理1.通过DocId 和 Name.Language.Country 这两个字段的重建2.R1数据重组过程 一、Dremel数据重组 1.什么是数据重组 数据库使用较长一段时间后,因为一些增,删,改等操作,使得数据的分布索引及相关数据会变得比较凌乱,从而影响数据库的效率。 数据库重组即是将数据库的相关信息重新组织。 2.Dremel的数据重组 将查询设计的列取出,按照原始记录的顺序组装起来,以实现高效地从列式存储数据中组装出

m0_51960101的博客 1466

Dremel的学习理解

Dremel刚出来的时候还是非常小心翼翼的避免和MapReduce冲突的。从无数的宣传资料和ppt上可以看到,他们出来演讲的时候都会说自己是MapReduce的一个补充,是为少量到中等规模的数据查询服务的,而MapReduce则用来处理更大量的数据。这种宣传在Dremel越来越成功,以及FlumeJava差不多把整个MapReduce的team都要收编了的今天就显得多余了。所以胆肥的Dremel队伍现在已经比较少再提自己是MapReduce的有益补充了。 Dremel出来没多久,开源社区,尤其是Hadoo

m0_61870641的博客 444

Google Dremel 原理 - 如何能3秒分析1PB

简介 DremelGoogle 的“交互式”数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充。Dremel作为Google BigQuery的report引擎,获得了很大的成功。最近Apache计划推出Dreme

Mac Track 1483

Drill系列(1):Dremel的原理

Google在推出了三大论文之后,并没有停止震撼世界的步伐,例如在Dremel中,借助精巧的数学模型,可以在3秒中分析1PB数据,便是又一大创新。 让我们来看一下Dremel的魅力:Dremel号称能够3秒分析1PB数据,如果在一个PB级别的数据集上面,将任务缩短到秒级,无疑需要大量的并发,假设磁盘的顺序读速度在100MB/S上下,那么在1S内处理1TB数据,意味着至少需要有1万个磁盘的同时并...

晓阳的数据小站 2888

Dremel-大数据上的交互式分析

Dremel-大数据上的交互式分析  翻译自:http://research.google.com/pubs/pub36632.html 摘要: Dremel是一套用于分析只读嵌套数据的可扩展交互式即时查询系统。通过结合多层执行树和数据的列组织,Dremel可以在秒级完成上万亿行表的聚合查询。这个系统可以扩展到几千个CPU、P级别的数据,在Google有几千个用户。本文将描述Dremel

ustclilo的专栏 4496
上一篇: python 文件存取
下一篇: CentOS Python2.4升级到Python2.7
weixin_30481087
博客等级 码龄11年 102粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值