TTL ポリシーでデータ保持を管理する

このページでは、Google Cloud コンソールと Google Cloud CLI を使用して、有効期間(TTL)ポリシーを構成する方法について説明します。このページを読む前に、Firestore データモデルについて理解しておく必要があります。

有効期間の概要

有効期間(TTL)ポリシーを使用して、データベースから古いデータを自動的に削除します。TTL ポリシーは、特定のフィールドを、特定のコレクション グループ内のドキュメントの有効期限として指定します。TTL を使用すると、古いデータをクリーンアップすることでストレージ コストを削減できます。

制限と制約

  • TTL フィールドとして指定できるのは、1 つのコレクション グループにつき 1 つのフィールドのみです。
  • 合計で 200 個のフィールド レベルの構成が可能です。1 つのフィールド構成に、同じフィールドの構成を複数含めることができます。たとえば、単一フィールド インデックス除外と、同じフィールドに対する TTL ポリシーは、上限に対して 1 つのフィールド構成としてカウントされます。

公開プレビューの制限

TTL の公開プレビューには、次の制限もあります。

  • 課金: TTL の削除は、公開プレビュー中は無料です。Google Cloud は、一般提供時に TTL の削除についてお客様に料金を請求する権利を有します。

  • 本番環境ワークロードには適していません: 本番環境データベース内で公開プレビュー機能を使用することはおすすめしません。

TTL の削除

TTL による削除の、次の主な動作に注意してください。

  • TTL による削除は短時間のプロセスではありません。TTL プロセスにより実際に削除されるまで、期限切れのドキュメントはクエリとルックアップ リクエストに引き続き表示されます。TTL では、削除の総所有コストを削減できるというメリットは、削除の適時性との引き換えとなります。

  • 既存のコレクション グループに TTL ポリシーを適用すると、新しい TTL ポリシーに従って期限切れとなった、すべてのデータが一括削除されます。この一括削除もまた、短時間のプロセスではありません。

  • TTL では、有効期限のタイムスタンプと同じ順序でドキュメントが削除されるとは限りません。

  • 削除はトランザクション的に行われるわけではありません。有効期限が同じドキュメントが同時に削除されるとは限りません。この動作が必要な場合は、クライアント ライブラリを使用して削除を行います。

  • TTL は他のデータベース アクティビティへの影響を最小限にするように設計されています。TTL による削除は、それよりも低い優先度で処理されます。また、TTL による削除が原因のトラフィックの急増を抑制するための戦略も実施されています。

  • TTL で削除を行うと、すべてのアクティブなスナップショット リスナーが呼び出され、Cloud Functions Firestore トリガーがトリガーされます。

TTL フィールドとインデックス

TTL フィールドは、インデックス付きにすることも、インデックスなしにすることもできます。ただし、TTL フィールドはタイムスタンプであるため、このフィールドをインデックス付きにすると、トラフィック レートが高い場合にパフォーマンスに影響することがあります。タイムスタンプ フィールドをインデックス付きにすると、ホットスポットが発生する可能性があり、これはベスト プラクティスに反します。ホットスポットは、狭いドキュメント範囲に対する高頻度の読み取り、書き込み、削除を指します。

デフォルトでは、Cloud Firestore はすべてのフィールドに対して単一のフィールド インデックスを作成します。単一のフィールド インデックスの除外を作成して、TTL フィールドのインデックスを無効にできます。

権限

TTL ポリシーを構成するプリンシパルには、プロジェクトで次の権限が必要です。

  • TTL ポリシーを表示するには、datastore.indexes.list 権限と datastore.indexes.get 権限が必要です。
  • TTL ポリシーを変更するには、datastore.indexes.update 権限が必要です。
  • TTL オペレーションのステータスを確認するには、datastore.operations.listdatastore.operations.get が必要です。

これらの権限を割り当てるロールについては、Firestore の Identity and Access Management のロールをご覧ください。

始める前に

gcloud CLI を使用して TTL ポリシーを管理する前に、gcloud components update コマンドを使用して、コンポーネントを利用可能な最新バージョンに更新します。

gcloud components update

TTL ポリシーの作成

TTL ポリシーを作成するときは、コレクション グループ内のドキュメントの有効期限としてドキュメント フィールドを指定します。

TTL では、指定したフィールドを使用して削除対象のドキュメントが識別されます。この TTL フィールドは Date and time 型にする必要があります。すでに存在するフィールドを選択することも、後で追加するフィールドを指定することもできます。TTL フィールドの値は、将来、現在、過去の時刻のいずれかにできます。値が過去の時刻であれば、ドキュメントはすぐに削除できます。

たとえば、expireAt フィールドで TTL ポリシーを作成し、それを既存のドキュメントに追加します。

TTL ポリシーを作成する手順は次のとおりです。

Google Cloud コンソール

  1. Google Cloud コンソールの [Firestore の有効期間] ページに移動します。

    [有効期間] ページに移動

  2. [Create Policy] をクリックします。

  3. コレクション グループ名とタイムスタンプ フィールド名を入力します。

  4. [作成] をクリックします。

コンソールが [有効期間] ページに戻ります。オペレーションが正常に開始されると、TTL ポリシー テーブルのページにエントリが追加されます。失敗すると、ページにエラー メッセージが表示されます。

gcloud

firestore fields ttls update コマンドを使用して、TTL ポリシーを構成します。--async フラグを追加すると、gcloud CLI はオペレーションの完了を待機しません。

gcloud beta firestore fields ttl update ttl_field --collection-group=collection_group_name --enable-ttl

空のデータベースであっても、TTL ポリシーを有効にするために 10 分以上かかることがあります。オペレーションを開始すると、ターミナルを閉じてもオペレーションはキャンセルされません。

TTL ポリシーの表示

TTL ポリシーとそのステータスを確認する手順は次のとおりです。

Google Cloud コンソール

Google Cloud コンソールの [Firestore の有効期間] ページに移動します。

[有効期間] ページに移動

コンソールには、データベースの TTL ポリシーが表示され、各ポリシーのステータスも含まれています。

gcloud

firestore fields ttls list コマンドを使用して、TTL ポリシーを構成します。次のコマンドを実行すると、すべての TTL ポリシーが一覧表示されます。

gcloud beta firestore fields ttl list

特定のコレクション グループの TTL ポリシーを一覧表示するには、次のコマンドを使用します。

gcloud beta firestore fields ttl list  --collection-group=collection_group_name

オペレーションの詳細の表示

ステータスが CREATING の TTL ポリシーの詳細は、gcloud CLI を使用して確認できます。

operations list コマンドを使用して、実行中のオペレーションと最近完了したすべてのオペレーションを表示します。

gcloud firestore operations list

レスポンスには、オペレーションの推定の進捗状況が含まれます。

TTL ポリシーを無効にする

TTL ポリシーを無効にする手順は次のとおりです。

Google Cloud コンソール

  1. Google Cloud コンソールの [Firestore の有効期間] ページに移動します。

    [有効期間] ページに移動

  2. [TTL ポリシー] テーブルで、TTL ポリシーの行を見つけます。このテーブル行で、削除(ゴミ箱)ボタンをクリックします。

  3. [削除] をクリックして確定します。

コンソールが [有効期間] ページに戻ります。成功すると、Firestore がテーブルから TTL ポリシーを削除します。

gcloud

firestore fields ttls update コマンドを使用して、TTL ポリシーを構成します。--async フラグを追加すると、gcloud CLI はオペレーションの完了を待機しません。

gcloud beta firestore fields ttl update ttl_field --collection-group=collection_group_name --disable-ttl

TTL の削除のモニタリング

Cloud Monitoring を使用すると、TTL による削除に関する指標を表示できます。Firestore では、TTL について次の指標を提供しています。

有効期間による削除数

有効期間(TTL)ポリシーによって削除されたドキュメントの合計数。

有効期間の期限切れから削除までの遅延

有効期間(TTL)ポリシーに基づいてドキュメントが期限切れになってから実際に削除されるまでの経過時間。

Firestore の指標を使用してダッシュボードを設定するには、カスタム ダッシュボードを管理するダッシュボード ウィジェットを追加するをご覧ください。