跳至主要內容
ESC
pca-architect-journey — 第 7/13 篇

PCA 架構之旅 07 — 儲存特性分析

PCA

「要用 Cloud SQL 還是 Spanner?要用 Firestore 還是 Bigtable?」這是 PCA 考試最常見的一類題,也是實務上最常被用直覺亂選的項目。

比較好的做法是,先對資料做特性分析(characteristics analysis),讓資料本身告訴你答案。這一步先不選服務,只做分類。

這是 PCA 架構之旅 的第七步。上一篇 06 · REST API 設計


為什麼這一步重要

在 PCA case study 題目中怎麼出現

PCA case study 幾乎都會給你資料量、成長率、查詢模式的線索。例如「訂單每年 2000 萬筆、保留 7 年、需要跨區強一致」「使用者點擊紀錄每日 5 億筆」。這些數字其實已經幫你刪掉大部分選項了。

題目不會直接告訴你答案是哪個服務,它會塞幾個似是而非的選項,要你自己用資料特性去刪掉錯的那些。

考生常見錯誤

  • 看到「關聯式」就選 Cloud SQL,看到「NoSQL」就選 Firestore:這樣分太粗了。
  • 忽略讀寫比與延遲要求:同樣是訂單,讀寫比 1:1 跟 100:1,該選的服務就差很多。
  • 忘記資料生命週期:保留 7 年的訂單跟保留 7 天的點擊紀錄,成本策略差很大。

核心概念

分析資料的 8 個維度

維度問題
結構(Structure)結構化、半結構化、非結構化?
規模(Size)單筆多大?總量多少?成長率?
讀寫比(R/W Ratio)讀多寫少?寫多讀少?
一致性(Consistency)強一致還是最終一致?
延遲(Latency)毫秒級?秒級?分鐘級?
查詢模式(Access Pattern)點查?範圍查?全文檢索?聚合?
生命週期(Lifecycle)熱、溫、冷、歸檔的時程?
敏感度(Sensitivity)PII、PCI、PHI 合規要求?

GCP 儲存服務快速對照

服務定位關鍵字
Cloud SQL中小型關聯式MySQL/PostgreSQL/SQL Server、zonal/regional HA
AlloyDB高效能 PostgreSQL高 OLTP + 分析工作負載
Spanner全球強一致關聯式multi-region、horizontal scale、SQL
Firestore文件資料庫行動/Web、即時同步、中小規模
Bigtable寬列 NoSQL超大量時間序列、IoT、低毫秒延遲
BigQuery分析型資料倉儲PB 級 OLAP、columnar、SQL
Memorystore記憶體快取Redis/Memcached、毫秒以下
Cloud Storage物件儲存大檔案、備份、靜態資產
Filestore網路檔案系統NFS、legacy lift-and-shift

OLTP vs OLAP:前者是線上交易處理(Online Transactional Processing),寫多、單筆、低延遲;後者是線上分析處理(Online Analytical Processing),大量讀、聚合、可以等秒級。


思考框架

對每一筆資料問:

  1. 它是交易資料還是分析資料? OLTP 跟 OLAP 用的服務不一樣。
  2. 它需要跨 region 強一致嗎? 需要的話就只有 Spanner,不需要就別花那個錢。
  3. 查詢是點查還是範圍掃描? 決定 key 設計與服務選擇。
  4. 熱資料多久變冷? 決定分層儲存策略。
  5. 有沒有合規限制? 可能強制 regional storage、CMEK、VPC-SC。

走一遍範例 — 登雲書店

這裡對 8 個服務牽涉到的主要資料做特性分析。下面只列結論表,先不做服務選型,那是下一步的事:

資料特性表

資料結構規模/成長讀寫比一致性延遲要求查詢模式生命週期敏感度
商品目錄結構化120 萬 SKU、年增 20%1000:1最終一致可接受P95 < 50ms點查 + 關鍵字 + 分類長期
商品全文索引半結構化同上10000:1最終一致P95 < 100ms全文、fuzzy可重建
庫存數量結構化120 萬列、少量更新50:1強一致(避免超賣)P99 < 100ms點查長期
購物車半結構化同時 5 萬台裝置5:1單裝置強一致即可P95 < 50msby userId30 天自動過期中(PII)
訂單結構化每年 600 萬筆、保留 7 年2:1強一致 + 跨區容錯P95 < 200ms點查 + 多條件熱 90 天 / 溫 1 年 / 冷 7 年高(PII)
金流明細結構化每筆訂單 1–3 列1:1強一致 + 可稽核P95 < 300ms點查、範圍永久、WORM高(PCI)
閱讀進度半結構化每會員 × 每本書一筆20:1最後寫入優先P95 < 100ms點查(userId + bookId)熱到下次使用中(PII)
點擊與瀏覽紀錄半結構化每日 5 億筆、保留 18 個月寫多(分析讀)最終一致寫入 < 10ms、分析秒級時間範圍、聚合自動生命週期過渡中(去識別)
分析型事實表結構化每日 +100 GB、保留 3 年讀多(D+1)最終一致查詢秒級大規模聚合分割 + 壓縮
商品圖片非結構化單張 500KB、全量 5 TB極讀多最終一致CDN 命中 < 50msby objectKey長期 + CDN
批次匯入檔非結構化單檔最大 200MB一次性分鐘級by jobId30 天保留稽核中(商業敏感)

從特性看出的隱含結論

  • 訂單 + 金流明細:強一致 + 跨區容錯 + 高敏感度 → 指向 Spanner 或 Cloud SQL HA(下一篇討論選型)。
  • 庫存:強一致且頻繁更新 → 需要 ACID,但資料量小,不一定要 Spanner。
  • 點擊紀錄:寫多、時間序列、分析型 → 指向 Bigtable(即時)+ BigQuery(分析)分層。
  • 商品目錄:讀極多、可最終一致 → 指向 Firestore + Memorystore 快取 + CDN。
  • 商品圖片:非結構化、讀極多 → 大概只有 Cloud Storage + Cloud CDN 這個解了。
  • 金流:PCI DSS → 必須獨立 project、加密金鑰走 CMEK、網路走 VPC-SC。

資料生命週期建議

階段訂單點擊紀錄圖片
OLTP 主儲存即時儲存Standard + CDN
同主儲存,降副本NearlineNearline
匯出 BigQuery + NearlineColdlineColdline
歸檔Archive StorageArchiveArchive

走到這一步,你還不用決定「用 Spanner 還是 Cloud SQL」,但已經很清楚哪些資料得認真對待、哪些可以丟給便宜的最終一致服務就好。


常見陷阱

  • 把所有資料都塞同一個資料庫:典型的 monolith 症狀,一個資料庫同時扛 OLTP、OLAP、全文檢索,結果三個都做不好。
  • 忽略資料量的複合成長:每日 5 億筆 × 365 天 × 3 年 = 5000 億筆,Cloud SQL 撐不住這個量級。
  • 忘記索引與查詢成本:Firestore 預設每個欄位都自動建索引,寫入成本會很高;Bigtable 沒有 secondary index,全靠 row key 設計。
  • 合規只想到加密:PCI DSS 還要求網路隔離、稽核紀錄、金鑰管理,光加密不夠。

延伸閱讀


下一步:有了資料特性表,下一篇就要實際挑資料庫與儲存服務,把每一筆資料對應到具體的 GCP 產品上。這部分交給系列的第 8 篇 儲存與資料庫選型

🎯 換你練習

理論讀完,換自己來。到 架構師設計工作坊 · 步驟 7 填入你的 case study,邊寫邊內化。

pca-architect-journey — 7/13 完成 查看系列全覽 →

留言討論

徽章解鎖!