工作原理:DynamoDB 生存时间(TTL) - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

工作原理:DynamoDB 生存时间(TTL)

在 DynamoDB 表上启用 TTL 时,您必须标识在确定项目是否符合过期条件时服务将查找的特定属性名称。在表上启用 TTL 后,每个分区扫描程序后台进程都会自动持续评估表中项目的过期状态。

Scanner 后台进程将当前时间(采用Unix 纪元时间格式)与项目的用户定义的属性中存储的值进行比较。如果属性是 Number 数据类型,属性的值是 Unix 纪元时间格式(以 为单位)的时间戳,并且时间戳值早于当前时间但不超过当前时间的五年(以避免因 TTL 值格式不正确而可能导致意外删除),则项目将设置为过期。有关设置 TTL 属性格式的详细信息,请参阅设置项目的 TTL 属性的格式。第二个后台进程将扫描过期项目并将其删除。这两个进程都在后台自动进行,不会影响表的读取或写入流量,也不会产生费用成本。

从表中删除项目时,会同时执行两项后台操作:

  • 从任何本地二级索引和全局二级索引中删除项目的方式与执行 DeleteItem 操作的方式相同。

  • 每个项目的删除操作都会进入 DynamoDB 流,但会标记为系统删除,而不是常规删除。有关如何使用此系统删除的更多信息,请参阅流和生存时间DynamoDB。

重要
  • 根据表的大小和活动性级别,过期项目的实际删除操作可能会有所不同。由于 TTL 注定是一个后台流程,因此,用于通过 TTL 过期和删除项目的容量实质上是可变的(但是免费的)。TTL 通常在过期 48 小时内删除已过期的项目。

  • 已过期但尚未被 TTL 删除的项目仍会出现在读取、查询和扫描中。如果您不希望结果集中包含过期项目,必须将它们筛选出来。为此,请使用筛选表达式仅返回 TTL 过期值大于纪元格式的当前时间的项目。有关更多信息,请参阅Scan 的筛选表达式

  • 已过期但尚未删除的项目仍可更新,并且将保留对更改或删除过期属性的成功更新。

您可以在 CloudWatch 指标选项卡上监控表的 TTL 速率,并查看删除项目的时间和速率。


            显示 TTL 和 CloudWatch 的控制台屏幕截图。

生存时间 示例

例如,假设一个名为 SessionData 的表可跟踪用户的会话历史记录。SessionData 中的每个项目都由分区键 (UserName) 和排序键 (SessionId) 标识。UserNameSessionIdCreationTimeExpirationTime 等其他属性跟踪会话信息。ExpirationTime 属性设置为表的 TTL 属性(未显示每个项目的所有属性)。

SessionData
UserName SessionId CreationTime ExpirationTime (TTL) SessionInfo
user1 74686572652773 1571820360 1571827560 {JSON 文档} ...
user2 6e6f7468696e67 1571820180 1571827380 {JSON 文档} ...
user3 746f2073656520 1571820923 1571828123 {JSON 文档} ...
user4 68657265212121 1571820683 1571827883 {JSON 文档}
user5 6e6572642e2e2e 1571820743 1571831543 {JSON 文档} ...
... ... ... ... ...

在本示例中,每个项目在创建时拥有一个 ExpirationTime 属性值。请考虑以下表项目。

SessionData
UserName SessionId CreationTime ExpirationTime (TTL) SessionInfo
user1 74686572652773 1571820360 1571827560 {JSON 文档} ...

在此示例中,项目 CreationTime 设置为协调世界时 (UTC) 2019 年 10 月 23 日(星期三)上午 08:46,ExpirationTime 设置为 UTC 2019 年 10 月 23 日(星期三)上午 10:46 后 2 小时。该项目将在纪元格式的当前时间大于 ExpirationTime 属性中的时间时过期。在这种情况下,键为 { Username: user1, SessionId: 74686572652773} 的项目将在上午 10:46 (1571827560 过期。