# 《Bigtable 實戰手冊:從設計到部署的完整指南📒📙📘》  ## 📒 摘要 本文會詳細說明 Bigtable 如何透過分散式架構來處理大量資料,教你設計資料表和 Row Key 的技巧,提供查詢效能優化的建議,並示範實際的 CLI 操作範例。讀完這份指南後,希望能幫助你學會: * 如何根據你的應用需求設計高效能的 Bigtable Schema(資料結構) * 如何使用 cbt 工具進行資料查詢與管理 * 在大規模 IoT 數據、用戶行為分析等場景下,如何發揮 Bigtable 的高擴展性與效能優勢 參考連結:[Google Cloud Skills Boost](https://www.cloudskillsboost.google/focuses/92496?catalog_rank=%7B%22rank%22%3A1%2C%22num_filters%22%3A0%2C%22has_search%22%3Atrue%7D&parent=catalog&search_id=47567047)  **source: https://cloud.google.com/bigtable?hl=zh_tw** ## 📒 什麼是 Bigtable Cloud Bigtable 是 Google Cloud 提供的分散式、可擴展且高效能的 NoSQL 資料庫服務,適合儲存與處理大量非結構化或串流資料。它能根據 Cluster 和 Node 數量動態調整查詢與寫入效能,常見應用包括 IoT 時間序列資料收集、即時用戶行為追蹤、金融交易紀錄、搜尋索引與預測性維護分析等。 ### 📙 適用場景: - 超大規模時間序列資料(如智慧電表、感測器) - 分析型工作負載(如推薦系統、用戶行為分析) ### 📙 架構重點: - 可建立多個 Instance,每個 Instance 下可有多個 Cluster 與 Node,靈活擴充計算與儲存資源。 - Instance:Bigtable 的服務單位,可包含多個 Cluster。 - Cluster:一組可橫向擴充的計算與儲存節點,影響效能與可用性。 - Node:執行實際讀寫作業的節點,增加節點數可提升效能。 - 一個服務可建立多個 Instance,每個 Instance 可包含多個 Cluster 與 Node。 -  - Cluster 配置:  ### 📙 利用UI操作 可以點選服務儀錶板左側的"big table studio", 會出現可以操作的介面並利用SQL query去搜非結構化資料,邏輯跟使用規則有點像amazon redshift  ### 📙 Bigtable 的 Query 結構配置  * **Tables(表格)** :類似 Excel 表格,是 Bigtable 中存放資料的容器。 * **Column Families(欄位家族)**:將相關資料欄位歸類在一起,方便管理與節省空間。例如:`UserSessions`、`dgda`。 * **Views(檢視)**:可用不同角度查看同一份資料,不會額外佔用儲存空間。 * **Materialized Views(實體化檢視)**:預先計算並儲存常用查詢結果,查詢時可直接取得,提升效率。 * **Authorized Views(授權檢視)**:設定不同權限,讓不同使用者僅能存取被授權的資料範圍。 ## 📒 非結構化資料結構解析  Bigtable 通常將資料存入特定 Table,並透過 Row Key 優化查詢與寫入效率。例如: - **Row Key**: Bigtable 用來唯一識別並排序每筆資料列的鍵,決定資料儲存與查詢效率的關鍵欄位。(範例:"user0#1638940844350") - **user0**:用戶或裝置識別碼 - **1638940844350**:時間戳,記錄資料產生時間 對應的 Column Family 可儲存如下資料: ```json { "blue_hat": "viewed details", "green_jacket": "seen", "purple_dress": "seen", "purple_jacket": "" } ``` 這代表使用者 user0 在特定時間點: - 瀏覽了藍色帽子(viewed details) - 看過綠色夾克與紫色洋裝(seen) - 查閱紫色夾克但尚未有動作(空值) 透過這種結構設計,Bigtable 能高效記錄與查詢大規模 IoT 或用戶行為資料,並藉由良好的 Row Key 與 Column Family 規劃,確保查詢效能與資料彈性儲存。 #### Bigtable 最有效率的查詢方式如下: - 直接以 row key 查詢 - 以 row key 前綴查詢 - 以起始與結束 row key 定義的範圍查詢 ## 📒 Bigtable 特色與查詢建議 ### 📙 資料分類整理 * 將相同類型的資料放在同一個 column family,並取簡短有意義的名稱。 ### 📙 善用欄位名稱 * 將欄位名稱作為資料內容,避免每列重複存相同值,節省儲存空間。 ### 📙 完整性原則 * 將同一事件(如一次購物的所有資訊)存於同一 row,確保資料完整。 ### 📙 設計好用的 Row Key - 根據查詢需求設計 row key,方便範圍查詢。 - 避免以時間戳或連續編號作為 row key 開頭,以防資料分布不均。 - 建議以共通值(如國家)開頭,細部值(如城市)結尾,例如:`台灣_台北`。 ### 📙 Row Key 組合技巧 可用易懂的字串(如「使用者ID_時間戳」)組合 row key,便於管理與查詢。 ## 📒 配置 Bigtable CLI 要使用 `cbt` CLI 連接 Bigtable,首先需要在 Cloud Shell 中更新 `.cbtrc` 配置檔案,並設定你的專案 ID 和 Bigtable 實例 ID。 > * `cbt` CLI 是一個用於管理與操作 Bigtable 的命令列工具。你可以透過它在終端機直接建立表格、插入或查詢資料、管理 row key 及檢查表格狀態。 > * `.cbtrc` 檔案是 `cbt` CLI 的設定檔。它儲存預設的專案 ID、實例 ID 及 Google Cloud 認證位置,讓你在執行 `cbt` 指令時無需重複輸入這些參數。 ### - 1. 設定專案 ID 在 Cloud Shell 中執行以下命令,將專案 ID 寫入 `.cbtrc` 檔案: ```bash echo project = $(gcloud config get-value project) >> ~/.cbtrc ``` ### - 2. 查看 Bigtable 實例 使用以下命令查看專案中的所有 Bigtable 實例,確認你的實例名稱(例如:`personalized-sales`): ```bash cbt listinstances ``` ### - 3. 設定實例 ID 將實例 ID 寫入 `.cbtrc` 檔案: ```bash echo instance = personalized-sales >> ~/.cbtrc ``` ### - 4. 確認設定 使用以下命令確認 `.cbtrc` 檔案的內容: ```bash! cat ~/.cbtrc ``` 應顯示如下內容: ```ini project = <project-id> instance = personalized-sales ``` ### - 5. 查看表格列表 使用以下命令查看實例中的所有表格: ```bash cbt ls ``` 此例中,應顯示有一個表格 `UserSessions`。 此配置步驟完成後,你可以開始使用 `cbt` 進行 Bigtable 的基本操作。雖然 `cbt` 主要用於調試和探索,對於生產環境的 CRUD 操作,建議使用 Bigtable 客戶端庫。 ## 📒 使用 CLI 操作 Bigtable 以下說明指令用途與執行結果: ```shell student_01_dcf201d51bb2@cloudshell:~ (qwiklabs-gcp-00-19c57ef10bb9)$ cbt set test-sessions green1939#1638940844260 Interactions:red_hat=seen 2025/06/30 06:09:30 -creds flag unset, will use gcloud credential student_01_dcf201d51bb2@cloudshell:~ (qwiklabs-gcp-00-19c57ef10bb9)$ cbt set test-sessions blue2737#1638940844260 Sales:sale=blue_dress#blue_jacket 2025/06/30 06:09:37 -creds flag unset, will use gcloud credential student_01_dcf201d51bb2@cloudshell:~ (qwiklabs-gcp-00- ``` - `cbt set` 用於在 `test-sessions` 表中新增或更新資料。例如,將 `green1939#1638940844260` 這筆資料的 `Interactions:red_hat` 欄位設為 `seen`。 ```shell 19c57ef10bb9)$ cbt read test-sessions 2025/06/30 06:09:42 -creds flag unset, will use gcloud credential ---------------------------------------- blue2737#1638940844260 Sales:sale @ 2025/06/30-06:09:37.958000 "blue_dress#blue_jacket" ---------------------------------------- green1939#1638940844260 Interactions:red_hat @ 2025/06/30-06:09:31.301000 "seen" ``` - `cbt read` 會讀取並顯示表內所有資料,結果如上所示。 若使用以下指令,可以查詢 `UserSessions` 表的前 5 筆資料,並看到類似下圖的資料結構: ```shell cbt read UserSessions count=5 ```  此外,也可以用 `cbt lookup` 直接查詢指定 row key 的資料: ```shell cbt lookup UserSessions yellow582#1638940844260 ``` 查詢結果範例如下: ```shell ---------------------------------------------- yellow582#1638940844260 Interactions:blue_jacket @ 2022/06/08-19:47:33.864000 "seen" Sales:sale @ 2022/06/08-19:47:33.864000 "yellow_skirt" ``` 這些 CLI 指令可協助你快速存取與查詢 Bigtable 資料。 ## 📒 總結摘要 本文詳細說明了 Bigtable 如何透過分散式架構來處理大量資料,教你設計資料表和 Row Key 的技巧,提供查詢效能優化的建議,並示範實際的 CLI 操作範例。 讀完這份文章希望你已經知道了: 1. 如何根據你的應用需求設計高效能的 Bigtable Schema(資料結構) 2. 如何使用 cbt 工具進行資料查詢與管理 3. 在大規模 IoT 數據、用戶行為分析等場景下,如何發揮 Bigtable 的高擴展性與效能優勢
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up