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

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

有効期間の概要

TTL ポリシーを使用して、データベースから古いデータを自動的に削除します。TTL ポリシーは、特定のプロパティを特定の種類のエンティティの有効期限として指定します。TTL を使用すると、古いデータをクリーンアップすることでストレージ費用を削減できます。 データは通常、有効期限が切れた後 24 時間以内に削除されます。

料金

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

制限と制約

  • TTL プロパティとしてマークできるのは、1 種類につき 1 つのプロパティのみです。
  • 合計で 200 個の TTL ポリシーが可能です。

TTL の削除

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

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

  • TTL を使用してエンティティを削除しても、そのエンティティの子孫エンティティは削除されません。

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

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

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

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

  • Datastore モードは、常に最新の TTL フィールドを使用して有効期限を決定します。たとえば、有効期限が切れている未削除のエンティティの TTL フィールドを将来の日付に更新すると、そのエンティティは期限切れにはならず、新しい日付が使用されます。

  • Datastore モードでは、TTL フィールドが Timestamp タイプに設定されている場合にのみ、ドキュメントが期限切れになります。このフィールドを未設定のままにするか、null などの値に設定すると、ドキュメントごとに有効期限を無効にできます。

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

TTL プロパティとインデックス

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

デフォルトでは、Datastore はすべてのプロパティに組み込みインデックスを作成します。インデックスからプロパティを除外して、TTL プロパティのインデックスを無効にできます。

権限

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

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

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

始める前に

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

gcloud components update

TTL ポリシーの作成

TTL ポリシーを作成する際には、同じ種類のエンティティに対して有効期限を表すエンティティ プロパティを 1 つ指定します。TTL ポリシーは、すべての名前空間で、その特定の種類に対して適用されます。

TTL では、指定したプロパティを使用して、削除の対象となるエンティティを識別します。この TTL プロパティは Date and time 型にする必要があります。すでに存在するプロパティを選択することも、後で追加するプロパティを指定することもできます。

TTL プロパティ値を設定する前に、次の点を考慮してください。

  • TTL プロパティの値は、将来、現在、過去の時刻のいずれかにできます。値が過去の時刻の場合、エンティティはすぐに削除の対象となります。たとえば、プロパティ expireAt を使用して TTL ポリシーを作成し、既存のエンティティに追加します。

  • 他のデータ型を使用したり、TTL プロパティ値を設定したりしないと、個々のエンティティの TTL が無効になります。

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

Google Cloud Console

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

    [データベース] に移動

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

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

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

  5. 種類名とタイムスタンプのプロパティ名を入力します。

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

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

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 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 コンソールで [データベース] ページに移動します。

    [データベース] に移動

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

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

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

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 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 コンソールで [データベース] ページに移動します。

    [データベース] に移動

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

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

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

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

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

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 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 による削除に関する指標を表示できます。Datastore では、TTL について次の指標を提供しています。

datastore.googleapis.com/entity/ttl_deletion_count TTL の削除数

TTL ポリシーによって削除されたエンティティの合計数。

datastore.googleapis.com/entity/ttl_expiration_to_deletion_delays TTL の有効期限から削除までの遅延

TTL ポリシーでエンティティが期限切れになってから、実際に削除されるまでの経過時間。

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