免费工具

DynamoDB TTL 转换器

将 DynamoDB TTL 值解码为可读日期,或将日期转换为要存储的 epoch 秒 — 当某个值看起来像毫秒时会给出警告。

Unix 时间戳

DynamoDB TTL 属性以秒为单位存储 Unix epoch 时间。粘贴一个值以将其解码,或在下方选择一个日期以获得要存储的数字。

UTC 日期与时间

Tue, 14 Nov 2023 22:13:20 GMT

Epoch 秒(TTL 值)1700000000
Epoch 毫秒1700000000000
ISO 8601 (UTC)2023-11-14T22:13:20.000Z

时间以 UTC 显示。TTL 删除会在过期后约 48 小时内发生。

DynamoDB TTL 的工作原理

存活时间(TTL)让 DynamoDB 能够无额外成本地自动使项过期。你指定一个 Number 属性作为 TTL 属性;其值是一个以秒为单位的 Unix epoch 时间戳。后台进程会将每个项的 TTL 与当前时间比较,并删除时间已过去的项 — 通常在 48 小时内,以尽力而为的方式进行。

由于该值以秒为单位,毫秒时间戳是头号 TTL 缺陷:来自 JavaScript 的 Date.now() 的值会大出 1000×,因此该项的过期时间落在遥远的未来,永远不会被移除。本转换器会自动检测单位并标记这种情况,让你在上线前就能发现它。

自动使项过期只是规划表规模的一部分 — DynamoDB TTL 指南 介绍了如何启用它、回填值,以及从读取中过滤过期项。

常见问题

DynamoDB TTL 属性使用什么格式?

DynamoDB 的存活时间(TTL)属性必须是一个 Number,其中保存以秒表示的 Unix epoch 时间戳 — 即自 1970-01-01 UTC 以来的秒数。DynamoDB 会将该值与当前时间比较,一旦其位于过去,就删除该项。它必须是秒,而不是毫秒,也不是 ISO 日期字符串。

为什么我的 DynamoDB TTL 没有删除项?

最常见的原因是存储了毫秒而不是秒。像 1700000000000 这样的毫秒值若按秒解读,会是数万年后的一个日期,因此该项永不过期。请除以 1000。此外,请确认表上已启用 TTL 并指向正确的属性 — 在该属性中没有值的项永远不会过期。

在 TTL 时间之后多久,DynamoDB 才会删除一个项?

DynamoDB 通常会在过期时间后的几天内删除过期项 — AWS 记载了一个最长可达 48 小时的尽力而为窗口,在负载较高时会更久。在后台进程移除它们之前,过期项仍可能出现在读取、Scan 和 Query 中,因此如果你需要立即隐藏它们,请对 TTL 属性进行筛选。

TTL 时间必须是将来的时间吗?

不必。如果你写入的 TTL 值已经处于过去,该项会立即符合删除条件,并在下一次后台清扫时被移除。将 TTL 设为当前的 epoch 秒,是安排一个项在近期删除的常见做法。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。