Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

...

基本功能


TsFile 中会存储多个时间序列的数据,时间索引记录了这些时间序列的时间范围。

...

不按照最后一层分组的原因是,时间序列可能过多,导致时间索引过大,因此选择了倒数第二层作为索引的路径,然而,当倒数第二层基数过多时(几十万、百万量级),时间索引仍然会较大。

...


时间索引粒度的影响:

在各个组的序列时间范围相同时(即写入是同步的),索引粒度越粗,越节省内存,且无任何副作用。

在各个组的序列时间范围不同时(如一个序列写入1-10,另一个写入20-30),索引粒度越粗,越不精确。

TimeIndex 设计方案

一、TsFileResource及接口设计修改目标

2. 目标:

(1) 总体目标:目前tsfile采用一对一的索引方式,每个tsfile都有一个索引文件TsFileResource,tsfile文件内的信息(开始时间、结束时间等)都保存在TsFileResource中。

由于TsFileResource常驻内存中,

本次针对TsFileResouce的改进总目标为可以支持更多的设备,将 resource 中的设备起止时间移出,单独在文件的时间索引模块进行管理,

且可以支持不同实现方式(如每个文件对应一个时间范围索引条目)。每个数据文件在内存中还以 TsFileResource 对象进行管理。

(2) 阶段1目标 —— 接口化:区分【文件句柄TsFileResource】【文件索引TimeIndex】,将TsFileResource开始时间、结束时间等字段移至TimeIndex中

3. 实现方案:TimeIndex仅作为 TsFileResource 中的一个对象,全部接口均由 TsFileResource 调用,不向外暴露;

TsFileResource 的已有接口不变。后续“实现”的全部修改仅针对 ITimeIndex

Image Removed

...

30),索引粒度越粗,越容易多读不需要的文件元数据。


目标:支持多种分组粒度,1、按倒数第二级分组,2、按存储组分组(每个文件一个索引条目)

详细设计


将 TimeIndex 作为 TsFileResource 中的一个内部对象,其全部接口均由 TsFileResource 调用,不向外暴露;


Image Added


具体而言,涉及到数据结构如下:

1. DeviceTimeIndex (后续“实现”的全部修改仅针对 TimeIndex

...