DynamoDB TTL 轉換器
將 DynamoDB TTL 值解碼為可讀日期,或把日期轉換成要儲存的 epoch 秒數 — 當某個值看起來像毫秒時會提出警告。
時間以 UTC 顯示。TTL 刪除會在到期後約 48 小時內發生。
DynamoDB TTL 的運作方式
Time to Live (TTL) 讓 DynamoDB 在不額外收費的情況下自動讓項目過期。你指定一個 Number 屬性作為 TTL 屬性;其值是以秒為單位的 Unix epoch 時間戳記。背景程序會將每個項目的 TTL 與目前時間比較,並刪除時間已過去的項目 — 通常在 48 小時內,以盡力而為的方式進行。
由於該值是秒,毫秒時間戳記是頭號的 TTL 錯誤:來自 JavaScript Date.now() 的值會大上 1000 倍,因此項目的到期時間會落在遙遠的未來而永遠不會被移除。本轉換器會自動偵測單位並標示這種情況,讓你能在上線前抓到它。
讓項目自動過期是為表格估算大小的一環 — DynamoDB TTL 指南 涵蓋如何啟用它、回填值,以及從讀取中 filter 掉過期項目。
常見問題
DynamoDB TTL 屬性使用什麼格式?
DynamoDB Time to Live (TTL) 屬性必須是一個 Number,其中保存以秒表示的 Unix epoch 時間戳記 — 也就是自 1970-01-01 UTC 起的秒數。DynamoDB 會將該值與目前時間比較,一旦時間已過去就刪除該項目。它必須是秒,而非毫秒,也不是 ISO 日期字串。
為什麼我的 DynamoDB TTL 沒有刪除項目?
最常見的原因是儲存了毫秒而非秒。像 1700000000000 這樣的毫秒值若當作秒來讀取,會是數萬年後的日期,因此項目永遠不會過期。請除以 1000。此外,請確認表格已啟用 TTL 並指向正確的屬性 — 該屬性沒有值的項目絕不會過期。
在 TTL 時間之後,DynamoDB 要多久才會刪除項目?
DynamoDB 通常會在到期時間後的幾天內刪除過期項目 — AWS 記載的盡力而為時間範圍最長為 48 小時,在負載下會更久。在背景程序移除它們之前,過期項目仍可能出現在讀取、Scan 與 Query 中,因此若你需要立即隱藏它們,請對 TTL 屬性進行 filter。
TTL 時間必須是在未來嗎?
不必。如果你寫入一個已經是過去的 TTL 值,該項目會立即符合刪除資格,並在下一次背景清理時被移除。把 TTL 設為目前的 epoch 秒數,是為項目安排近期刪除的常見做法。