Amazon Web Services ブログ

新機能 – TTL(Time to Live)機能を利用したDynamoDBアイテムの管理について

by AWS Japan Staff | on | in Amazon DynamoDB |

AWSを利用頂いている多くのお客様にDynamoDBは使用されています。速度と柔軟性がその理由で、Ad Tech( リファレンスアーキテクチャ )、Gaming( リファレンスアーキテクチャ )、IoT( リファレンスアーキテクチャ )、そして一貫した一桁のミリ秒のレイテンシを実現しアプリケーションを構築されています。また、DynamoDBはフルマネージドのデータベースで、テラバイトサイズのテーブルに対して毎秒何百万というリクエストを処理することができます。
多くのDynamoDBユーザーは、利用する時間が限られている、または時間の経過とともにアクセス頻度が低くなるデータを格納しています。 直近のログイン、試用版のサブスクリプション、アプリケーションのメトリックなどへの利用がそうです。 他にも保管できる期間に関する規制または契約上の制限の対象となるデータを保管します。 これまで、これらを実現するには独自の時間ベースのデータ管理を実装していました。 大規模なシステムでは、DynamoDBアイテムのスキャン、期間を管理するための日付属性の確認、および不要になったアイテムの削除要求を行う為のAmazon Elastic Compute Cloud(EC2)インスタンスを構築するなどの必要があり、これによりアプリケーションのコストと複雑さが増加していました。

新しいTime to Live(TTL)管理 について
この普及した重要なユースケースを合理化するため、新しくTTL(Time to Live)機能の提供を開始しました。 アイテムの有効期限を属性で指定する事により、テーブル単位でこの機能を有効にすることができます。
属性が指定され、TTL管理が有効になると(1回のAPI呼び出しで両方の操作が処理されます)、DynamoDBは期限切れのアイテムを見つけて削除します。 この処理は、自動的かつバックグラウンドで行われ、テーブルへの読み取りまたは書き込みトラフィックには影響しません。

DynamoDBストリームを使用することで(詳細は、「 DynamoDBアップデート – トリガ(Streams + Lambda)+クロスリージョンレプリケーションアプリケーション」を参照)。実際の削除を処理またはアーカイブすることができます。 ストリーム内の他の更新レコードと同様に、削除は24時間単位で行われます。 AWS LambdaおよびDynamoDB Triggersを使用して、期限切れのアイテムをコールドストレージに移動したり、ログに記録したり、他のテーブルを更新したりすることができます。

テーブルのTTLを有効にして、必要な属性を指定する方法は次のとおりです。

指定する属性はDynamoDBのNumber型かつ、 UNIX時間でTTLの指定を行います。
上のスクリーンショットからわかるように、DynamoDB Streamsを有効にすることもできます。また、TTLを有効にすると削除されるアイテムのプレビューを見ることもできます。

また、コードからUpdateTimeToLive関数を呼び出しテーブルにTTLの有効化設定することも、 AWSコマンドラインインターフェイス(CLI)からupdate-time-to-liveコマンドを使用しテーブルでTTLを有効化設定することもできます。

TTL の利用事例(TUNE様)

 AWSのお客様であるTUNEは既に、この機能をHasOffers製品の一部として活用しています。

HasOffersは、マーケティングキャンペーンの効果を分析し、大量の広告エンゲージメントデータをプロセスに保存するのに役立ちます。 キャンペーンの顧客定義の時間枠が過ぎると、データは不要になり、削除することができます。 TTL機能をTUNEで使用できるようにする前は手動で期限切れアイテムを識別し、古いデータを削除しました。 これは労力と激しく計算を必要とし、テーブルのプロビジョニングされたスループットの一部も消費する必要がありました。

今は各アイテムの有効期限を設定し、あとはDynamoDBに任せます。 失効したデータは自動的に消え、使用可能なスループットには影響しません。 その結果、TUNEは85テラバイトの古いデータを削除することができ、年間200,000ドル以上のコストを削減し、アプリケーションロジックも簡素化しました。

知っておくべきこと
あなたのアプリケーションにTTLを使用することを検討する際、留意すべきことがいくつかあります。

TTL属性 – TTL属性は索引付けまたは投影することができますが、JSONドキュメントの要素にすることはできません。 前述したように、Numberデータ型を持つ必要があります。 他の属性と同様に、IAMを使用してこの属性へのアクセスを制限することができます。 指定されたTTL属性を持たない項目は削除対象とはみなされません。 誤ったTTL値による誤った削除を避けるため、5年以上経過しているように見えるアイテムは削除されません。

テーブル – 新しいテーブルまたは既存のテーブルにTTLを適用できます。 テーブルのTTLを有効にするプロセスには最大1時間かかります。一度に1つのテーブルへの変更しか行うことはできません。

削除のバックグラウンド処理について – スキャンと削除はバックグラウンドで行われ、プロビジョニングされたスループットにはカウントされません。 削除時間は、期限切れアイテムの数と性質に応じて異なります。 期限切れの後、実際に削除が行われる前にはアイテムはまだテーブルに残り 、 読み取りとスキャンに表示されます。

インデックス – アイテムは、ローカルのセカンダリインデックスからすぐに削除され、グローバルセカンダリインデックスからは、最終的に一貫した方法で削除されます。

価格 – 内部スキャン操作、削除操作には費用は掛かりません。 アイテムが実際に削除されるまではストレージの支払いが発生します。

今すぐ利用可能
この機能は現在利用可能で、今すぐ使用することができます! 詳細は、「DynamoDBデベロッパーガイド」の「 TTL (訳注:翻訳時点では英語版のみです)」を参照してください。

 

Jeff; (翻訳は成田が担当しました。原文はこちら)