Druid 的数据表是由一组分布在集群中不同的historical节点上和实时节点上的segment组成,一个segment包含了一定时间段内的数据,所有的读写操作都发生在segment上,它是Druid操作的最小单元。Real-time节点在生成segment时,segment的名称由数据源(表)、起始时间、结束时间、版本号四部分组成,作为segment的唯一标识。版本号越大,数据越新(疑问:版本号是怎样改变的?)。在查询时,会加载相应时间段内的最新版本的segment。
Segment采用的是类LSM树结构的列式存储,类LSM树结构和LSM树结构不同的是省去了WAL(预写日志)部分(疑问:不会有数据丢失吗?),通常会被上传到HDFS或S3上做深存储。相比行式存储,列式存储可以更加高效的使用CPU,因为加载时,按需取数据,只加载需要的列即可,不必把行中部分不相关的数据都加载进来;另外,列出存储也可以针对不同列字段类型采用不同的压缩算法,更加节省内存和磁盘空间。
本文介绍了Druid数据存储的基本单位——segment,并解释了segment如何分布在historical和实时节点上。详细阐述了segment的组成、生成规则及存储方式,同时对比了列式存储与行式存储的优势。

1588

被折叠的 条评论
为什么被折叠?



