Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

生存时间:如何使用

当在表中启用 生存时间 时,后台作业检查项目的 TTL 属性,了解其是否已过期。

TTL 将纪元时间格式的当前时间与项目 生存时间 属性中存储的时间进行比较。如果属性中存储的纪元时间值小于当前时间,则项目标记为已过期并在之后被删除。

注意

纪元时间格式为自 1970 年 1 月 1 日午夜 12:00:00 UTC 以来的秒数。

DynamoDB 会尽可能删除已过期的项目,以确保其他数据操作的吞吐量的可用性。

重要

DynamoDB 通常在过期 48 小时内删除已过期的项目。项目在过期后真正被删除的确切时间取决于工作负载的性质和表的大小。读取、查询和扫描中仍会显示已过期但尚未删除的项目。

项目被删除时,将立即从所有 本地二级索引 和 全局二级索引 中移除,与标准删除操作得到的最终结果一致。

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

下表显示了此表中项目的组织方式,ExpirationTime 属性设为 生存时间 (TTL) 属性。 (并未显示所有属性)

SessionData

UserName SessionId CreationTime ExpirationTime (TTL) SessionInfo
user1 74686572652773 1461931200 1461938400 {JSON 文档} ...
user2 6e6f7468696e67 1461920400 1461927600 {JSON 文档} ...
user3 746f2073656520 1461922200 1461929400 {JSON 文档} ...
user4 68657265212121 1461925380 1461932580 {JSON 文档}
user5 6e6572642e2e2e 1461920400 1461927600 {JSON 文档} ...
... ... ... ... ...

在本示例中,每个项目在创建时拥有一个 ExpirationTime 属性值。考虑第一个记录:

SessionData

UserName SessionId CreationTime ExpirationTime (TTL) SessionInfo
user1 74686572652773 1461931200 1461938400 {JSON 文档} ...

在本示例中,项目的 CreationTime 设为 2016 年 4 月 29 日 (星期五) 中午 12:00 UTC,ExpirationTime 设为 2 小时之后,即 2016 年 4 月 29 日 (星期五) 下午 2:00 UTC。该项目将在纪元格式的当前时间大于 ExpirationTime 属性中的时间时过期。在这种情况下,带有键值 { Username: user1, SessionId: 74686572652773 } 的项目将在下午 2:00 (1461938400) 后过期。

注意

由于过期时间和删除时间之间的潜在延迟,您在查询项目时可能会得到已过期的项目。如果您在发出读取请求时不需要查看已过期的项目,应使用已定义的过期属性筛选出已过期的项目。

此功能可通过使用筛选表达式实现,它可以只返回 生存时间 过期值大于纪元格式的当前时间的项目。有关更多信息,请参阅 Query 的筛选表达式Scan 的筛选表达式