为什么生存时间已过期的项目没有从我的 Amazon DynamoDB 表中删除?

上次更新日期:2022 年 8 月 26 日

有些生存时间(TTL)已过期的项目尚未从我的 Amazon DynamoDB 表中删除。

解决方法

DynamoDB TTL 功能允许您定义每个项目的时间戳,以确定在什么时候不再需要某项目。指定时间戳的日期和时间过后不久,DynamoDB 会从您的表中删除该项目,而不会使用任何写入吞吐量。TTL 是免费提供的,它通过仅保留满足工作负载需求的最新项目来减少存储的数据量。在 DynamoDB 表上激活 TTL 时,您必须确定服务在确定项目是否符合过期条件时要查找的特定属性名称。在表上激活 TTL 后,按分区运行的扫描程序后台进程会自动且持续评估表中项目的过期状态。

删除已过期项目需要较长时间的一些常见原因如下:

  • 已过期项目的实际删除操作可能因表的大小和活动级别而异。由于 TTL 是一个后台进程,因此使用 TTL 判定项目过期并将其删除的容量的性质是可变的。
  • TTL 进程通常会在项目过期后 48 小时内将其删除。但是,此时间表不属于 SLA。TTL 删除是尽最大努力完成的,在某些情况下,删除可能需要更长的时间。使用 TTL 删除对象期间,DynamoDB 使用表的后端容量来删除对象,而不是预置的容量。如果有大量删除请求,但后端容量不足以连续删除这些项目,则删除过程可能需要更长的时间。

要检查 TTL 是否正常工作,请执行以下操作:

  • 请确保您在表上激活了 TTL,并确保相关设置正确。
    • 该项目必须包含您在表上激活 TTL 时指定的属性。
    • TTL 属性的值必须具有数据类型 Number(编号)。
    • TTL 属性的值必须是新纪元时间格式且以为单位的时间戳。
    • TTL 属性值必须为 datetimestamp,并且其过期时间不超过五年。
  • 只有当有足够的备用容量时,TTL 进程才会在表上运行,以免这些流程干扰表操作。如果表或表分区使用了大部分的已分配容量,那么 TTL 进程可能无法运行,原因是备用容量不足。

已过期但尚未被 TTL 删除的项目仍会显示在读取、查询和扫描中。如果不希望结果集中出现已过期的项目,则必须将其筛选出去。为此,请使用仅返回“生存时间”过期值大于当前时间(新纪元时间格式)项目的筛选器表达式。有关详细信息,请参阅用于扫描的筛选表达式


这篇文章对您有帮助吗?


您是否需要账单或技术支持?