メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

Time To Live: 仕組み

テーブルで Time To Live を有効にすると、バックグランドジョブによって、期限切れかどうかについて項目の TTL 属性が確認されます。

TTL はエポック時間形式で、現在の時間を、項目の Time To Live 属性に保存されている時間と比較します。属性に保存されているエポック時間の値が現在の時間よりも少ない場合、項目は期限切れとマークされ、その後に削除されます。

注記

エポック時間形式は 1970 年 1 月 1 日 12:00:00 AM UTC からの経過秒数です。

DynamoDB はベストエフォートベースで期限切れの項目を削除して、他のデータオペレーション用のスループットの可用性を確保します。

重要

通常、DynamoDB は期限が切れた項目を期限切れから 48 時間以内に削除します。期限切れの後で項目が実際に削除されるまでの期間は、ワークロードの特性とテーブルのサイズによって異なります。期限が切れたが削除されていない項目は、読み取り、クエリ、およびスキャンで引き続き表示されます。

項目を削除すると、標準の削除オペレーションと同じ、結果整合性のある方法で ローカルセカンダリインデックス および グローバルセカンダリインデックス からすぐに削除されます。

たとえば、ユーザーのセッション履歴を追跡する、SessionData という名前のテーブルを考えてみます。SessionData の各項目はパーティションキー (UserName) およびソートキー (SessionId) によって識別されます。さらに、UserNameSessionIdCreationTimeExpirationTime などの属性によってセッション情報が追跡されます。

次の図は、テーブル内の項目の構成を示しています。ExpirationTime 属性は Time To Live (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 PM UTC に設定され、ExpirationTime は 2 時間後の 2016 年 4 月 29 日 (金) 2:00 PM UTC に設定されます。現在の時刻 (エポック形式) が ExpirationTime 属性の時間よりも大きくなると、項目が期限切れになります。この場合、キー { Username: user1, SessionId: 74686572652773 } を持つ項目は 2:00 PM (1461938400) を経過すると期限切れになります。

注記

有効期限と削除時間の間の潜在的な遅延により、項目のクエリを実行すると、期限切れの項目が取得される場合があります。読み取りリクエストを発行する際に期限切れの項目を表示する必要がない場合は、定義した有効期限属性を使用して、期限切れの項目を除外します。

これを行うには、Time To Live 有効期限の値が現在の時間 (エポック形式) よりも大きい場合にのみ項目を返すフィルタ式を使用します。詳細については、「クエリのフィルタ式」および「Scan のフィルタ式」を参照してください。