有些生存时间(TTL)已过期的项目并未从我的 Amazon DynamoDB 表中删除。
解决方案
DynamoDB TTL 功能允许您为每个项目设定时间戳,以确定何时不再需要某个项目。在指定时间戳的日期和时间过后不久,DynamoDB 就会从您的表中删除该项目。这不会消耗任何写入吞吐量。TTL 允许您仅保留满足工作负载需求的最新项目,从而减少存储的数据量。TTL 不会产生任何额外费用。在 DynamoDB 表上激活 TTL 时,请为服务确定一个属性名称,以确定项目是否符合过期条件。在表上激活 TTL 后,每个分区的扫描器后台进程会自动持续评估表中项目的过期状态。
以下是删除过期项目耗时可能超预期的一些常见原因:
- 根据表的大小和活动水平,实际删除过期项目的操作可能会有所不同。由于 TTL 是一个后台进程,因此它用于判断项目是否过期和删除项目的处理能力可能会有所不同。
- TTL 通常会在几天内删除过期项目。根据表的大小和活动水平,实际删除过期项目的操作可能会有所不同。TTL 会尽力删除项目,但在某些情况下,删除操作可能需要更长的时间。在删除对象期间,DynamoDB 使用表的后端容量而不是预配置的容量来删除对象。如果有许多删除请求,但后端容量不足以持续删除这些项目,则该过程可能需要更长的时间。
要检查 TTL 是否正常工作,请验证以下条件:
-
请确保您在表上激活 TTL 并且相关设置正确:
-
相关项目必须包含您在表上激活 TTL 时指定的属性。
-
TTL 属性的值必须是 Number 数据类型。
-
TTL 属性的值必须是 Unix 时间格式的时间戳(以秒为单位)。有关更多信息,请参阅维基百科上的 Unix 时间。
-
TTL 属性值必须是过期时间不超过五年的 datetimestamp。
-
只有当有足够的空闲容量时,TTL 进程才会在表上运行,这样这些进程就不会干扰表的操作。如果表或表分区使用了大部分分配的容量,则 TTL 进程可能无法运行。
已过期但尚未删除的项目仍会出现在读取、查询和扫描中。如果您不想让过期的项目出现在结果集中,则必须将其过滤掉。使用筛选表达式,该表达式仅返回“生存时间”到期值大于当前时间(采用 Unix 时间格式)的项目。有关更多信息,请参阅筛选扫描表达式。
相关信息
使用 DynamoDB 生存时间(TTL)使项目过期