使用 TTL 政策管理資料保留
本頁面說明如何使用 Google Cloud 控制台和 Google Cloud CLI 設定存留時間 (TTL) 政策。閱讀本頁面之前,請先瞭解 Firestore 資料模型。
存留時間總覽
使用存留時間政策,自動移除資料庫中的過時資料。存留時間政策會將特定欄位指定為特定產品素材資源集合群組中文件的到期時間。您可以使用 TTL 清除過時資料,藉此降低儲存空間成本。通常會在到期日後的 24 小時內刪除資料。
定價
依據存留時間刪除的作業數會計入文件刪除費用。如要瞭解刪除作業的定價,請參閱 Firestore 定價。
限制和條件
- 每個產品素材資源集合群組只能將一個欄位標示為存留時間欄位。
- 最多可設定 500 個欄位層級設定。一個欄位設定可包含同一欄位的多項設定。舉例來說,單一欄位索引豁免和存留時間政策會計入限制,與單一欄位設定相同。
- 如果是 Datastore 模式的 Firestore 客戶,存留時間無法搭配「Optimistic With Entity Groups」(開放式並行控制搭配實體群組) 並行模式使用。建議將並行模式變更為樂觀並行模式。
依據存留時間刪除
請注意下列 TTL 驅動刪除作業的主要行為:
透過存留時間刪除資料並非即時程序,過期文件會繼續顯示在查詢和查閱要求中,直到 TTL 程序實際刪除文件為止。TTL 會犧牲交易刪除作業的及時性,以減少刪除作業的總持有成本。通常會在到期日後的 24 小時內刪除資料。
透過 TTL 刪除文件時,不會刪除該文件下的子集合。
對現有產品素材資源集合群組套用存留時間政策時,系統會根據新的存留時間政策,大量刪除所有過期資料。請注意,這項大量刪除作業並非即時完成,所需時間取決於該產品素材資源集合群組的資料量。
如果文件已過期,且您為集合新增 TTL 政策,系統會在 TTL 政策設定完成並生效後的 24 小時內刪除文件。
TTL 不一定會按照文件到期時間戳記的順序刪除文件。
刪除作業不會以交易方式進行。即使文件到期時間相同,也不一定會同時刪除。如要執行這項操作,請使用用戶端程式庫刪除資料。
Firestore 一律會採用最新的 TTL 欄位來判斷到期時間。舉例來說,如果已過期但尚未刪除的文件將存留時間欄位更新為較晚的日期,該文件就不會過期,系統會使用新的日期。
只有在存留時間欄位設為特定值類型時,Firestore 才會讓文件過期。如果是 Standard 版資料庫,這個欄位必須設為
Date and time值。如果是 Enterprise 版資料庫,該欄位必須設為Date and time值,或是包含Date and time值的Array值。如果未填寫這個欄位或將其設為null等值,即可針對個別文件停用到期日。存留時間的設計宗旨是盡量減少對其他資料庫活動的影響。系統會以較低的優先順序處理因 TTL 而刪除的資料。此外,我們也採取其他策略,以平緩存留時間驅動刪除作業造成的流量尖峰。
透過 TTL 刪除時,系統會呼叫所有有效的快照監聽器,並觸發 Cloud Run functions Firestore 觸發條件。
存留時間欄位和索引
存留時間欄位可建立索引或不建立索引。不過,由於存留時間欄位是時間戳記,為該欄位建立索引可能會影響高流量率的效能。為時間戳記欄位建立索引可能會產生熱點,這不符合最佳做法。熱點是指對小範圍文件進行高速讀取、寫入及刪除作業。
根據預設,Firestore Standard 版會為所有欄位建立單一欄位索引。您可以建立單一欄位索引豁免設定,停用存留時間欄位的索引。
權限
設定存留時間政策的主體必須具備專案的下列權限:
- 如要查看存留時間政策,必須具備
datastore.indexes.list和datastore.indexes.get權限。 - 修改 TTL 政策需要
datastore.indexes.update權限。 - 如要查看 TTL 作業的狀態,必須使用
datastore.operations.list和datastore.operations.get。
如要瞭解指派這些權限的角色,請參閱「Firestore 身分與存取權管理角色」。
建立存留時間政策
建立存留時間政策時,請指定文件欄位做為產品素材資源集合群組中文件的到期時間。
存留時間會使用指定欄位,識別符合刪除條件的文件。
如果是標準版資料庫,TTL 欄位必須設為 Date and time 值。
如果是 Enterprise 版資料庫,則必須設為 Date and time 值,或是包含 Date and time 值的 Array 值。你可以選取現有欄位,也可以指定稍後要新增的欄位。
設定 TTL 欄位值前,請先考量下列事項:
TTL 欄位值可以是未來、現在或過去的時間。如果值是過去的時間,文件會立即符合刪除資格。舉例來說,您可以建立含有
expireAt欄位的存留時間政策,然後將該政策新增至現有文件。如果使用任何其他資料類型,或未設定 TTL 欄位值,系統就會停用個別文件的 TTL。
如要建立 TTL 政策,請按照下列步驟操作:
Google Cloud Console
前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。
從資料庫清單中選取所需資料庫。
在導覽選單中,按一下「存留時間」。
點選「建立政策」。
輸入產品素材資源集合群組名稱和時間戳記欄位名稱。
點選「建立」。
控制台會返回「存留時間」頁面。如果作業順利啟動,頁面會在 TTL 政策表格中新增項目。如果失敗,頁面會顯示錯誤訊息。
gcloud
-
在 Google Cloud 控制台中啟用 Cloud Shell。
Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
使用
firestore fields ttls update指令設定 TTL 政策。加上--async旗標,避免 gcloud CLI 等待作業完成。gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --enable-ttl
存留時間政策啟用時間
啟用 TTL 政策至少需要十分鐘,啟動作業後,關閉終端機不會取消作業。
查看存留時間政策
如要查看 TTL 政策及其狀態,請按照下列步驟操作:
Google Cloud Console
前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。
從資料庫清單中選取所需資料庫。
在導覽選單中,按一下「存留時間」。
控制台會列出資料庫的 TTL 政策,並顯示每項政策的狀態。
gcloud
-
在 Google Cloud 控制台中啟用 Cloud Shell。
Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
使用
firestore fields ttls list指令設定 TTL 政策。下列指令會列出所有 TTL 政策。gcloud firestore fields ttls list
如要列出特定產品素材資源集合群組下的存留時間政策,請使用下列指令:
gcloud firestore fields ttls list --collection-group=collection_group_name
查看作業詳細資料
您可以使用 gcloud CLI,查看處於 CREATING 狀態的 TTL 政策詳細資料。
使用 operations list 指令查看所有執行中和最近完成的作業:
gcloud firestore operations list
回應會包含作業進度的預估值。
停用存留時間政策
如要停用 TTL 政策,請按照下列步驟操作:
Google Cloud Console
前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。
從資料庫清單中選取所需資料庫。
在導覽選單中,按一下「存留時間」。
在存留時間政策表格中,找到存留時間政策所屬的列。在這個表格列中,按一下「刪除」 (垃圾桶) 按鈕。
按一下「刪除」確認。
控制台會返回「存留時間」頁面。成功後,Firestore 會從資料表移除 TTL 政策。
gcloud
-
在 Google Cloud 控制台中啟用 Cloud Shell。
Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
使用
firestore fields ttls update指令設定 TTL 政策。加上--async旗標,避免 gcloud CLI 等待作業完成。gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --disable-ttl
監控依據存留時間刪除的作業
您可以使用 Cloud Monitoring 查看 TTL 驅動刪除作業的相關指標。Firestore 提供下列存留時間指標:
| 指標類型 | 指標名稱 | 指標說明 |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | 存留時間刪除計數 |
存留時間政策刪除的文件總數。 |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | 從存留時間到期到刪除的延遲 |
文件根據存留時間政策到期後,實際刪除前經過的時間。 |
如要設定含有 Firestore 指標的資訊主頁,請參閱「管理自訂資訊主頁」和「新增資訊主頁小工具」。