Azure Cosmos DBで既存コンテナにTTLを設定する
Azure Cosmos DB には Time-to-Live(TTL)の機能があります。
これは Cosmos DB に保存されているアイテムに有効期限を設け、一定時間が経過したアイテムを自動で削除する機能です。
既存のアイテムが存在するコンテナへの TTL の設定
今回は、既存のアイテムが存在する状態でコンテナに TTL の設定を追加した場合に、既存のアイテムがどのように処理されるかを試してみようと思います。
アイテムの作成
TTL の設定をする前にコンテナにアイテムを作成しておきます。
画像のように 3 つのアイテムがある状態にしておきます。
TTL の設定
対象のコンテナに TTL を設定します。
今回は 10 秒とします。
TTL 設定後のアイテムの確認
もともと投入されていたアイテムは作成時から 10 秒が経過しているため、既に削除されています。
MongoDB API での TTL の設定
おまけ的な要素ですが、RU ベースの MongoDB API でも TTL が利用できるので、こちらでも試してみようと思います。
ドキュメントの作成
こちらでも同様に TTL の設定をする前にコレクションにドキュメントを作成しておきます。
TTL の設定
MongoDB API の場合は、Azure Portal の GUI からではなく、Mongo Shell を介して操作する必要があります。
以下のコマンドで同様に 10 秒間でコレクション単位に TTL を設定します。
db['test-container'].createIndex({ _ts: 1 }, { expireAfterSeconds: 10 });
TTL 設定後のドキュメントの確認
MongoDB API の場合でも、もともと投入されていたアイテムは作成時から 10 秒が経過しているため、既に削除されています。
まとめ
Azure Cosmos DB の Time-to-Live(TTL)機能を利用することで、一定期間が経過したアイテムを自動で削除できることを確認しました。
TTL 機能では_ts
という各アイテムが更新された時刻の情報から削除対象のアイテムを判断しています。
そのため、既存のアイテムが存在するコンテナに対しても後から TTL を有効にすることで、有効期限切れのアイテムを自動で削除します。
TTL を上手に使うことで、バッチジョブなどに頼らずに一定期間が経過したアイテムをまとめて削除することができたりするので、知っておくと便利な場面もあるかと思います。
Discussion