|NO.Z.00009|——————————|BigDataEnd|——|Hadoop&OLAP_Druid.V09|——|Druid.v09|架构|数据存储|
一、数据存储
### --- 数据存储
~~~     Druid中的数据存储在被称为DataSource中,DataSource类似RDBMS中的 Table
~~~     每个DataSource按照时间划分,
~~~     每个时间范围称为一个Chunk(比如按天分区,则一个chunk为一天)
~~~     在Chunk中数据被分为一个或多个Segment
~~~     Segment是数据实际存储结构,Datasource、Chunk只是一个逻辑概念
~~~     Segment是按照时间组织成的Chunk,所以在按照时间查询数据时,效率非常高
~~~     每个Segment都是一个单独的文件,通常包含几百万行数据
### --- 数据分区:
~~~     Druid处理的是事件数据,每条数据都会带有一个时间戳,可以使用时间进行分区
~~~     上图指定了分区粒度为为天,那么每天的数据都会被单独存储和查询~~~     # Segment内部存储结构
~~~     Druid采用列式存储,每列数据都是在独立的结构中存储
~~~     # Segment中的数据类型主要分为三种
~~~     时间戳。每一行数据,都必须有一个timestamp,Druid一定会基于时间戳来分片
~~~     维度列。用来过滤filter或者组合groupby的列,通常是string、float、double、int类型
~~~     指标列。用来进行聚合计算的列,指定的聚合函数 sum、average 等
### --- MiddleManager节点接受到 ingestion 的任务之后,开始创建Segment:
~~~     转换成列存储格式
~~~     用bitmap来建立索引(对所有的dimension列建立索引)
~~~     使用各种压缩算法:
~~~     所有的列使用LZ4压缩
~~~     所有的字符串列采用字典编码/标识以达到最小化存储
~~~     对位图索引使用位图压
~~~     Segment创建完成之后,Segment文件就是不可更改的,
~~~     被写入到深度存储(目的是为了防止MiddleManager节点宕机后,Segment的丢失)。 
~~~     然后Segment会加载到Historical节点,Historical节点可以直接加载到内存中。
~~~     同时,metadata store 也会记录下这个新创建的Segment的信息,
~~~     如结构,尺寸,深度存储的位置等等。Coordinator节点需要这些元数据来协调数据的查找。Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号