垃圾收集

本頁面說明垃圾收集在 Cloud Bigtable 中的運作方式,並涵蓋下列主題:

  • 垃圾收集類型
  • 預設垃圾收集設定
  • 移除資料時
  • 備用資料表垃圾收集政策的變更

垃圾收集總覽

垃圾收集是持續進行的自動流程,可從 Cloud BigTable 資料表移除過期與過時資料。垃圾收集政策是您建立的一組規則,指出何時不再需要特定資料欄系列中的資料。

垃圾收集是內建非同步背景程序。實際移除符合垃圾收集條件的資料可能需要一週的時間。 垃圾收集會以固定排程進行,不會因需要移除的資料量而有所不同。資料在移除之前會顯示在讀取結果中。您可以篩選讀取來排除此資料。

垃圾收集政策的優勢包括:

  • 將資料列大小降到最低 - 您總是希望防止資料列無限成長。大型資料列會對效能造成負面影響。在理想情況下,絕對不能讓資料列的大小超過 100 MB,且限制為 256 MB。如果您不需要保留舊資料,或目前資料的舊版本,使用垃圾收集可協助您將每個資料列的大小降到最低。
  • 降低成本 - 垃圾收集可確保您不需要為了儲存不再需要或不再使用的資料而付費。在進行壓縮並移除經過垃圾收集處理的資料之前,系統會向您收取儲存過期或過時資料的費用。一般來說,這項程序需要幾天的時間,但可能最多需要一週的時間才能完成。

您可以透過程式或使用 cbt 工具來設定垃圾收集政策。垃圾收集政策是在資料欄系列層級設定。

資料表中的每個資料欄系列都有自己的垃圾收集政策。垃圾收集程序會針對每個資料欄系列查詢目前垃圾收集政策,然後會根據政策中的規則移除資料。

時間戳記

在 Cloud Bigtable 中,資料列與資料欄的交集可以有多個儲存格,這些儲存格是該交集的不同值版本。每個儲存格都有時間戳記。儲存格的時間戳記屬性可以是「實際」時間戳記,反映寫入儲存格的實際時間值,也可以是「人工」時間戳記。人工時間戳記包含序號、零或時間戳記格式的值 (並非寫入儲存格的實際時間)。使用人工時間戳記之前,請查看人工時間戳記的使用案例,包括使用風險:

垃圾收集類型

本節說明 Cloud BigTable 中提供的垃圾收集類型。設定垃圾收集一文中提供每種垃圾收集類型的程式碼範例。

到期值 (以時間為基礎)

您可以根據每個儲存格的時間戳記設定垃圾收集規則。例如,您可能並不想保留時間戳記在目前日期與時間前 30 天以上的任何儲存格。若使用此類型的垃圾收集規則,您就可以設定資料的存留時間 (TTL)。Cloud Bigtable 會在垃圾收集期間查看每個資料欄系列,並會移除已過期的任何儲存格。

版本數量

您可以設定垃圾收集規則,明確指出針對資料欄系列中的所有資料欄要保留的儲存格數上限。

例如,如果您只想保留客戶的最新使用者名稱與電子郵件地址,可建立包含這兩個資料欄的資料欄系列,並針對該資料欄系列,將值數上限設定為 1。

在另一種情況下,您可能想要保留使用者密碼雜湊的最近 5 個版本,以確保使用者未重複使用密碼,因此,您應將包含密碼資料欄之資料欄系列的版本數上限設定為 5。當 Cloud Bigtable 在垃圾收集期間查看資料欄系列時,如果第 6 個儲存格已寫入資料欄,系統會對最舊的儲存格進行垃圾收集處理,以保持版本數量為 5。

有效期限規則與版本號碼規則的組合

兩種類型的垃圾收集政策可合併這些類型的垃圾收集規則:交集聯集

交集

交集垃圾收集政策將移除符合所有指定規則集的全部資料。例如,您可能想移除超過 30 天的設定檔,但始終為每位使用者保留至少一個設定檔。在這種情況下,針對包含設定檔資料欄的資料欄系列,交集政策應包含到期值的規則版本數量的規則。

聯集

聯集垃圾收集政策將移除符合任何指定規則集的全部資料。例如,您可能想確保針對每位使用者保留最多 2 個頁面檢視記錄,但前提是這些記錄的使用時間少於 30 天。在這種情況下,應針對到期值版本數量設定聯集政策。

垃圾收集的預設設定

資料欄系列沒有預設存留時間。資料欄的預設版本數量取決於您建立資料欄所在之資料欄系列的方式,如下列幾節所述。

HBase 政策

如果您使用 Java 適用的 HBase 用戶端、HBase shell 或使用 Java 適用之 HBase 用戶端的其他工具建立資料欄系列,除非您變更規則,否則 Cloud Bigtable 只會保留資料欄系列中每個值的最新版本。此預設設定與 HBase 一致。

其他所有用戶端程式庫或工具

如果您使用其他任何用戶端程式庫或工具建立資料欄系列,Cloud Bigtable 會保留每個值的無限量版本。這包括使用 gcloudcbt 工具建立的資料欄系列。如果您要限制版本數量,必須針對資料欄系列變更垃圾收集政策。

移除資料時

垃圾收集是一個持續的過程,Cloud Bigtable 會檢查每個資料欄系列的規則,並會相應地移除過期與過時資料。一般而言,從資料符合資料規則中的條件到實際移除資料可能需要最多一週的時間。您無法變更垃圾收集的時間。

由於對資料進行垃圾收集處理可能需要最多一週的時間,因此,您不應僅依賴垃圾收集政策來確保讀取要求傳回所需資料。請一律將篩選器套用至讀取要求,該篩選器會排除與垃圾收集規則相同的值。 您可以透過限制每個資料欄的儲存格數,或指定時間戳記範圍來進行篩選。

例如,假設資料欄系列的垃圾收集規則設定為僅保留設定檔的 5 個最新版本,且已經儲存了 5 個版本。寫入設定檔的新版本之後,可能需要最多一週的時間來對最舊的儲存格進行垃圾收集處理。因此,為了避免讀取第 6 個值,您應一律篩選除 5 個最新版本以外的所有版本。

在進行壓縮並移除經過垃圾收集處理的資料之前,系統會向您收取儲存過期資料的費用。

垃圾收集具有追溯性:當設定新垃圾收集政策時,在接下來的幾天內,該政策將套用至資料表中的所有資料。如果新政策的限制比之前的政策更加嚴格,舊資料將在背景工作發生時移除,進而影響政策變更之前寫入的資料。

如果您要確保資料正在進行垃圾收集處理,可查詢資料表,並將資料與預期結果進行比較。您也可以在 Google Cloud Platform 主控台中監控資料表大小。永遠沒有變小的資料表可能反映出垃圾收集政策沒有如預期運作,但請記住,垃圾收集會延遲執行。

備用資料表垃圾收集政策的變更

如果資料表位於單一叢集執行個體中,Cloud BigTable 可讓您隨時修改或刪除資料欄系列的政策。另一方面,一些限制會套用至複製的執行個體中的資料表,以保護您的資料。

您可以修改複製資料表中資料欄系列的版本數上限。但是,如果您降低資料欄系列的版本數,所有複製叢集可能需要最多一週的時間,才能反映新的較低數值。因此,讀取資料時應一律使用篩選器。

Cloud Bigtable 將不允許您增加複製資料表中資料欄系列的存留時間。如要瞭解原因,請考慮將資料欄系列的存留時間從 30 天變更為 60 天的情況。基於時間的垃圾收集可以在每個叢集中單獨執行。因此,當您變更政策時,垃圾收集可能會移除一個資料表複本中 31 天的值,但不會在另一個資料表複本中移除。在這種情況下變更垃圾收集政策可能會使複本在將近一個月內無法同步。

也因如此,Cloud Bigtable 將不允許您針對複製資料表中的資料欄系列刪除基於時間的垃圾收集政策。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Bigtable 說明文件