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

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

有効期間の概要

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

料金

TTL の削除オペレーションは、ドキュメントの削除費用にカウントされます。削除オペレーションの料金については、Cloud Firestore の料金をご覧ください。

制限と制約

  • TTL フィールドとして指定できるのは、1 つのコレクション グループにつき 1 つのフィールドのみです。
  • 合計で 200 個のフィールド レベルの構成が可能です。1 つのフィールド構成に、同じフィールドの構成を複数含めることができます。たとえば、単一フィールド インデックス除外と、同じフィールドに対する TTL ポリシーは、上限に対して 1 つのフィールド構成としてカウントされます。
  • Datastore モードの Firestore の場合、TTL をエンティティ グループによるオプティミスティックの同時実行モードと併用することはできません。こちらに沿って同時実行モードを変更することを検討してください。

TTL の削除

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

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

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

  • 既存のコレクション グループに TTL ポリシーを適用すると、新しい TTL ポリシーに従って期限切れとなった、すべてのデータが一括削除されます。この一括削除も即時には行われず、該当するコレクション グループのデータの残量によって決まります。

  • ドキュメントに以前の有効期限があり、新しい TTL ポリシーをコレクションに追加した場合、TTL ポリシーの設定が終了してアクティブになってから 24 時間以内にドキュメントが削除されます。

  • 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 フィールドの値を設定する前に、次の点を考慮してください。

  • TTL フィールドの値は、将来、現在、過去の時刻のいずれかにできます。値が過去の時刻であれば、ドキュメントはすぐに削除できます。たとえば、expireAt フィールドで TTL ポリシーを作成し、それを既存のドキュメントに追加します。

  • 他のデータタイプを使用したり、TTL フィールド値を設定しなかったりすると、個々のドキュメントの TTL が無効になります。

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

Google Cloud Console

  1. Google Cloud Platform コンソールで、[データベース] ページに移動します。

    [データベース] に移動

  2. データベースのリストから、必要なデータベースを選択します。

  3. ナビゲーション メニューで [有効期間(TTL)] をクリックします。

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

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

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

コンソールの [有効期間(TTL)] ページに戻ります。オペレーションが正常に開始されると、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 Cloud Console

  1. Google Cloud Platform コンソールで、[データベース] ページに移動します。

    [データベース] に移動

  2. データベースのリストから、必要なデータベースを選択します。

  3. ナビゲーション メニューで [有効期間(TTL)] をクリックします。

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

gcloud

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

   gcloud firestore fields ttls list
   

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

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

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

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

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

gcloud firestore operations list

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

TTL ポリシーを無効にする

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

Google Cloud Console

  1. Google Cloud Platform コンソールで、[データベース] ページに移動します。

    [データベース] に移動

  2. データベースのリストから、必要なデータベースを選択します。

  3. ナビゲーション メニューで [有効期間(TTL)] をクリックします。

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

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

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

gcloud

1. 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 について次の指標を提供しています。

firestore.googleapis.com/document/ttl_deletion_count 有効期間による削除数

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

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays 有効期間の期限切れから削除までの遅延

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

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