Bigtable 總覽

Bigtable 是稀疏資料表,可擴充至數十億列和數千欄,讓您儲存數 TB 甚至 PB 的資料。Bigtable 適合用於儲存大量單一索引鍵資料,且延遲時間短。Bigtable 具備低延遲的特性,也支援高總處理量讀寫作業,是 MapReduce 作業的理想資料來源。

Bigtable 透過多個用戶端程式庫向應用程式公開,包括支援的 Apache HBase Java 程式庫擴充功能。因此,它與現有的 Apache 開放原始碼大數據軟體生態系統整合。

Bigtable 的強大後端伺服器具備幾項主要優勢:

  • 擴充性極佳:Bigtable 的資源調度與叢集中的機器數量成正比。自行管理的 HBase 安裝作業有設計瓶頸,達到特定門檻後效能就會受限。Bigtable 沒有這個瓶頸,因此您可以擴充叢集,處理更多讀取和寫入作業。
  • 管理簡單。Bigtable 會以透明的方式處理升級和重新啟動作業,並自動維持高資料耐用性。如要複製資料,請在執行個體中新增第二個叢集,系統就會自動開始複製。您不必再管理副本或區域,只要設計資料表結構定義,Bigtable 就會處理其餘工作。
  • 無須停機即可調整叢集大小。您可以將 Bigtable 叢集的大小增加幾個小時,以處理大量負載,然後再次縮減叢集的大小,完全不需要停機。變更叢集大小後,Bigtable 通常只需要幾分鐘的時間,就能在負載下平衡叢集中所有節點的效能。
  • 分層式儲存空間 (預先發布版)。您可以將不常存取的資料,存放在費用較低的獨立儲存空間級別。您可以根據 Bigtable 資料存取需求,選擇最適合的分級儲存空間級別。
  • 自動調度資源。您可以設定 Bigtable 持續監控叢集 CPU 容量,並在必要時自動調整叢集中的節點數量。
  • 免費試用。您可以免付費探索 Bigtable 的功能和機制 10 天,並可選擇將免費試用期延長至 90 天。Bigtable 提供免費試用 Bigtable 執行個體,最多可使用 500 GB 的 SSD 儲存空間和 1 個節點叢集,讓您對 Bigtable 資料表執行大量讀寫作業,測試應用程式效能,瞭解 Bigtable 如何處理 SSD 支援的作業。
  • 記憶體內層 (預先發布版)。您可以針對重要且具時效性的資料,實現不到 1 毫秒的讀取延遲時間和高處理量。記憶體內層可擴充 Bigtable 現有的永久固態硬碟 (SSD) 和具成本效益的分級式儲存空間,並提供記憶體內層儲存空間 (RAM),在統一服務中提供整合式資料分級。

Bigtable 版本

Bigtable 版本是一種定價模式,不同價位提供的功能不盡相同。您可以選擇標準 Enterprise 版或進階 Enterprise Plus 版。詳情請參閱「版本總覽」。

適用場合

如果應用程式需要高處理量和擴充性來處理鍵/值資料,且每個值通常不超過 10 MB,Bigtable 就是理想選擇。Bigtable 也是批次 MapReduce 作業、串流處理/分析和機器學習應用程式的絕佳儲存引擎。

您可以使用 Bigtable 儲存和查詢下列類型的資料:

  • 時間序列資料,例如多部伺服器在不同時間的 CPU 和記憶體用量。
  • 營銷資料,例如購買歷史紀錄和消費者喜好。
  • 金融資料,例如交易記錄、股價和貨幣兌換匯率。
  • 物聯網資料,例如電錶和家用電器的用量報表。
  • 圖形資料,例如有關使用者間連接方式的資訊。

Bigtable 儲存空間模型

Bigtable 會將資料儲存在可大幅擴充的資料表中,每個資料表都是經過排序的鍵/值對應關係。資料表由「資料列」和「資料欄」組成,通常每一資料列描述單一實體,資料欄則包含各資料列個別的值。系統會為每列中的單一值建立索引。這個值稱為「資料列索引鍵」。彼此關聯的資料欄通常會分組為資料欄系列。每個資料欄都是以資料欄系列和資料欄限定詞的組合來識別,這個限定詞是該資料欄系列中的唯一名稱。

資料列與資料欄的每個交集可以包含多個「儲存格」。每個儲存格都包含該資料列和資料欄的資料,並附有專屬時間戳記版本。在資料欄中儲存多個儲存格,可記錄該資料列和資料欄的儲存資料隨時間變化的情形。Bigtable 資料表空間稀疏;如果特定資料列未使用某個資料欄,則不會佔據任何空間。

Bigtable 儲存模型圖表

在本圖中有幾點值得注意:

  • 資料列中可以有未使用的資料欄。
  • 指定資料列和資料欄中的每個儲存格都有專屬的時間戳記 (t)。

Bigtable 架構

下圖顯示 Bigtable 整體資源架構的簡化版本:

Bigtable 的整體架構。

如圖所示,所有用戶端要求都會先經過前端伺服器,再傳送至 Bigtable 節點。(在原始 Bigtable 論文中,這些節點稱為「tablet 伺服器」)。節點會組織成 Bigtable 叢集,屬於 Bigtable 執行個體 (叢集的容器)。

叢集的每一個節點處理一部分對叢集的請求。只要在叢集中新增節點,即可增加叢集可同時處理的要求數量。新增節點也會提高叢集的最大處理量。如果透過新增叢集啟用複製功能,也可以將不同類型的流量傳送至不同叢集。這樣一來,如果某個叢集無法使用,您就能容錯移轉至其他叢集。

Bigtable 資料表會分割成連續資料列組成的區塊,稱為「子表」,以平衡查詢的工作負載。(子表類似於 HBase 區域。) 子表以 SSTable 格式儲存在 Google 開發的檔案系統 Colossus 上。SSTable 提供從鍵到值的不可變更有序映射,其中的鍵和值均為任意位元組字串。每個 tablet 都與特定 Bigtable 節點相關聯。除了 SSTable 檔案外,所有寫入作業在 Bigtable 確認後,都會立即儲存在 Colossus 的共用記錄中,進一步提升耐用性。

重要的是,資料絕不會儲存在 Bigtable 節點本身;每個節點都有指標,指向儲存在 Colossus 的一組 tablet。因此:

  • 由於實際資料不會複製,因此從一個節點重新平衡資料表到另一個節點的速度很快。Bigtable 會更新每個節點的指標。
  • Bigtable 節點故障時,復原速度很快,因為只需將中繼資料遷移至替代節點。
  • Bigtable 節點故障時,資料不會遺失。
雖然記憶體內層 (預先發布版) 和分層儲存空間 (預先發布版) 的推出,增加了實體儲存空間模型的複雜度,但執行個體、叢集和節點的基本資源架構仍維持不變。這種混合式儲存架構可讓 Bigtable 在所有層級使用一致的儲存模型,無論資料實際位於 RAM、SSD 還是成本較低的儲存空間,您都能透過相同的語意介面存取資料。

如要進一步瞭解如何使用這些基本建構模塊,請參閱「執行個體、叢集和節點」。如要進一步瞭解如何與這些層級的資料互動,請參閱「存取資料」。

負載平衡

每個 Bigtable 可用區都由主要程序管理,負責平衡叢集內的工作負載和資料量。這項程序會將較忙碌或較大的 Tablet 分成兩半,並將較少存取/較小的 Tablet 合併在一起,視需要重新分配給各個節點。如果某個 tablet 的流量激增,Bigtable 會將該 tablet 分割成兩個,然後將其中一個新的 tablet 移至另一個節點。Bigtable 會自動管理分割、合併和重新平衡作業,您不必手動管理 Tablet。瞭解成效一文提供這項程序的詳細資訊。

為確保 Bigtable 發揮最佳寫入效能,請務必盡可能平均分配各節點的寫入作業。其中一種方法是使用不遵循可預測順序的資料列索引鍵。例如,使用者名稱往往在各字母之間大致均勻地分佈,因此將使用者名稱放在資料列索引鍵的開頭,可使寫入操作分佈地更均勻。

同時,將相關資料列分組並排在一起,可大幅提高同時讀取多個資料列的效率。舉例來說,如果您要儲存不同類型的天氣資料,資料列索引鍵可能是收集資料的位置,後面接著時間戳記 (例如 WashingtonDC#201803061617)。這種類型的資料列索引鍵會將來自某個位置的所有資料分組到連續的資料列範圍。對於其他地點,資料列將以不同的識別碼開頭;對於以相同速率收集資料的許多地點而言,寫入操作仍然會均勻地分佈於各子表之間。

如需有關為資料選擇合適鍵值的詳細資訊,請參閱選擇資料列索引鍵。

運算

Bigtable 根據工作負載需求提供不同的運算選項。根據預設,Bigtable 會使用叢集節點進行儲存和運算。

如果是高處理量的讀取工作,可以使用 Data Boost for Bigtable 進行運算。Data Boost 可讓您使用無伺服器運算傳送大型讀取工作和查詢,同時核心應用程式繼續使用叢集節點進行運算。Enterprise Plus 擴充了這些工作的能力,包括支援 SQL,以及存取 HDD 和分級式儲存空間資料。詳情請參閱「Bigtable Data Boost 總覽」。

如果特殊工作負載需要高處理量,且點讀取延遲時間低於 1 毫秒,您可以為 Bigtable 節點啟用記憶體內層。

支援的資料類型

在大多數情況下,Bigtable 會將所有資料視為原始位元組字串。Bigtable 只有在執行遞增作業時,才會嘗試判斷類型,此時目標必須是 64 位元整數,並編碼為 8 位元組大端序值。

記憶體和磁碟使用情況

以下各節說明 Bigtable 的幾個元件如何影響執行個體的記憶體和磁碟用量。

未使用的資料欄

Bigtable 資料列中未使用的資料欄不會占用該資料列的任何空間。每個資料列基本上都是鍵/值項目的集合,其中鍵是資料欄系列、資料欄限定詞和時間戳記的組合。如果資料列不含特定資料欄的值,就不會顯示鍵/值項目。

資料欄限定詞

資料欄限定詞會佔據資料列的空間,因為資料列使用的每一個資料欄限定詞均儲存於該資料列中。因此,使用資料欄限定詞做為資料通常很有效率。

如要進一步瞭解資料欄限定詞,請參閱「資料欄」。

壓縮

Bigtable 會定期重寫資料表,移除已刪除的項目、重新整理資料,提高讀取和寫入效率,並在分層儲存空間中移動資料。這項程序稱為壓縮。壓縮作業沒有設定選項,Bigtable 會自動壓縮資料。平均來說,壓縮作業需要一週才能完成,並執行資料刪除或將資料移至分層儲存空間等工作。

壓縮作業會執行垃圾收集程序識別的刪除作業。壓縮作業不會啟動資料壓縮;Bigtable 會在資料區塊永久儲存至儲存空間時,自動壓縮資料區塊。詳情請參閱「資料壓縮」和「垃圾收集」。 如要進一步瞭解分層儲存空間中的壓縮作業,請參閱「分層儲存空間的運作方式」。

變異和刪除操作

異動 (或變更) 資料列會占用額外的儲存空間,因為 Bigtable 會依序儲存異動,且只會定期壓縮。Bigtable 壓縮資料表時,會移除不再需要的值。如果您更新了儲存格中的值,原始值和新的值都會儲存於磁碟上一段時間,直到資料被壓縮為止。

刪除操作也會佔據額外的儲存空間,至少短時間內是如此,因為刪除其實是一種特殊型態的變異操作。刪除操作會使用額外的儲存空間,而不是將儲存空間釋放出來,直到資料表被壓縮為止。

資料壓縮

資料保存至磁碟時,Bigtable 會使用智慧型演算法自動壓縮資料。您無法設定資料表的壓縮設定。

壓縮與緊縮

資料壓縮與資料表壓縮不同:

  • 資料寫入並保存至儲存空間時,系統會自動壓縮資料。壓縮功能可減少磁碟上資料區塊的實體位元組大小。儲存空間使用率指標和帳單費用會反映這個壓縮大小,而非未壓縮的邏輯資料大小。

  • 壓縮是非同步背景維護程序,壓縮作業會定期合併儲存檔案,並永久移除已刪除和過期的資料。壓縮作業不會啟動資料壓縮,因為資料已採用壓縮格式儲存。

瞭解如何儲存資料,以便有效壓縮資料,這點非常實用:

  • 隨機資料的壓縮效率不如模式化資料。模式化資料包括文字,例如你目前閱讀的頁面。

  • 如果相同的值彼此相近 (位於同一列或相鄰列),壓縮效果最好。如果資料列索引鍵的排列方式,能讓具有相同資料區塊的資料列相鄰,就能有效壓縮資料。

  • Bigtable 會壓縮大小不超過 1 MiB 的值。如果儲存的值大於 1 MiB,請先壓縮再寫入 Bigtable,這樣可以節省 CPU 週期、伺服器記憶體和網路頻寬。

資料持久性

使用 Bigtable 時,資料會儲存在 Colossus,這是 Google 開發的高耐用性檔案系統,使用Google Cloud資料中心的儲存裝置。您不需要執行 HDFS 叢集或任何其他檔案系統,即可使用 Bigtable。Colossus 會在幕後使用專屬儲存方法,實現比標準 HDFS 三向複製更優異的資料耐用性。

使用複製功能可進一步提升耐用性。Bigtable 會在您為複製執行個體的每個叢集所選的位置,維護資料的獨立副本。

一致性模型

單一叢集 Bigtable 執行個體提供同步一致性。根據預設,具有多個叢集的執行個體會提供最終一致性,但視工作負載和應用程式設定檔設定而定,在某些用途中,可以設定為提供讀取寫入一致性或同步一致。

安全性

Bigtable 資料表的存取權由 Google Cloud專案和您指派給使用者的 Identity and Access Management (IAM) 角色控管。舉例來說,您可以指派 IAM 角色,禁止個別使用者讀取資料表、寫入資料表或建立新執行個體。如果使用者無法存取您的專案,或沒有具備 Bigtable 適當權限的 IAM 角色,就無法存取您的任何資料表。

您也可以建立資料表的授權檢視表,代表資料表資料的子集,藉此控管資料表資料的存取權。接著,您可以向部分使用者授予授權 view 層級權限,而不授予資料表層級權限。 您可以在專案、執行個體、資料表或授權檢視表層級管理安全性。Bigtable 不支援資料列層級、資料欄層級或儲存格層級的安全限制。

加密

根據預設,儲存在 Google Cloud中的所有資料 (包括 Bigtable 資料表中的資料),都會使用與我們加密自家資料相同的強化金鑰管理系統,進行靜態資料加密。

如要進一步控管用於加密 Bigtable 靜態資料的金鑰,可以使用客戶自行管理的加密金鑰 (CMEK)。

備份

Bigtable 備份功能可讓您儲存資料表結構定義與內容的副本,日後即可還原至新的資料表。 無論來源資料表位於何處,您都可以使用備份和備份副本,將資料還原至任何區域或專案中的新資料表,只要該區域或專案有 Bigtable 執行個體即可。

變更資料擷取

Bigtable 以變更串流的形式提供變更資料擷取 (CDC) 功能。變更串流可讓您在資料表發生變更時,擷取並串流輸出資料變更。您可以使用 Dataflow 等服務讀取變更串流,支援資料分析、稽核、封存需求,以及觸發下游應用程式邏輯等用途。詳情請參閱「異動串流總覽」。

使用應用程式設定檔轉送要求

應用程式設定檔轉送政策可讓您控管哪些叢集會處理來自應用程式的傳入要求。Bigtable 根據使用的運算模型,提供下列類型的應用程式設定檔:

  • 標準應用程式設定檔:使用佈建的叢集節點處理要求。支援下列路由政策:

    • 單一叢集轉送:將所有要求傳送至單一叢集。

      只有使用單一叢集轉送機制的應用程式設定檔,才能啟用記憶體內層 (預先發布版)。如果將應用程式設定檔設為在叢集上使用記憶體內層,所有符合條件的點讀取流量都會使用記憶體內層。

    • 多叢集轉送至任何叢集:將要求傳送至執行個體中最接近的可用叢集,無論是所有叢集或指定叢集群組皆可。

  • Data Boost 應用程式設定檔:使用無伺服器運算,而非叢集的節點,將高處理量讀取工作與核心應用程式流量隔離。這些設定檔僅限於單一叢集路由政策。

其他儲存空間和資料庫選項

Bigtable 不是傳統的關聯式資料庫。 雖然它支援 SQL 查詢,但某些用途可能更適合其他資料庫選項。

  • 如需在線上分析處理 (OLAP) 系統中進行互動式查詢,建議使用 BigQuery。

如要進一步瞭解其他資料庫選項,請參閱資料庫服務總覽。 Google Cloud 也提供多種儲存空間選項。

後續步驟