このページでは、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.list
とdatastore.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
Google Cloud Platform コンソールで、[データベース] ページに移動します。
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
[ポリシーを作成] をクリックします。
コレクション グループ名とタイムスタンプ フィールド名を入力します。
[作成] をクリックします。
コンソールの [有効期間(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
Google Cloud Platform コンソールで、[データベース] ページに移動します。
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(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
Google Cloud Platform コンソールで、[データベース] ページに移動します。
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
[TTL ポリシー] テーブルで、TTL ポリシーの行を見つけます。このテーブル行で、削除(ゴミ箱)ボタンをクリックします。
[削除] をクリックして確定します。
コンソールの [有効期間(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 の指標を使用してダッシュボードを設定するには、カスタム ダッシュボードを管理するとダッシュボード ウィジェットを追加するをご覧ください。