Google在2010年的时候对外公布了其使用的一个大数据交互式分析系统,名字叫Dremel。同时还发布了相关的论文,[url]http://research.google.com/pubs/pub36632.html[/url]。
从论文中看,Dremel有两个方面的重大创新点,
[list=1]
[*]以面向列的结构存储记录
[*]并行聚合计算
[/list]
[b]以面向列的结构存储记录[/b]
Dremel将数据集合中的每条记录中的相同属性组织称一个列。比如说,有一份数据,每条记录有三个属性,分别是F1、F2和F3,在Dremel中,所有记录的F1会被放到一起进行存储,相同的、F2和F3也会被放到一起存储。这个就是基于列的结构。
采用这种结构,如果统计或者分析的时候只用到了F1属性,那么F2和F3就不需要被加载了,这可以有效降低系统从磁盘读取数据的量,加快处理速度。
目前流行的hadoop在存储的时候,是面向行的存储结构,就算只需要行中的几个属性,整行数据也必须要被加载进来,对磁盘的消耗对比可想而知。
[b]并行聚合计算[/b]
Dremel采用了执行树来进行具体查询语句的执行,整棵树的每一层都会将查询条件进行拆分,提交给下一层,叶子节点执行数据加载和最初的计算,然后从下往上进行聚合。并行程度是相当搞的,可以充分利用集群的计算能力。
从论文中的数据来看,Dremel在执行聚合查询方面的能力要比hadoop的map-reduce快很多,一般都在10秒以内完成。主要就是应为Dremel做了上述两个改进导致的。
从论文中看,Dremel有两个方面的重大创新点,
[list=1]
[*]以面向列的结构存储记录
[*]并行聚合计算
[/list]
[b]以面向列的结构存储记录[/b]
Dremel将数据集合中的每条记录中的相同属性组织称一个列。比如说,有一份数据,每条记录有三个属性,分别是F1、F2和F3,在Dremel中,所有记录的F1会被放到一起进行存储,相同的、F2和F3也会被放到一起存储。这个就是基于列的结构。
采用这种结构,如果统计或者分析的时候只用到了F1属性,那么F2和F3就不需要被加载了,这可以有效降低系统从磁盘读取数据的量,加快处理速度。
目前流行的hadoop在存储的时候,是面向行的存储结构,就算只需要行中的几个属性,整行数据也必须要被加载进来,对磁盘的消耗对比可想而知。
[b]并行聚合计算[/b]
Dremel采用了执行树来进行具体查询语句的执行,整棵树的每一层都会将查询条件进行拆分,提交给下一层,叶子节点执行数据加载和最初的计算,然后从下往上进行聚合。并行程度是相当搞的,可以充分利用集群的计算能力。
从论文中的数据来看,Dremel在执行聚合查询方面的能力要比hadoop的map-reduce快很多,一般都在10秒以内完成。主要就是应为Dremel做了上述两个改进导致的。