InfluxDB文件结构解析
InfluxDB文件目录结构
InfluxDB文件目录结构如上图所示,从图中我们可以看出InfluxDB主目录下有3个子目录:data,wal,meta:
- data:存放时序数据以及其索引文件
- wal: 存放插入数据时产生的write ahead log(wal)
- meta:存放元数据
下面我们对重要的文件进行进一步的解析。
Time-Structured Merge Tree(TSM) File
TSM文件按列存储时序数据,其文件结构如上所示。该文件主要分为两个三个部分:
- DataBlock : 按列式存储同一个Key = SeriesKey + 单个FieldKey所对应的FieldValue值,以按列的方式进行存储可以获得高效的压缩,节省大量的磁盘空间。
- CheckSum: 该DataBlock的校验码
- FieldValueType: 表示该DataBlock存储的FieldValue类型,InfluxDB中存在5中FieldValueType: Float, Integer, Unsigned, Boolean, String
- TimestampSize: 表示TimeStamps block的长度,使用可变长编码
- Timestamps: 将时间按列使用delta-delta编码压缩
- Values: 将FieldValue值按列进行压缩,不同类型的FieldValue使用不同的压缩算法,具体参见:InlfuxDB FieldValue压缩算法
- IndexBlock: 保存对应DataBlock的相关索引信息
- KeySize: Key的长度
- Key: Key = SeriesKey + 单个FieldKey,例插入一条记录insert cpu,brand=dell,country=china price=100,sale=true,则这条记录有两个Key,分别为cpu,brand=dell,country=china#!~#price和cpu,brand=dell,country=china #!~#sale, #!~#为SeriesKey和FieldKey之间的分隔符
- Type: FieldValue类型
- IndexEntryCount: 用于统计该IndexBlock中IndexEntry的数量
- IndexEntry: DataBlock索引项
- MinTime: 对应的DataBlock中最早数据的时间
- MaxTime: 对应的DataBlock中最晚数据的时间
- DataBlockOffset: 对应的DataBlock在该文件的偏移量
- DataBlockSize: 对应的DataBlock的长度