運用存留時間政策管理資料保留設定

本頁面說明如何使用 Google Cloud 主控台和 Google Cloud CLI 設定時間到期 (TTL) 政策。閱讀本頁前 您應該瞭解 Cloud Firestore 資料模型

存留時間總覽

自動使用存留時間政策 移除資料庫內的過時資料存留時間政策會將特定欄位指定為 指定集合群組中的文件到期時間。有了存留時間 清除過時資料來降低儲存空間成本系統通常會刪除資料 24 小時內。

定價

存留時間刪除作業會計入文件刪除費用。如要瞭解刪除作業的定價,請參閱 Cloud Firestore 定價

限制

  • 每個集合群組只能有一個欄位標示為「存留時間」欄位,
  • 最多允許 200 個欄位層級設定。一個欄位設定可包含相同欄位的多個設定。例如: 單一欄位的索引豁免項目和存留時間政策,會計入 有一個欄位設定超出上限
  • Firestore (Datastore 模式) 客戶無法將 TTL 與以下並行模式搭配使用: 具備實體群組的最佳功能。 建議將並行模式變更為「最佳化並行模式」

刪除存留時間

請注意,以存留時間為準刪除作業的主要行為包括:

  • 透過 TTL 刪除並非即時程序,過期文件會持續顯示在查詢和查閱要求中,直到 TTL 程序實際刪除這些文件為止。存留時間可讓您在刪除時程和刪除作業的總持有成本之間取得平衡。通常會在到期日後的 24 小時內刪除資料。

  • 透過存留時間刪除文件,並不會刪除該文件下的子集合 文件。

  • 對現有集合群組套用存留時間政策後,結果會大量套用 根據新的存留時間政策刪除所有過期資料。注意事項 必須處理大量資料,而且不會立即執行大量刪除作業 才會有專屬於該集合群組

  • 如果文件設有到期時間,而你新增了存留時間政策 則系統會在 24 小時內刪除文件。 也就是存留時間政策設定完成並生效的時間。

  • TTL 不一定會按照 到期時間戳記。

  • 刪除作業並非透過交易完成。到期日相同的文件 因為時間不一定同時刪除如果需要這種行為,請使用用戶端程式庫執行刪除作業。

  • Cloud Firestore 一律會使用最新的 TTL 欄位來判斷到期日。例如,如果文件已過期但尚未刪除, TTL 欄位已更新為較晚的日期,文件將不會過期,且 系統將使用新的日期

  • 存留時間是設計來盡量減少對其他資料庫活動的影響。系統會以較低的優先順序處理 TTL 觸發的刪除作業。其他策略是 ,以順利消除因存留時間導向刪除作業而遽增的流量。

  • 透過存留時間呼叫執行刪除作業 快照監聽器和觸發 Cloud Functions Cloud Firestore 觸發條件。

存留時間欄位與索引

TTL 欄位可以建立索引或未建立索引。不過,由於 TTL 欄位是時間戳記,因此為該欄位建立索引可能會影響較高流量率的效能。為時間戳記欄位建立索引可能會產生熱點,這違反最佳做法。熱點是指讀取、寫入和刪除頻率高的狹小文件範圍。

根據預設,Cloud Firestore 會為所有欄位建立單一欄位索引。 您可以建立單一欄位索引豁免設定,停用 TTL 欄位的索引。

權限

設定存留時間政策的主體必須具備 專案:

  • 查看存留時間政策時必須使用 datastore.indexes.list 和「datastore.indexes.get」權限。
  • 修改存留時間政策需要 datastore.indexes.update 權限。
  • 需要 datastore.operations.listdatastore.operations.get 才能檢查存留時間作業的狀態。

如要瞭解指派這些權限的角色,請參閱 Cloud Firestore Identity and Access Management 角色相關說明。

事前準備

使用 gcloud CLI 管理存留時間政策前,請先使用 gcloud components update敬上 指令,將元件更新為最新可用版本:

gcloud components update

建立存留時間政策

建立存留時間政策時,必須指定一個文件欄位做為到期日 集合群組中文件的時間

存留時間會使用特定欄位找出符合刪除條件的文件。 這個 TTL 欄位必須是 Date and time 類型。您可以選取一個欄位 現有的欄位,或是指定打算稍後新增的欄位。

設定 TTL 欄位值前,請考量以下事項:

  • TTL 欄位的值可以是未來、現在或過去的時間。如果值是時間 文件上傳後,系統會立即將文件刪除。舉例來說,您可以使用 expireAt 欄位建立 TTL 政策,然後新增至現有文件。

  • 如果您使用任何其他資料類型或未設定「TTL」欄位值,個別文件的存留時間就會停用。

如要建立 TTL 政策,請按照下列步驟操作:

Google Cloud Console

  1. 前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。

    前往「資料庫」頁面

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

  3. 在導覽選單中,按一下「存留時間」

  4. 點按「建立政策」

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

  6. 按一下「建立」

控制台就會返回「存留時間」頁面。如果作業失敗 才會開始,頁面會在存留時間政策表格中新增項目。啟用 失敗時,頁面會顯示錯誤訊息。

gcloud

使用 firestore fields ttls update 設定存留時間政策的指令加上 --async 標記可避免系統產生 gcloud CLI 等待作業完成。

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

存留時間政策啟用時長

即使是空資料庫,啟用 TTL 政策也可能需要十分鐘以上。開始作業後,關閉終端機並不會取消 作業。

查看存留時間政策

如要查看存留時間政策及其狀態,請按照下列步驟操作:

Google Cloud Console

  1. 前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。

    前往「資料庫」頁面

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

  3. 在導覽選單中,按一下「存留時間」

控制台會列出資料庫的存留時間政策,並列出每項政策的 狀態。

gcloud

使用 firestore fields ttls list敬上 設定存留時間政策的指令下列指令會列出所有存留時間 再檢查有關聯的允許政策

   gcloud firestore fields ttls list
   

如要列出特定集合群組下的存留時間政策,請按照下列步驟操作:

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

查看作業詳細資料

您可以使用 gcloud CLI 查看存留時間政策的更多詳細資料 處於 CREATING 狀態

使用 operations list 指令查看所有執行中的 近期完成的作業:

gcloud firestore operations list

回應中會包含作業進度的預估值。

停用存留時間政策

如要停用存留時間政策,請按照下列步驟操作:

Google Cloud Console

  1. 前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。

    前往「資料庫」頁面

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

  3. 在導覽選單中,按一下「Time-to-live」(生命週期)

  4. 在存留時間政策表格中,找出存留時間政策的資料列。在這個資料表列中,按一下「刪除」(垃圾桶) 按鈕。

  5. 按一下「刪除」確認這項操作。

控制台就會返回「存留時間」頁面。如果成功,Cloud Firestore 會從表格中移除 TTL 政策。

gcloud

1. 使用 firestore fields ttls update敬上 設定存留時間政策的指令新增 --async 標記,避免 gcloud CLI 為了等待作業完成而停頓。

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

監控存留時間刪除作業

您可以使用 Cloud Monitoring 查看以存留時間為準的刪除指標。 Cloud Firestore 提供下列存留時間指標:

指標類型 指標名稱 指標說明
firestore.googleapis.com/document/ttl_deletion_count 存留時間 (TTL) 的刪除次數

依存留時間政策刪除的文件總數。

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays 延遲時間的存留時間 (TTL) 已延遲

文件在 TTL 政策下到期,到實際刪除之間的時間長度。

如要設定含有 Cloud Firestore 指標的資訊主頁,請參閱「管理自訂資訊主頁」和「新增資訊主頁小工具」。