Influxdb 知识总结(4)-- seriesfile

seriesfile 存储了当前DB下所有的SeriesKey 信息,在influxdb 数据库中,series 文件连结了内存索引(inmem) 与 TSM存储引擎索引,构成了influxdb查询过程中不可或缺的一环。
在influxdb中,数据查询的流程大致简单如下:

  • 在数据查询的过程中,通过对查询语句分析,借助内存索引(inmem)得到符合条件的SeriesID集合;
  • 通过SeriesFile得到seriesid所对应的serieskey的具体内容;
  • 通过TSM存储引擎,针对serisekey的信息以及查询时间条件等,找到对应的结果,并聚合后返回;
series 存储结构

Influxdb 知识总结(4)-- seriesfile_第1张图片
与 series file 相关的源码部分位于tsdb目录下面,主要涉及四部分的源码:

series_file.go
series_partion.go
series_segment.go
serise_index.go

1 每个DB下面的series文件最多分成8个partion, 每个partion可以分为多个segment
2 series_index 为 partion 下面所有segment file 的内存索引

series_segment

Influxdb 知识总结(4)-- seriesfile_第2张图片
可以看到segment的存储结构:
1 每个series_segment下面包含多个series_entry;
2 每个serise_entry 包含flag、id、SeriesKey总写入长度、measurement长度、measurement、 tag数量、 具体的tag信息等数据;

series_index

分析series_index.go 中包含的索引结构:

 // SeriesIndex represents an index of key-to-id & id-to-offset mappings.
  type SeriesIndex struct {
  		// 对key进行hash后存储对应的(entry_id + offset)
  		// key 为 segment_entry 的数据部分:(写入长度 + 具体数据内容)
  		// offset = segment id + (segment_entry 在 segment 中的 pos)
		keyIDData    []byte // key/id mmap data
		// 对 entry_id 进行hash后存储( entry_id + offset)
		idOffsetData []byte // id/offset mmap data
  		...
       // In-memory data since rebuild.
       // key 为 series_entry中除去flag、id以外剩余的部分
       // value 为 segment_entry 的id 
       keyIDMap    *rhh.HashMap 
       // key 为 segment_entry的 id 
       // value 为 (segment id) +(segment_entry 在 segment 中的 pos )    
       idOffsetMap map[uint64]int64
      ...
  }

SeriseIndex 数据一部分保存在Map中( keyIDMap, idOffsetMap), 另一部分数据保存在 []byte 结构中,这部分数据采用对key进行hash的方式存储, 方便写入磁盘文件以及从磁盘文件恢复(可以采用mmap 的方式从文件映射到内存中的一个[]byte结构体中);

SeriesPartion

SeriesPartion 里面一个重要的方法:
该方法把新的segment entry相关的索引信息(id, offset) 压缩到[]byte结构体中, 然后就可以写入磁盘文件中保存;
同时也可以采用mmap的方式将已有的索引信息从磁盘文件映射到index结构体中keyIDData,idOffsetData字段中;

func (c *SeriesPartitionCompactor) Compact(p *SeriesPartition) error {
...
}

SeriesFile

seriesfile 负责管理所有的series 文件,对外提供操作series的公共接口,屏蔽了内部的segment, segment等结构。

参考:series 源码解析

你可能感兴趣的:(存储)