引言
IoTDB 支持在设备(device)级别设置数据保留时间(TTL),系统会根据设定的 TTL 自动清理过期数据,从而有效管理存储空间并确保查询性能。TTL 默认采用毫秒计时,数据过期后将不可查询且禁止写入,但实际物理删除会在数据压缩时完成。需要注意:修改 TTL 设置可能导致数据可见性短暂波动,若缩短或取消 TTL 设置,原先因 TTL 限制而不可见的数据可能会重新显示。
TTL 设置为毫秒,不受配置文件时间精度影响 TTL 变更可能影响数据的可查询性 系统最终会移除过期数据,但存在延迟 TTL 判断数据是否过期依据的是数据点时间,非写入时间 系统最多支持设置 1000 条 TTL 规则,达到上限需先删除部分规则才能设置新规则
一、TTL 路径规则与优先级
1.1 路径规则
设置的路径 path 只支持前缀路径(即路径中间不能带 * ,且必须以 ** 结尾),该路径会匹配到设备,也允许用户指定不带星的 path 为具体的 database 或 device,当 path 不带 * 时,会检查是否匹配到 database,若匹配到 database,则会同时设置 path 和 path.**。 注意:设备 TTL 设置不会对元数据的存在性进行校验,即允许对一条不存在的设备设置 TTL。
合格的 path:root.** root.db.** root.db.group1.** root.db root.db.group1.d1 不合格的 path:root..db root.**.db. root.db.*
1.2 智能路径扩展与优先级
当一个设备适用多条 TTL 规则时,优先适用较精确和较长的规则。例如对于设备'root.bj.hd.dist001.turbine001'来说,规则'root.bj.hd.dist001.turbine001'比'root.bj.hd.dist001.'优先,而规则'root.bj.hd.dist001.'比'root.bj.hd.**'优先。
为兼容历史版本,IoTDB 实现智能路径扩展机制。当用户输入 SET TTL TO root.sg 360000 时,系统自动转换。
SET TTL TO root.sg.** 360000;
系统对路径合法性进行严格校验,以下为合法路径示例:
root.** root.db.** root.db.group1.** root.db.group1.d1
非法路径示例:
root.*.db -路径中间包含非法星号
root.**.db -路径结尾前存在星号
root.db.*-路径结尾星号前无字符
规则数量也有限制,IoTDB 系统最多支持 1000 条 TTL 规则。当达到数量上限的时候,需要先删除部分规则才能设置新规则。需要限制确保系统性能不受过量规则影响。
二、TTL 设置操作
set ttl 操作可以理解为设置一条 TTL 规则,比如 set ttl to root.sg.group1.** 就相当于对所有可以匹配到该路径模式的设备挂载 ttl。unset ttl 操作表示对相应路径模式卸载 TTL,若不存在对应 TTL,则不做任何事。若想把 TTL 调成无限大,则可以使用 INF 关键字。
语法
设置 TTL 的标准语法:
SET TTL TO<pathPattern><ttlValue>;
示例:
set ttl to pathPattern ;


