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