安徽省建设干部网站,网站建设与管理答案,缺乏门户网站建设,本地搭建网站网站后台Druid的数据结构Druid数据存储结构可以分为三层#xff1a; 1. DataSource 2. Chunk 3. SegmentDataSource相当于传统数据库的按时间分区的表#xff0c;Chunk相当于MySQL中的按时间分区的表一个分区#xff0c;但是Chunk不是一个实体#xff0c;只是一个虚拟的概念#x…Druid的数据结构Druid数据存储结构可以分为三层 1. DataSource 2. Chunk 3. SegmentDataSource相当于传统数据库的按时间分区的表Chunk相当于MySQL中的按时间分区的表一个分区但是Chunk不是一个实体只是一个虚拟的概念一个Chunk中可以有多个Segment。 在最终落地的文件结构(可以存在本地文件、HDFS中)中一个DataSource占用一个目录该目录下包含若干个Segment文件Segment文件名中包含该Segment所属的DataSource名、内含数据的时间区间、分区序号每个Segment都是一个压缩文件。 Druid的DataSource本身不维护元数据每一个Segment内部包含了该Segment的所有列信息一个DataSource下的各Segment的字段可以不同Druid允许在同一个DataSource下存放不同字段数、字段名的Segment在做数据入库的时候不做格式合法性检查查询的时候针对缺失字段提供默认行为(缺失的数值型字段取默认值0缺失的字符串型字段取默认值null)。Segment的数据结构Segment的字段分为三类 1. TimeStamp 2. Dimension 3. MetricTimeStamp是固定字段每个Segment都必须有一个TimeStamp类型字段字段名可以由用户指定Dimension是维度字段可以是数值型、字符串型Metric是指标字段必须是数值型。 Druid的数据是按列存储的每一列的所有数据都存储在一段连续的文件地址内执行查询的时候只需要访问相关的列即可而且由于列内数据的存储地址是连续的所以读取每一列的数据都很快。 TimeStamp和Metric类型的列的存储格式都比较简单只是单纯地把所有数据按照LZ4的格式压缩存储而已而Dimension类型的列的存储格式比较复杂包含如下结构 1. 一个把所有取值(不管Dimension是什么类型存储时都被视为是字符串类型)和连续的数字ID一一匹配的字典 2. 该列的所有行的取值对应的数字ID按顺序存储 3. 一个倒排索引字典key是该列的所有取值value是一个列表如果第N行的该列取值为key则该列表的第N项就是1否则是0这些数据结构都是为提高查询速度而服务的第一条是基础第二条在处理groupBy/topN这类查询时效率很高第三条(倒排索引)在处理查询的AND/OR的联合筛选时效率很高。 示例如下1: Dictionary that encodes column values{Justin Bieber: 0,Ke$ha: 1}2: Column data[0,0,1,1]3: Bitmaps - one for each unique value of the columnvalueJustin Bieber: [1,1,0,0]valueKe$ha: [0,0,1,1]