本頁面介紹如何使用 Google Cloud Platform Console 和 Google Cloud CLI 設定生存時間 (TTL) 策略。在閱讀本頁之前,您應該了解Cloud Firestore 資料模型。
生存時間概述
使用生存時間 (TTL) 策略自動從資料庫中刪除過時的資料。 TTL 策略將給定欄位指定為給定集合組中文件的過期時間。使用 TTL,您可以透過清除過時的資料來降低儲存成本。資料通常會在過期日期後 24 小時內刪除。
價錢
TTL 刪除操作會計入您的文件刪除費用。有關刪除操作的定價,請參閱Cloud Firestore 定價。
限制和約束
- 每個集合組只能將一個欄位標記為 TTL 欄位。
- 總共允許 200 個欄位級配置。一個字段配置可以包含同一字段的多個配置。例如,單一欄位索引豁免和同一欄位上的 TTL 策略將計為一個欄位配置,以達到限制。
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.list
和datastore.indexes.get
權限。 - 修改 TTL 策略需要
datastore.indexes.update
權限。 - 檢查 TTL 操作的狀態需要
datastore.operations.list
和datastore.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 策略:
谷歌雲端控制台
在 Google Cloud Platform Console 中,前往資料庫頁面。
從資料庫清單中選擇所需的資料庫。
在導覽功能表中,按一下生存時間。
點選建立策略。
輸入集合組名稱和時間戳欄位名稱。
單擊創建。
控制台返回「生存時間」頁面。如果操作成功啟動,頁面會在 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 策略及其狀態。
谷歌雲端控制台
在 Google Cloud Platform Console 中,前往資料庫頁面。
從資料庫清單中選擇所需的資料庫。
在導覽功能表中,按一下生存時間。
控制台列出了資料庫的 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 策略。
谷歌雲端控制台
在 Google Cloud Platform Console 中,前往資料庫頁面。
從資料庫清單中選擇所需的資料庫。
在導覽功能表中,按一下生存時間。
在 TTL 策略表中,找出 TTL 策略的行。在此表行中,按一下「刪除」 (垃圾桶)按鈕。
點選“刪除”進行確認。
控制台返回「生存時間」頁面。成功後,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 指標設定儀表板,請參閱管理自訂儀表板和新增儀表板小組件。