文章目录

  • 前言
  • 一、Dremel是什么?
  • 二、数据模型
  • 三、嵌套式的列存储
    • 1.特点与区别
    • 2.记录的无损表示
    • 3.列式储存

前言

虽然 MapReduce 在处理数据时的确有其便捷性。但是当利用 MapReduce 从海量的数据集中提取出有效的特征时,很可能需要等待几个小时甚至更长时间才能出结果,假如发现代码的算法有问题,无法有效地提取特征,因此又重新修改了代码,并再次运行。这样的过程可能要反复好几 次,总的耗时可能多达数天,所以效率极低。
就此Google的团队结合其自身的实际需求,借鉴搜索引擎和并行数据库的一些技术,开发出了实时的交互式查询系统Dremel。


一、Dremel是什么?

Dremel 是Google 的“交互式”数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充。Dremel作为Google BigQuery的report引擎,获得了很大的成功。Apache计划推出Dremel的开源实现Drill,将Dremel的技术得到了更广泛的应用。

二、数据模型

  • 面向列的存储

Google的Dremel是第一个在嵌套数据模型基础上实现列存储的系统如下(示例):

  • 嵌套模型定义

原子类型

原子类型允许的取值类型包括整型、浮点型、字符串等

记录类型

记录类型则可以包含多个域,是使用递归方式定义的,即τ能够由其余以前定义好的τ组成,就像c中的结构体,与结构体不大相同的是,每一个包含的τ的值能够有多个(*,repeated,相似c中的数组),还能够是可选的(?,optional,以前那个数组能够不包含任何元素)。由此记录型数据包括三类:必须型(Required)、可重复型(Repeated)以及可选用的(Optional)。其中Required类型必须出现且仅能出现一次。

三、嵌套式的列存储

1.特点与区别

  • 关系型数据库

采用列存储有其便利之处,因为在不同列中相同位置的数据必然属于原数据库中的同一行,因此我们可以直接将每一列的值按顺序排列下来,不用引入其他的概念,也不会丢失数据信息。

  • 嵌套式数据结构的列存储

数据本身之间的关系比关系数据库要复杂。存储后的数据本身反映不出任何结构上的信息,因此存储中除了记录值,还要记录结构。另外,所有的列存储在应用时往往要涉及多个列,如何按照正确的顺序快速地进行数据重组也是列存储需要解决的。

2.记录的无损表示

如果仅仅是数值(values) 的话,数值本身无法传递出记录(record) 的结构信息。我们不知道两个数值是属于两条不同的记录还是在一条记录下,同时我们也不知道一些可选的字段(field)是否显式定义。因此,我们引入了两个概念:重复深度( Repetition Level )和定义深度( Definition Level )。

  • 重复深度( Repetition Level )

定义听起来比较抽象:at what repeated field in the field’s path the value has repeated。意思就是在路径上,在哪个repeated 字段上重复了。

如下图所示:

Code(Name.Language.code)中可重复字段有Name、Language
R 的取值为 0:没有重复、1:Name(位置排第一)重复 2:Language(第二)重复

  • 定义深度( Definition Level )

定义为:对于具有路径p的字段的每个值,Definition Level表示record中可以是未定义(option/repeated field)但是却实际上是存在的字段的数目。


值得注意的几点是:

  1. 在路径上计算多少字段本可以不存在时,包含了当前字段本身。例如计算Country:us时,Country本身也是optional,也计入总数,所以d=3。
  2. 每种字段只计算1次。例如最下面的Country:gb,在其路径上的3个Name都满足条件,但只计1次,所以d=3,而不是5。

对于NULL来说,路径p上有多少字段可以是不存在( 例如在文档定义中是optional 或repeated,而不是required ) ,然而实际却存在的。例如文档r1 的Name下没有Code 字段,然而Name 字段却存在( 因为Name下有Url ),所以在表中保存一条NULL,并且d=1。
对于非NULL字段来说,意义不大,因为d 的值对于每种字段来说都是相同的,例如Code都是2,Country都是3。

3.列式储存

每一列都以块(block)的集合进行存储,每个块包含重复深度、定义深度和压缩后的字段值。


Null值无需存储:因为null可以通过定义深度d来确定:d < 路径上repeated和optional字段总数,就说明是NULL。
始终被定义的值无需存储definition level:例如required int64 DocId(只有required ,始终为被定义)
仅当需要时才存储重复深度:例如定义级别为0,则暗含可重复级别为0,存储时,可以省略掉后者。
使用bit存储level,例如,定义级别最大为3,那么使用2bit就可以表示。

Dremel学习总结1相关推荐

  1. Dremel学习总结2

    文章目录 一.Dremel数据重组 1.什么是数据重组 2.Dremel的数据重组 实现原理 1.通过DocId 和 Name.Language.Country 这两个字段的重建 2.R1数据重组过程 ...

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

    产生背景 Google公开了MapReduce计算框架之后,由于其强大的数据分析和处理能力,很快被视为数据分析的一个实际标准,各种围绕MapReduce框架的开发层出不穷.但互联网的发展,数据种类和应 ...

  3. Dremel的学习与理解

    Dremel刚出来的时候还是非常小心翼翼的避免和MapReduce冲突的.从无数的宣传资料和ppt上可以看到,他们出来演讲的时候都会说自己是MapReduce的一个补充,是为少量到中等规模的数据查询服 ...

  4. 调度框架学习笔记(3)—— 集群调度框架的架构演进过程

    本章是 The evolution of cluster scheduler architectures 文章的学习笔记.这篇文章讨论了这些年调度架构是如何发展的以及为什么会这样发展. 首先介绍一下这 ...

  5. 史上最全的“大数据”学习资源

    2019独角兽企业重金招聘Python工程师标准>>> 资源列表: 关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键- ...

  6. 干货丨不可错过的大数据学习资源推荐

    今天为大家推荐一些翻译整理的大数据相关的非常棒的学习资源,希望能给大家一些帮助. 关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库: PostgreSQL:世界最先进的开源数据库: ...

  7. 辛湜推荐的数据库领域的一些学习材料

    之前林仕鼎曾整理过系统架构领域的学习资料,这几天Spark核心团队成员辛湜(Reynold Xin)公开了他整理的一份数据库学习资料列表,很有价值,Hacker News上引起了不少讨论.简要编译如下 ...

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

    摘自:http://www.yankay.com/google-dremel-rationale/ 简介 Dremel 是Google 的"交互式"数据分析系统.可以组建成规模上千 ...

  9. 最全的“大数据”学习资源

    关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键-值数据模型 图形数据模型 NewSQL数据库 列式数据库 时间序列数据库 类SQL处理 ...

最新文章

  1. JavaScript数据运算
  2. JavaScript 工作原理(一):引擎,运行时,调用堆栈
  3. Unity_UIWidgets学习笔记03_组件_Container
  4. 《实用》secureCRT远程连接linux虚拟机-突然连接不上-解决办法
  5. 获取IP地址和MAC地址
  6. 营销 | 10个助燃商业增长的市场营销战略!
  7. linux 关机时卸载sd,Linux下U盘SD卡的自动挂载和卸载
  8. E95-DTU(4G01-485)数传电台的特点及其应用详解
  9. 有效运维的 on-call 机制
  10. python中outside loop_Python入门指引
  11. php之使用file_get_contents对百度orc进行文字识别(二维码识别同理)--base64编码方式(解决image format error)
  12. 2019年共享充电宝行业发展情况分析报告
  13. C#,编写制作《扫雷》游戏代码的前传——作弊手段大曝光
  14. 串口通信实验(通过串口控制LED、蜂鸣器)
  15. PBI Report Builder 报表设计与可视化
  16. Markdown语法图文详解
  17. 微信小程序随机生成文案
  18. 半年亏损超5亿美元/股价腰斩,这家自动驾驶公司日子不好过
  19. springboot报错(三) webjars被拦截或找不到
  20. 高品质USB声卡/音频芯片SSS1700|SSS1700设计96 KHz 24位采样率USB耳机麦克风方案|SSS1700中文设计方案讲解

热门文章

  1. java 控制台刷屏 dll_Java,用户刷屏检测\相似字符串检测
  2. Laravel-excel安装及使用
  3. 如何用PS的切片工具切出想用的图片
  4. 安装宝塔面板并建立网络使用外网访问
  5. 未来十年,交易场景,将由刷脸支付全面构建!
  6. 马来西亚之旅——吉隆坡、马六甲、槟城和亚庇攻略
  7. 腾讯地图、高德地图去除logo方法
  8. 我,28岁程序员,没想到今年找工作这么难
  9. 小白程序员的学习路线
  10. 【数据处理】PS动作功能(附:下雨效果)