Bigtable 總覽

Bigtable 是一種稀疏型資料表,可以擴充到數十億資料列和數千個資料欄,讓您儲存數 TB 甚至是數 PB 的資料。Bigtable 非常適合以低延遲儲存大量單一鍵資料。Bigtable 具備低延遲的特性,也支援高總處理量讀寫作業,是 MapReduce 作業的理想資料來源。

Bigtable 會透過多個用戶端程式庫向應用程式公開,包括 Java 適用的 Apache HBase 程式庫支援的擴充功能。因此,它能與現有的 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 毫秒以內,並滿足總處理量需求。記憶體內層會透過記憶體內層儲存空間 (RAM),擴充 Bigtable 現有的永久固態硬碟 (SSD) 和具成本效益的分層儲存空間,在統一服務中提供整合式資料分層。

Bigtable 版本

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

適用場合

Bigtable 非常適合需要高處理量和可擴充性的鍵/值資料應用程式,其中每個值通常不超過 10 MB。Bigtable 也是批次 MapReduce 作業、串流處理/分析和機器學習應用程式的絕佳儲存引擎。

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

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

Bigtable 儲存模型

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

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

Bigtable 儲存模型圖表

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

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

Bigtable 架構

下圖為 Bigtable 整體資源架構的簡化版:

Bigtable 的整體架構。

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

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

Bigtable 資料表會分割成連續資料列所組成的區塊,稱為「子表」,以協助平衡查詢的工作負載。(子表類似於 HBase 區域。) 子表以 SSTable 格式儲存在 Google 開發的檔案系統 Colossus 上。SSTable 提供從鍵到值的不可變更有序映射,其中的鍵和值均為任意位元組字串。每個子表會與特定 Bigtable 節點相關聯。除了 SSTable 檔案之外,所有的寫入操作一旦被 Bigtable 認可,均儲存於 Colossus 的共享日誌中,更提高了資料的持久性。

重要的是,每個 Bigtable 節點本身一律不會儲存任何資料,而是設定了資料連結,指向一組儲存在 Colossus 的子表。因此:

  • 將平板電腦從一個節點重新平衡到另一個節點時,由於系統不會複製實際資料,因此速度很快。Bigtable 會更新每個節點的指標。
  • Bigtable 節點故障時,系統會快速復原,因為只需要將中繼資料移轉至替代節點。