TTL ポリシーでデータ保持を管理する
このページでは、 Google Cloud コンソールと Google Cloud CLI を使用して、有効期間(TTL)ポリシーを構成する方法について説明します。このページを読む前に、 について理解しておく必要があります。 Firestore データモデル
有効期間の概要
TTL ポリシーを使用して、データベースから古いデータを自動的に削除します。TTL ポリシーは、特定のフィールドを、特定のコレクション グループ内のドキュメントの有効期限として指定します。TTL を使用すると、古いデータをクリーンアップすることでストレージ費用を削減できます。 データは通常、有効期限が切れた後 24 時間以内に削除されます。
料金
TTL 削除オペレーションは、ドキュメントの削除費用にカウントされます。削除オペレーションの料金については、Firestore の料金をご覧ください。
制限と制約
- TTL フィールドとして指定できるのは、コレクション グループにつき 1 つのフィールドのみです。
- 最大 500 個のフィールド レベルの構成が可能です。1 つのフィールド構成に、同じフィールドの構成を複数含めることができます。たとえば、単一フィールド インデックス除外と、同じフィールドに対する TTL ポリシーは、上限に対して 1 つのフィールド構成としてカウントされます。
- Datastore モードの Firestore の場合、TTL をエンティティ グループによるオプティミスティックの同時実行モードと併用することはできません。同時実行モードをオプティミスティック同時実行モードに変更することを検討してください。
TTL の削除
TTL による削除の、次の主な動作に注意してください。
TTL による削除は短時間のプロセスではありません。TTL プロセスにより実際に削除されるまで、期限切れのドキュメントはクエリとルックアップ リクエストに引き続き表示されます。TTL では、削除の総所有コストを削減できるというメリットは、削除の適時性との引き換えとなります。データは通常、有効期限が切れた後 24 時間以内に削除されます。
TTL を使用してドキュメントを削除しても、そのドキュメントのサブコレクションは削除されません。
既存のコレクション グループに TTL ポリシーを適用すると、新しい TTL ポリシーに従って期限切れとなったすべてのデータが一括削除されます。この一括削除も即時には行われず、該当するコレクション グループのデータの残量によって決まります。
ドキュメントに以前の有効期限がある場合に、新しい TTL ポリシーをコレクションに追加すると、TTL ポリシーの設定が終了してアクティブになってから 24 時間以内にドキュメントが削除されます。
TTL では、有効期限のタイムスタンプと同じ順序でドキュメントが削除されるとは限りません。
削除はトランザクション的に行われるわけではありません。有効期限が同じドキュメントが同時に削除されるとは限りません。この動作が必要な場合は、クライアント ライブラリを使用して削除を行います。
Firestore は、常に最新の TTL フィールドを使用して有効期限を決定します。たとえば、有効期限が切れている未削除のドキュメントの TTL フィールドを将来の日付に更新すると、そのドキュメントは期限切れにはならず、新しい日付が使用されます。
Firestore は、TTL フィールドが特定の値の型に設定されている場合にのみ、ドキュメントの有効期限が切れます。Standard エディションのデータベースの場合、このフィールドは
Date and time値に設定する必要があります。Enterprise エディションのデータベースの場合、このフィールドはDate and time値またはDate and time値を含むArray値に設定する必要があります。このフィールドを未設定のままにするか、nullなどの値に設定すると、ドキュメントごとに有効期限を無効にできます。TTL は他のデータベース アクティビティへの影響を最小限にするように設計されています。TTL による削除は、それよりも低い優先度で処理されます。また、TTL による削除が原因のトラフィックの急増を抑制するための戦略も実施されています。
TTL による削除では、すべてのアクティブなスナップショット リスナーが呼び出され、Cloud Run 関数の Firestore トリガーがトリガーされます。
TTL フィールドとインデックス
TTL フィールドは、インデックス付きにすることも、インデックスなしにすることもできます。ただし、TTL フィールドはタイムスタンプであるため、このフィールドをインデックス付きにすると、トラフィック レートが高い場合にパフォーマンスに影響することがあります。タイムスタンプ フィールドをインデックス付きにすると、ホットスポットが発生する可能性があり、これはベスト プラクティスに反します。ホットスポットは、狭いドキュメント範囲に対する高頻度の読み取り、書き込み、削除を指します。
デフォルトでは、Firestore Standard エディションはすべてのフィールドに対して単一のフィールド インデックスを作成します。 単一のフィールド インデックスの除外を作成して、TTL フィールドのインデックスを無効にできます。
権限
TTL ポリシーを構成するプリンシパルには、プロジェクトで次の権限が必要です。
- TTL ポリシーを表示するには、
datastore.indexes.list権限とdatastore.indexes.get権限が必要です。 - TTL ポリシーを変更するには、
datastore.indexes.update権限が必要です。 - TTL オペレーションのステータスを確認するには、
datastore.operations.listとdatastore.operations.getが必要です。
これらの権限を割り当てるロールについては、Firestore の Identity and Access Management のロールをご覧ください。
TTL ポリシーの作成
TTL ポリシーを作成するときは、コレクション グループ内のドキュメントの有効期限としてドキュメント フィールドを指定します。
TTL では、指定したフィールドを使用して削除対象のドキュメントが識別されます。Standard エディションのデータベースの場合、TTL フィールドは Date and time 値に設定する必要があります。Enterprise エディションのデータベースの場合、Date and time 値または Date and time 値を含む Array 値のいずれかに設定する必要があります。すでに存在するフィールドを選択することも、後で追加するフィールドを指定することもできます。
TTL フィールドの値を設定する前に、次の点を考慮してください。
TTL フィールドの値は、将来、現在、過去の時刻のいずれかにできます。値が過去の時刻であれば、ドキュメントはすぐに削除できます。たとえば、
expireAtフィールドで TTL ポリシーを作成し、それを既存のドキュメントに追加します。他のデータタイプを使用したり、TTL フィールド値を設定しないと、個々のドキュメントの TTL が無効になります。
TTL ポリシーを作成する手順は次のとおりです。
Google Cloud Console
コンソールで、[**データベース**] ページに移動します。 Google Cloud
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
[ポリシーを作成] をクリックします。
コレクション グループ名とタイムスタンプ フィールド名を入力します。
[作成] をクリックします。
コンソールの [有効期間(TTL)] ページに戻ります。オペレーションが正常に開始されると、TTL ポリシー テーブルのページにエントリが追加されます。失敗すると、ページにエラー メッセージが表示されます。
gcloud
-
コンソールで Cloud Shell をアクティブにします。 Google Cloud
コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
firestore fields ttls updateコマンドを使用して、TTL ポリシーを構成します。--asyncフラグを追加すると、gcloud CLI はオペレーションの完了を待機しません。gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --enable-ttl
TTL ポリシーの有効化の所要時間
TTL ポリシーを有効にするには、最短で 10 分以上かかることがあります。オペレーションを開始したら、ターミナルを閉じてもオペレーションはキャンセルされません。
TTL ポリシーの表示
TTL ポリシーとそのステータスを表示する手順は次のとおりです。
Google Cloud Console
コンソールで、[**データベース**] ページに移動します。 Google Cloud
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
コンソールには、データベースの TTL ポリシーが表示され、各ポリシーのステータスも含まれています。
gcloud
-
コンソールで Cloud Shell をアクティブにします。 Google Cloud
コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
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
コンソールで、[**データベース**] ページに移動します。 Google Cloud
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
[TTL ポリシー] テーブルで、TTL ポリシーの行を見つけます。このテーブル行で、削除(ゴミ箱)ボタンをクリックします。
[削除] をクリックして確定します。
コンソールが [有効期間] ページに戻ります。成功すると、Firestore がテーブルから TTL ポリシーを削除します。
gcloud
-
コンソールで Cloud Shell をアクティブにします。 Google Cloud
コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
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 による削除に関する指標を表示できます。Firestore では、TTL について次の指標を提供しています。
| 指標タイプ | 指標名 | 指標の説明 |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | 有効期間による削除数 |
TTL ポリシーによって削除されたドキュメントの合計数。 |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | 有効期間の期限切れから削除までの遅延 |
TTL ポリシーに基づいてドキュメントが期限切れになってから実際に削除されるまでの経過時間。 |
Firestore の指標を使用してダッシュボードを設定するには、カスタム ダッシュボードを管理するとダッシュボード ウィジェットを追加するをご覧ください。