TDengine KEEP参数对时间戳写入的限制规则及使用方法咨询
TDengine KEEP参数用法及时间戳范围限制说明
KEEP参数的核心作用
KEEP参数用于定义数据库中数据文件的最长保留天数,达到该时长的历史数据会被系统自动回收清理,无需用户手动执行删除操作,是时序数据生命周期管理的核心配置项。
KEEP参数对写入时间戳的限制规则
TDengine写入数据时会对时间戳做合法性校验,KEEP参数决定了可写入时间范围的左边界,搭配默认的未来时间偏移限制,完整的校验规则如下:
- 可写入的最早时间戳 = 服务器当前时间 - KEEP配置的天数,早于该时间的历史数据会被判定为超出范围,写入失败
- 可写入的最晚时间戳默认 = 服务器当前时间 + 2天,晚于该时间的未来数据默认也会写入失败,该限制可通过建库时的
FUTURE_TS参数自定义调整,单位为天。
对应现象的原因解释
首次建库设置KEEP 10时,执行插入操作的服务器时间约为2021-08-31 10:28:
- 最早可写入时间为2021-08-21 10:28左右,
2021-08-21 10:28:53.521、2021-08-11 10:28:53.521两个时间戳均早于该边界,因此写入报错 - 最晚可写入时间为2021-09-02 10:28左右,
2021-09-20 12:28:53.521远晚于该边界,因此写入报错
将KEEP调整为365天后,最早可写入时间变为2020-08-31左右,两个历史时间戳均落在合法范围内,因此可以正常写入;但未来时间偏移的默认2天限制没有变更,2021-09-20仍然超出最晚可写入范围,所以依然报错。
业务适配建议
如果场景需要写入更远期的未来时间,可在建库时自定义FUTURE_TS参数,示例配置如下:
CREATE DATABASE IF NOT EXISTS db_keep KEEP 365 FUTURE_TS 30 PRECISION 'ms';
以上配置允许写入当前时间前365天到未来30天范围内的时间戳数据。
内容的提问来源于stack exchange,提问作者Ray Shown
相关产品推荐
相关产品推荐

