使用 DynamoDB 生存时间 (TTTTL)
使用 TTL 时,大部分艰巨的工作都是由 DynamoDB 代表您在幕后完成的。但是,您应该知道一些注意事项,以帮助您顺利地进行实施。
设置项目的 TTL 属性的格式
在表上启用 TTL 时,DynamoDB 要求您标识此服务在确定项目是否符合过期条件时将查找的特定属性名称。此外,进一步的要求可确保后台 TTL 进程使用 TTL 属性的值。要让项目符合通过 TTL 过期的资格:
-
项目必须包含在表上启用 TTL 时指定的属性。例如,如果您为表指定将属性名称用作
expdate
TTL 属性,但项目没有具有该名称的属性,则 TTL 进程将忽略该项目。 -
TTL 属性的值必须是顶级
Number
数据类型。例如,如果为表指定使用属性名称expdate
作为 TTL 属性,但项目的属性是String
数据类型,则 TTL 进程将忽略该项目。 -
TL 属性的值必须是 Unix 时代时间格式
,并以秒为单位。如果您使用任何其他格式,TTL 进程将忽略该项目。例如,如果您将此属性的值设置为 1645119622,即,2022 年 2 月 17 日星期四 17:40:22(格林威治标准时间),则该项目将在此时间之后过期。如需有关设置纪元时间戳格式的帮助,您可以使用纪元转换器 之类的第三方工具来获取可视 Web 表单。 -
TTL 属性值必须是过期时间不超过过去五年的日期时间戳。例如,如果您将此属性的值设置为 1171734022,即,2007 年 2 月 17 日 17:40:22(格林威治标准时间)和五年以上。结果是,TTL 进程不会使该项目过期。
使用说明
使用 TTL 时,请注意以下事项:
-
启用、禁用或更改表上的 TTL 设置可能需要大约一个小时才能传播设置,并允许执行任何进一步的 TTL 相关操作。
-
您无法重新配置 TTL 以查找其他属性。您必须先禁用 TTL,然后再使用新属性重新启用 TTL。
-
使用 Amazon CloudFormation 时,您可以在创建 DynamoDB 表时启用 TTL。有关更多信息,请参阅 Amazon CloudFormation 用户指南。
-
您可以使用 Amazon Identity and Access Management (IAM) 策略来防止对项目或 TTL 配置的 TTL 属性进行未经授权的更新。如果您的现有 IAM 策略仅允许访问指定的操作,请确保更新您的策略,以允许需要在表中启用或禁用 TTL 的角色执行
dynamodb:UpdateTimeToLive
。有关更多信息,请参阅为 Amazon DynamoDB 使用基于身份的策略(IAM 策略)。 -
考虑是否需要通过 Amazon DynamoDB Streams 对已删除项目执行任何后期处理,例如,将项目存档到 Amazon S3 数据湖。TTL 删除的流记录在一个流中显得特别,因为它们被标记为系统删除而非正常删除。您可以使用 Amazon Lambda 事件过滤器和 Amazon Lambda 函数的组合来筛选出这些系统删除,并对它们做一些后处理。有关添加到流记录的更多信息,请参阅 Amazon DynamoDB Streams 和生存时间。
-
如果需要考虑数据恢复问题,我们建议您备份表。
-
要进行完全托管的表备份,请使用 DynamoDB 按需备份或具有时间点恢复的连续备份。
-
要进行 24 小时恢复时段备份,可以使用 Amazon DynamoDB Streams。有关详细信息,请参阅 Amazon DynamoDB Streams 和生存时间。
-
TTL 问题故障排除
如果 DynamoDB TTL 无法正常工作,请检查以下内容:
-
确认您已在表中启用 TTL,并且将为 TTL 选定的属性名称设置为代码正在写入项目的内容。您可以在 DynamoDB 控制台上的表的 Overview (概述) 选项卡上确认此信息。
-
查看 DynamoDB 控制台的 Metrics (指标) 选项卡上的 Amazon CloudWatch 指标,以确认 TTL 正在按照您的预期删除项目。
-
确认 TTL 属性值的格式是否正确。有关更多信息,请参阅 设置项目的 TTL 属性的格式。