美文网首页Druid
Druid数据模型

Druid数据模型

作者: clive0x | 来源:发表于2019-02-21 11:23 被阅读0次

    大数据OLAP几两类,一类是预计算,Kylin和Druid都属于这类。

    另外一类是内存实时计算,Impala、Spark SQL、Presto、Phoenix属于这类。

    第一类预计算和写入需要时间,计算性能快,并发高,缺点就是因为预聚合,不能查明细。

    第二类可以查明细数据,但是由于内存实时计算,占用资源比较高,QPS偏低。

    Kylin和Druid区别:

    1.Druid使用大宽表模型预汇聚数据,而Kylin使用Cube,RollUP和DrillDown操作会合理些。

    2.由于列式存储大宽表append性质,Druid可提供准实时查询。

    Druids数据按datasorce存储(类似rdbms table),类Hive partition,Druid有Chunk,类Hive二级或者多级Partition,Chunk按时间分Segments存储,Segment内部按300-500G文件大小分Partition/Shard。

    Druid存储目录

    /druid/segments/<datasource>/<interval_start>-<interval_end>/<segmentGeneratetime>/<shardNum>

    Druid逻辑数据结构

    Druid物理数据存储:

    目录包括

    descriptor.json

    index.zip

    descriptor.json是这个Segment的描述文件,其内容也保存在Druid集群的元数据的druid_segments表中。其内容如下:

    {

    "dataSource": "AD_active_user",

    "interval": "2018-04-01T00:00:00.000+08:00/2018-04-02T00:00:00.000+08:00",

    "version": "2018-04-01T00:04:07.022+08:00",

    "loadSpec": {

    "type": "hdfs",

    "path": "/druid/segments/AD_active_user/20180401T000000.000+0800_20180402T000000.000+0800/2018-04-01T00_04_07.022+08_00/1/index.zip"

    },

    "dimensions": "appkey,spreadid,pkgid",

    "metrics": "myMetrics,count,offsetHyperLogLog",

    "shardSpec": {

    "type": "numbered",

    "partitionNum": 1,

    "partitions": 0

    },

    "binaryVersion": 9,

    "size": 168627,

    "identifier": "AD_active_user_2018-04-01T00:00:00.000+08:00_2018-04-02T00:00:00.000+08:00_2018-04-01T00:04:07.022+08:00_1"

    }

    index.zip文件中包括了该segment中的数据。它包含了以下三类文件:

    version.bin:Segment内部标识的版本号,标识为v9. 内容为00000009。

    xxxxx.smoosh:xxxxx从0开始编号,最大为2G,是为了满足Java内存文件映射MapperByteBuffer限制。在segment生成阶段,Druid会为每列数据生成对应的索引,并将压缩后的聚合数据以及索引存入到以列命名的drd文件中(比如上segment的__time.drd,index.drd,appkey.drd...)。所有的*drd文件最终被合并成*.smoosh文件。其中压缩编码后的每列原始数据包含两部分1)使用Jackson序列化的ColumnDescriptor,包含列数据的元信息,比如数据的类型,是否包含multi-value。。。2)其余部分为编码以后的二进制数据。

    meta.smoosh: 该文件用于记录该segment数据的元信息。文件格式为csv。包含两部分:

    第一行为文件头:

    其中v1代表segment的版本号,2147483647(2GB)为xxxxx.smoosh文件的最大大小。1表示分片数量,即index.zip文件中xxxxx.smoosh文件的个数。

    从第二行开始为文件体:

    每行都是4列,column表示列名,smooshid表示分片编号,从0开始编号,对于包含多个xxxxx.smoosh文件的index.zip,meta.smooth文件会记载多个xxxxx.smoosh文件中每列的元信息。startPos为该列在第smooshid分片中的开始位置,endPos为其结束位置。

    Druid包括很多分布式算法:

    行程编码字符串

    RoaringBitmap/Bitmap索引

    BitMap压缩技术

    hyberloglog 预估算法等。

    值得一提的是Druid存储 histrical和计算Broker分离,这点ES没法与其相比,存储和计算分离好处是横向扩展容易,多租户支撑较好。这点Pulsar与Druid类似。

    物理存储转自原文:https://blog.csdn.net/mytobaby00/article/details/79801425

    相关文章

      网友评论

        本文标题:Druid数据模型

        本文链接:https://www.haomeiwen.com/subject/glalyqtx.html