Bigtable 和 BigQuery 都很 Big! 他們真的一樣嗎?
前言:
GCP 中的 Bigtable 和 BigQuery 對初學者來說很容易混淆,「都是資料庫而且都有 big 字首,用起來應該差不多吧?」這個就是我拋出來的疑問。在閱讀完這篇 GCP blog 的文章後做了此摘要。

從本質上來區分
Bigtable 是一個 wide-column NoSQL database 用在需要低延遲,高吞吐量的使用情境,適合用作 OLTP (Online Transaction Processing)
Bigtable is a NoSQL wide-column database optimized for heavy reads and writes.
BigQuery 則是企業級資料倉儲,用來作 OLAP (Online Analytical Processing) 用途
BigQuery is an enterprise data warehouse for large amounts of relational structured data.
特性比較
| 特性項目 | Bigtable | BigQuery |
|---|---|---|
| 類型 | Wide-Column NoSQL | Data Warehouse |
| 主要用途 | 即時寫入讀出、OLTP (無 Transaction) | 離線分析、報表查詢、OLAP |
| 應用場合 | 高吞吐量的應用程式(IoT、AdTech、ML 等) | 大量資料分析、報表統計、BI、SQL 查詢、ML |
| 查詢方式 | 以 Row Key 為主的 API / SDK 操作 | 標準 SQL 查詢 |
| 延遲表現 | 毫秒等級 | 秒~十秒以上 |
| 吞吐量擴展 | 水平擴展:每加一節點可處理約 10,000 QPS | 虛擬資源,根據查詢負載自動擴展 |
| 資料寫入方式 | 高頻寫入,每筆資料可自定欄位,適合大資料量 | 批次或串流寫入,用於歷史資料分析 |
| 資料量規模 | TB ~ PB 級 | PB 級 |
| 整合性 | 支援 HBase API;整合 Hadoop、Dataflow、Dataproc | 整合 Looker、Data Studio、AI Platform 等 |
| 計費方式 | 根據節點與儲存空間收費 | 根據掃描資料量計費 |
Bigtable 和 BigQuery 共同的特性
- 兩個都是雲原生的設計,能夠享用供應商提供的託管服務及雲端架構的優勢
- 高達 99.99% SLA
- 自動 Sharding 不用在人工處理邏輯
- 自動故障修復
思考
原文中提到:
It is safe to say that you would serve an application that uses Bigtable as the database but most of the times you wouldn’t have applications performing BigQuery queries.
這句話讓我反思公司內部的使用情境。有些專案團隊確實使用 BigQuery 作為應用程式的資料庫,但也因此遇到 API 回應時間的效能瓶頸。這可能是因為查詢需要大量資料聚合,例如繪製圖表時的操作。雖然 BigQuery 的基本開銷較高,但在某些情境下,省下的時間效益可能超過成本。
可能在公司使用 Bigtable 的情境
我們部門主要進行資料視覺化,應用程式需要即時撈取所選區間的資料並繪製成圖表。這類情境通常是讀多寫少,QPS 很低,但對 API 回應時間要求很高,且不需要 Transaction。基於 Bigtable 的低延遲特性,它可能是這類應用程式的理想選擇。
可能在公司使用 BigQuery 的情境
我曾設計過一個 Web Analytics 服務,用來追蹤系統使用者行為。這類情境不需要即時讀寫,但需要一次分析大量資料,非常適合使用 BigQuery。它的 SQL 支援和資料聚合能力能有效處理這類需求。
此筆記用來幫自己快速了解兩個服務的區別,比較可惜的是原文只有大概介紹區別以及特性,沒有講太多實作,未來有機會在深入研究 Bigtable 如 row key 這樣的設計。
Glossary
- OLTP (Online Transaction Processing): 適合即時讀寫,例如用戶登入、下單。
- OLAP (Online Analytical Processing): 適合查大量資料做統計報表。
- SLA:服務可用性保證,例如 99.99% 表示一年最多可能停機 52 分鐘。
附註:計算方式為365 天 × 24 小時 × 60 分鐘 × (1 - SLA),例如 99.99% SLA 的停機時間為365 × 24 × 60 × 0.01% = 52 分鐘。 - NoSQL:一種不走傳統關聯式資料表設計的資料庫類型,表的設計會依據查詢的方式來設計,不會看到傳統的正規化設計。常見有 key-value(Redis)、document(MongoDB)、wide-column(Bigtable)等。
- 雲原生:為雲端架構而設計的系統,強調自動擴展、自動修復、免維運。
- QPS:每秒查詢次數,數字越高代表系統越能撐過高流量的負載。
- Sharding:把資料分散存放到不同機器上,為了擴展與加速。