Firebase Summit のすべての発表内容に目を通し、Firebase を活用してアプリ開発を加速し、自信を持ってアプリを実行できる方法をご確認ください。 詳細

TTLポリシーを使用してデータ保持を管理する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、Google Cloud Platform Console と Google Cloud CLI を使用して Time-to-Live (TTL) ポリシーを構成する方法について説明します。このページを読む前に、 Cloud Firestore データ モデルを理解する必要があります。

有効期限の概要

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

価格

TTL 削除操作は、ドキュメントの削除コストにカウントされます。削除操作の料金については、 Cloud Firestore の料金をご覧ください。

制限と制約

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

TTL 削除

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

  • TTL による削除は、瞬間的なプロセスではありません。有効期限が切れたドキュメントは、TTL プロセスによって実際に削除されるまで、引き続きクエリとルックアップ リクエストに表示されます。 TTL では、削除の適時性と引き換えに、削除の総所有コストが削減されます。通常、データは有効期限から 72 時間以内に削除されます。

  • TTL を使用してドキュメントを削除しても、そのドキュメントのサブコレクションは削除されません。

  • 既存のコレクション グループに TTL ポリシーを適用すると、新しい TTL ポリシーに従って期限切れになったすべてのデータが一括削除されます。この一括削除も即時ではなく、そのコレクション グループに存在するデータの量に依存することに注意してください。

  • TTL は、必ずしも有効期限のタイムスタンプと同じ順序でドキュメントを削除するとは限りません。

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

  • Cloud Firestore は常に最新の TTL フィールドを尊重して有効期限を決定します。たとえば、有効期限が切れているがまだ削除されていないドキュメントの TTL フィールドが後の日付に更新されている場合、ドキュメントは期限切れにならず、新しい日付が使用されます。

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

  • TTL による削除は、アクティブなスナップショット リスナーのプッシュ通知を送信し、Cloud Functions Cloud 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が必要です。

これらの権限を割り当てる役割については、 Cloud 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 クラウド コンソール

  1. Google Cloud Platform Console でCloud Firestore の Time-to-Liveページに移動します。

    Time-to-Live ページに移動します

  2. [ポリシーの作成]をクリックします。

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

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

コンソールがTime-to-liveページに戻ります。操作が正常に開始されると、ページは TTL ポリシー テーブルにエントリを追加します。失敗すると、ページにエラー メッセージが表示されます。

gcloud

firestore fields ttls updateコマンドを使用して、TTL ポリシーを設定します。 --asyncフラグを追加して、gcloud CLI が操作の完了を待たないようにします。

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

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

TTL ポリシーを表示する

以下の手順に従って、TTL ポリシーとそのステータスを表示します。

Google クラウド コンソール

Google Cloud Platform Console でCloud Firestore の Time-to-Liveページに移動します。

Time-to-Live ページに移動します

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

gcloud

firestore fields ttls listコマンドを使用して、TTL ポリシーを設定します。次のコマンドは、すべての TTL ポリシーを一覧表示します。

gcloud firestore fields ttls list 

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

gcloud firestore fields ttls list  --collection-group=collection_group_name

操作の詳細を表示

gcloud CLI を使用して、 CREATING状態の TTL ポリシーの詳細を表示できます。

operations listコマンドを使用して、実行中の操作と最近完了した操作をすべて表示します。

gcloud firestore operations list

応答には、操作の進行状況の見積もりが含まれます。

TTL ポリシーを無効にする

以下の手順に従って、TTL ポリシーを無効にします。

Google クラウド コンソール

  1. Google Cloud Platform Console でCloud Firestore の Time-to-Liveページに移動します。

    Time-to-Live ページに移動します

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

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

コンソールがTime-to-liveページに戻ります。成功すると、Cloud Firestore はテーブルから TTL ポリシーを削除します。

gcloud

firestore fields ttls updateコマンドを使用して、TTL ポリシーを設定します。 --asyncフラグを追加して、gcloud CLI が操作の完了を待たないようにします。

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

TTL の削除を監視する

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

Time-to-Live 削除カウント

Time-to-Live (TTL) ポリシーによって削除されたドキュメントの総数。

Time-to-Live の有効期限から削除までの遅延

Time-to-live (TTL) ポリシーの下でドキュメントの有効期限が切れてから、実際に削除されるまでの経過時間。

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