存储引擎
存储引擎
时序数据库的存储引擎主要需满足以下三个主要场景的性能需求:
-
大批量的时序数据写入的高性能
-
直接根据时间线
( 即Influxdb 中的Serieskey) 在指定时间戳范围内扫描数据的高性能 -
间接通过
measurement 和部分tag 查询指定时间戳范围内所有满足条件的时序数据的高性能
WAL 解析
索引数据的WAL
由于
时序数据的WAL
由于
TSMFile 解析
其特点是在一个
索引块的构成
其中索引条目在
- 根据用户指定的时间线(Serieskey)以及
Field 名 在 索引区 利用二分查找找到指定的Serieskey+FieldKey 所处的 索引数据块 - 根据用户指定的时间戳范围在 索引数据块 中查找数据落在哪个(或哪几个)索引条目
- 将找到的索引条目对应的时序数据块加载到内存中进行进一步的
Scan
上述的
时序数据的存储
同一个
- Timestamp:Delta-of-delta encoding
- Field Value:由于单个数据块的
Field Value 必然数据类型相同,因此可以集中按数据类型采用不同的压缩算法Float 类: Gorrila’s Float CommpressionInteger 类型: Delta Encoding + Zigzag Conversion + RLE / Simple8b / None String 类型: Snappy CompressionBoolean 类型: Bit packing
做查询时,当利用
TSIFile 解析
如果查询时用户并没有按预期按照
map<SeriesID, SeriesKey>
map<tagkey, map<tagvalue, List<SeriesID>>>
它们在内存中展现如下:
但是在实际生产环境中,由于用户的时间线规模会变得很大,因此会造成倒排索引使用的内存过多,所以后来