このページでは、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.list
とdatastore.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
Google Cloud コンソールで [データベース] ページに移動します。
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
[ポリシーを作成] をクリックします。
種類の名前とタイムスタンプ プロパティ名を入力します。
[作成] をクリックします。
コンソールの [有効期間(TTL)] ページに戻ります。オペレーションが正常に開始されると、TTL ポリシー テーブルのページにエントリが追加されます。失敗すると、ページにエラー メッセージが表示されます。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
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 コンソールで [データベース] ページに移動します。
データベースのリストから、必要なデータベースを選択します。
ナビゲーション メニューで [有効期間(TTL)] をクリックします。
コンソールには、データベースの TTL ポリシーが表示され、各ポリシーのステータスも含まれています。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
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 ポリシーの行を見つけます。このテーブル行で、削除(ゴミ箱)ボタンをクリックします。
[削除] をクリックして確定します。
コンソールが [有効期間] ページに戻ります。成功すると、Datastore がテーブルから TTL ポリシーを削除します。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
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 指標でダッシュボードを設定するには、カスタム ダッシュボードを管理するとダッシュボード ウィジェットを追加するをご覧ください。