|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-timeline
### --- 数据分区:

~~~     Druid处理的是事件数据,每条数据都会带有一个时间戳,可以使用时间进行分区
~~~     上图指定了分区粒度为为天,那么每天的数据都会被单独存储和查询
~~~     # Segment内部存储结构
~~~     Druid采用列式存储,每列数据都是在独立的结构中存储

~~~     # Segment中的数据类型主要分为三种
~~~     时间戳。每一行数据,都必须有一个timestamp,Druid一定会基于时间戳来分片
~~~     维度列。用来过滤filter或者组合groupby的列,通常是stringfloatdoubleint类型
~~~     指标列。用来进行聚合计算的列,指定的聚合函数 sum、average 等
druid-column-types
### --- 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

 

 

posted on   yanqi_vip  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示