使用 TTL 策略管理資料保留

本頁面介紹如何使用 Google Cloud Platform Console 和 Google Cloud CLI 設定生存時間 (TTL) 策略。在閱讀本頁之前,您應該了解Cloud Firestore 資料模型

生存時間概述

使用生存時間 (TTL) 策略自動從資料庫中刪除過時的資料。 TTL 策略將給定欄位指定為給定集合組中文件的過期時間。使用 TTL,您可以透過清除過時的資料來降低儲存成本。資料通常會在過期日期後 24 小時內刪除。

價錢

TTL 刪除操作會計入您的文件刪除費用。有關刪除操作的定價,請參閱Cloud Firestore 定價

限制和約束

  • 每個集合組只能將一個欄位標記為 TTL 欄位。
  • 總共允許 200 個欄位級配置。一個字段配置可以包含同一字段的多個配置。例如,單一欄位索引豁免和同一欄位上的 TTL 策略將計為一個欄位配置,以達到限制。
  • 對於 Firestore 資料儲存模式客戶,TTL 不能與Optimistic With Entity Groups並發模式一起使用。考慮更改此後的並發模式。

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.listdatastore.indexes.get權限。
  • 修改 TTL 策略需要datastore.indexes.update權限。
  • 檢查 TTL 操作的狀態需要datastore.operations.listdatastore.operations.get

有關指派這些權限的角色,請參閱Cloud Firestore 身分和存取管理角色

在你開始之前

在使用 gcloud CLI 管理 TTL 策略之前,請使用gcloud components update指令將元件更新到最新的可用版本:

gcloud components update

建立 TTL 策略

建立 TTL 策略時,您可以指定一個文件欄位作為集合組中文件的過期時間。

TTL 使用指定欄位來標識符合刪除條件的文件。此 TTL 欄位必須是Date and time類型。您可以選擇已存在的字段,也可以指定計劃稍後新增的字段。

在設定 TTL 欄位值之前請考慮以下事項:

  • TTL 欄位值可以是未來、現在或過去的時間。如果該值是過去的時間,則該文件可以立即刪除。例如,您可以使用欄位expireAt建立 TTL 策略,然後將其新增至現有文件中。

  • 使用任何其他資料類型或不設定 TTL 欄位值將停用單一文件的 TTL。

請依照以下步驟建立 TTL 策略:

谷歌雲端控制台

  1. 在 Google Cloud Platform Console 中,前往資料庫頁面。

    前往資料庫

  2. 從資料庫清單中選擇所需的資料庫。

  3. 在導覽功能表中,按一下生存時間

  4. 點選建立策略

  5. 輸入集合組名稱和時間戳欄位名稱。

  6. 單擊創建

控制台返回「生存時間」頁面。如果操作成功啟動,頁面會在 TTL 策略表中新增一個項目。失敗時,頁面會顯示錯誤訊息。

雲雲

使用firestore fields ttls update指令設定 TTL 策略。新增--async標誌以防止 gcloud CLI 等待操作完成。

 gcloud firestore fields ttls update
  ttl_field --collection-group=collection_group_name
  --enable-ttl 

即使在空資料庫上,啟用 TTL 策略也可能需要十分鐘或更長時間。一旦開始操作,關閉終端並不會取消該操作。

查看 TTL 策略

請依照下列步驟查看 TTL 策略及其狀態。

谷歌雲端控制台

  1. 在 Google Cloud Platform Console 中,前往資料庫頁面。

    前往資料庫

  2. 從資料庫清單中選擇所需的資料庫。

  3. 在導覽功能表中,按一下生存時間

控制台列出了資料庫的 TTL 策略並包括每個策略的狀態。

雲雲

使用firestore fields ttls list指令設定 TTL 政策。以下命令列出所有 TTL 策略。

   gcloud firestore fields ttls list
   

若要列出特定收集群組下的 TTL 策略,請使用下列命令:

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

查看操作詳情

您可以使用 gcloud CLI 查看有關處於CREATING狀態的 TTL 策略的更多詳細資訊。

使用operations list命令查看所有正在運行和最近完成的操作:

gcloud firestore operations list

響應包括對操作進度的估計。

禁用 TTL 策略

請依照以下步驟停用 TTL 策略。

谷歌雲端控制台

  1. 在 Google Cloud Platform Console 中,前往資料庫頁面。

    前往資料庫

  2. 從資料庫清單中選擇所需的資料庫。

  3. 在導覽功能表中,按一下生存時間

  4. 在 TTL 策略表中,找出 TTL 策略的行。在此表行中,按一下「刪除」 (垃圾桶)按鈕。

  5. 點選“刪除”進行確認。

控制台返回「生存時間」頁面。成功後,Cloud Firestore 將從表格中刪除 TTL 策略。

雲雲

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 指標設定儀表板,請參閱管理自訂儀表板新增儀表板小組件