关于DynamoDB设置TTL字段并添加Unix时间戳后记录未自动删除的问题咨询
我之前也碰到过一模一样的问题,折腾了好半天才找到根源,给你列几个最容易踩坑的点,你可以逐一排查:
TTL字段类型错误:DynamoDB要求TTL字段必须是Number类型(整数),绝对不能是字符串或者其他类型。哪怕你存的数值是正确的Unix时间戳,只要类型不对,系统就不会识别为TTL字段。你可以通过控制台查看字段类型,或者用命令行工具验证:
aws dynamodb get-item --table-name your-table-name --key '{"your-primary-key": {"S": "key-value"}}'看返回结果里TTL字段的类型是不是
N(Number)。未正确启用TTL功能:别以为只是给条目加了时间戳就完事了,你得确保在表的配置里开启了TTL并指定了正确的字段名。去控制台的表详情页,切换到「TTL」标签,确认状态是「Enabled」,并且字段名和你设置的完全一致(大小写敏感!)。
清理延迟导致还未删除:DynamoDB的TTL清理不是实时触发的,它是后台批量执行的任务,通常会在记录过期后的48小时内完成删除,但如果集群负载较高,可能会延迟更久。如果你的记录刚过期没几天,可以先耐心等一等,超过48小时还没删再排查其他原因。
时间戳格式错误:Unix时间戳是秒级的,不是毫秒级的!很多人不小心把毫秒时间戳存进去,这样对应的过期时间其实是几十年后,自然不会被删除。你可以把你的时间戳复制到转换工具里,看看对应的日期是不是真的已经过去了。
GSI同步延迟(如果有使用GSI):如果你的表配置了全局二级索引,主表的记录被删除后,GSI的清理可能会有额外的延迟。不过如果主表的记录还存在,那问题肯定出在主表的TTL配置上,和GSI无关。
先从前面几个最常见的点开始查,尤其是字段类型和时间戳格式,这两个是我见过最多人踩的坑。
内容的提问来源于stack exchange,提问作者Rajarshi Das

