当前 IoTDB 只支持在存储组设置 TTL,需要支持更细粒度的 TTL 设置。


功能层面:

(1)只允许用户在 SG 节点设置 TTL
(2)允许用户在元数据树的 SG 节点-设备节点 之间的任意节点设置 TTL。父节点的 TTL 比子节点的 TTL 要大(比如整个存储组保留 3 个月,其中某个设备保留1周)。

实现层面:

(a)当用户在存储组节点设置 TTL 时,我们起一个单独的线程去做整个 TsFile 的过期检查,过期直接删文件,算是一个优化。
(b)数据查询时,过期数据要屏蔽掉。
(c)在数据合并的时候,跳过过期的数据,这一条适用于所有粒度的 TTL,需要考虑的就是数据合并的触发时机。


现阶段:已经支持(1),并且实现了 (a)
第二阶段:(2)和(b)需要同时实现
第三阶段:完善(c)

  • No labels

1 Comment

  1. 更加细粒度的TTL管理,必然会引入删除数据过程中的数据提取、删除、编码、压缩等效率问题。

    除非像InfluxDB那样RP(包含TTL信息)作为顶层目录来组织数据。但也会引入一个问题:改变RP(TTL)后,无法再找到历史数据。

    这个两难问题如何解决呢?