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

本頁面說明如何使用 Google Cloud 控制台和 Google Cloud CLI 設定存留時間 (TTL) 政策。閱讀本頁面之前,請先瞭解 Datastore 模式資料模型

存留時間總覽

使用存留時間政策,自動移除資料庫中的過時資料。存留時間政策會將特定屬性指定為特定種類實體的到期時間。您可以使用 TTL 清除過時資料,藉此降低儲存空間成本。通常會在到期日後的 24 小時內刪除資料。

定價

TTL 刪除作業會計入實體刪除費用。如要瞭解刪除作業的定價,請參閱 Firestore (Datastore 模式) 定價

限制和條件

  • 每個種類只能將一個屬性標示為存留時間屬性。
  • 最多可以有 500 項存留時間政策。

存留時間刪除

請注意下列 TTL 驅動刪除作業的主要行為:

  • 透過存留時間刪除資料並非立即生效,過期的實體會繼續出現在查詢和查閱要求中,直到 TTL 程序實際刪除這些實體為止。TTL 會犧牲刪除作業的及時性,以減少刪除作業的總持有成本。通常會在到期日後的 24 小時內刪除資料。

  • 透過 TTL 刪除實體時,不會一併刪除該實體的子代實體。

  • 對現有種類套用存留時間政策,會導致系統根據新的存留時間政策,大量刪除所有過期資料。請注意,大量刪除作業不會立即完成,所需時間取決於該類型資料的數量。

  • 如果實體的到期時間已過,且您為該類型新增了新的 TTL 政策,則實體會在 TTL 政策完成設定並啟用後的 24 小時內刪除。

  • TTL 不一定會按照實體的到期時間戳記順序刪除實體。

  • 刪除作業不會以交易方式進行。具有相同到期時間的實體不一定會同時刪除。如要執行這項操作,請使用用戶端程式庫刪除資料。

  • Datastore 模式一律會採用最新的 TTL 欄位,判斷到期時間。舉例來說,如果已過期但尚未刪除的實體將 TTL 欄位更新為較晚的日期,該實體就不會過期,且會使用新日期。

  • 只有在存留時間欄位設為 Timestamp 類型時,Datastore 模式才會讓文件過期。如果未填寫這個欄位或設為 null 等值,即可針對個別文件停用到期日。

  • 存留時間的設計宗旨是盡量減少對其他資料庫活動的影響。系統會以較低的優先順序處理因 TTL 而刪除的資料。此外,我們也採取其他策略,以平緩存留時間驅動的刪除作業所造成的流量尖峰。

存留時間屬性和索引

TTL 屬性可能已建立索引或未建立索引。不過,由於 TTL 屬性是時間戳記,因此為該屬性建立索引可能會影響高流量時的效能。為時間戳記屬性建立索引違反最佳做法,可能會產生熱點。熱點是指高速讀取、寫入及刪除小範圍索引鍵。

根據預設,Datastore 會為所有屬性建立內建索引。 您可以將屬性排除於索引之外,停用 TTL 屬性的索引。

權限

設定存留時間政策的主體必須具備專案中的下列權限:

  • 如要查看存留時間政策,您必須具備 datastore.indexes.listdatastore.indexes.get 權限。
  • 如要修改存留時間政策,必須具備 datastore.indexes.update 權限。
  • 如要查看 TTL 作業的狀態,必須使用 datastore.operations.listdatastore.operations.get

如要瞭解指派這些權限的角色,請參閱「Datastore 身分與存取權管理角色」。

事前準備

使用 gcloud CLI 管理 TTL 政策前,請先使用 gcloud components update 指令將元件更新至最新可用版本:

gcloud components update

建立存留時間政策

建立存留時間政策時,您會將實體屬性指定為某個種類中實體的到期時間。存留時間政策適用於所有命名空間中的指定種類。

TTL 會使用指定屬性來識別符合刪除資格的實體。這項 TTL 屬性必須是 Date and time 類型。您可以選取現有資源,也可以指定日後要新增的資源。

設定 TTL 屬性值前,請先考量以下事項:

  • TTL 屬性值可以是未來、現在或過去的時間。如果值是過去的時間,實體會立即符合刪除資格。舉例來說,您可能會使用 expireAt 屬性建立 TTL 政策,然後將該政策新增至現有實體。

  • 如果使用任何其他資料類型,或未設定 TTL 屬性值,系統就會停用個別實體的 TTL。

請按照下列步驟建立存留時間政策:

Google Cloud Console

  1. 前往 Google Cloud 控制台的「Databases」頁面。

    前往「資料庫」

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

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

  4. 點選「建立政策」

  5. 輸入類別名稱和時間戳記屬性名稱。

  6. 點選「建立」

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

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 使用 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

  1. 前往 Google Cloud 控制台的「Databases」頁面。

    前往「資料庫」

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

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

控制台會列出資料庫的 TTL 政策,並顯示每項政策的狀態。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 使用 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

  1. 前往 Google Cloud 控制台的「Databases」頁面。

    前往「資料庫」

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

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

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

  5. 按一下「刪除」確認刪除。

控制台會返回「存留時間」頁面。成功後,Datastore 會從資料表中移除 TTL 政策。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 使用 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 驅動刪除作業相關的指標。資料儲存庫提供下列 TTL 指標:

datastore.googleapis.com/entity/ttl_deletion_count 存留時間刪除計數

存留時間政策刪除的實體總數。

datastore.googleapis.com/entity/ttl_expiration_to_deletion_delays 存留時間到期至刪除之間的延遲時間

實體根據存留時間政策過期後,到實際刪除之間經過的時間。

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