跳至主要內容
ESC
PCA 雲端架構師之旅 — 第 7/13 篇

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

PCA 雲端架構師之旅 07 — 儲存特性分析
Updated: 2026-07-17

「這個要用 Cloud SQL 還是 Spanner?Firestore 還是 Bigtable?」這大概是 PCA 考試裡出現頻率最高的一類題,也是實務上最常被人憑感覺亂選的東西。

但這題其實不該用「選服務」的方式去想。順序反了。你該先把資料攤開來看清楚——它長什麼樣、多大、讀多還寫多、能不能接受慢一點才一致——讓資料的特性自己把選項收斂掉。這篇就先做這一步,特性分析(characteristics analysis),完全不碰服務選型。服務名稱一個都別急著講。

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

訂單、電子書、庫存與分析事件先經過結構、讀寫、一致性、延遲、規模與生命週期檢查,再分流到不同儲存類型的圖

圖解:訂單、檔案、即時庫存與分析事件的脾氣不同。先檢查結構、讀寫模式、一致性、延遲、規模與生命週期,才會自然分流到關聯式、文件、寬欄或物件儲存;跳過這一步,常會把所有資料硬塞進同一個資料庫。


為什麼要先分析、後選型

我看過太多團隊一上來就在白板上寫服務名字。「流量會爆,用 Spanner 吧」「這是 NoSQL,丟 Firestore」——聽起來很果斷,但十次有八次選錯,因為他們根本還不知道自己在存什麼。

最經典的反面教材,是把所有東西塞進同一個資料庫。早期圖快,訂單、商品、使用者行為、報表查詢全擠在一台 Cloud SQL 上。前半年沒事,等資料量上來,分析查詢一跑,整台機器的交易延遲就被拖垮,下單變慢、客訴進來,最後只好半夜緊急把分析流量搬走。這種痛,每個做久的人多少都經歷過一次。問題從來不在 Cloud SQL 不夠好,而在於一開始沒去區分「這些資料的脾氣根本不一樣」。

所以特性分析不是考試專用的形式主義。它是讓你在動手前,先承認一件事:你手上不是「一坨資料」,而是好幾種脾氣完全不同的資料,硬要它們住同一間房,遲早出事。

考試把這件事濃縮了。PCA 的 case study 幾乎都會丟給你資料量、成長率、查詢模式的線索——「訂單每年 2000 萬筆、保留 7 年、需要跨區強一致」「使用者點擊紀錄每日 5 億筆」。這些數字看起來像背景設定,其實是出題者把答案的一半藏在裡面:能跨區強一致又能裝 7 年訂單的服務,本來就沒幾個。題目不會明說答案,它丟幾個似是而非的選項,等你用資料特性把錯的刪掉。

📝 考場提點

看到資料量、成長率、保留年限、一致性要求這些字眼,立刻在草稿紙上把它標出來,這幾乎都是消去法的鑰匙。「每日 5 億筆」直接刪掉 Cloud SQL;「跨區強一致」基本上把答案推向 Spanner;「保留 7 年但平常很少查」就是在提示你做冷熱分層。別一看到「關聯式」就反射選 Cloud SQL——出題者最愛在這種地方放陷阱。


該從哪幾個角度看一筆資料

把一筆資料拿在手上,值得問的角度其實就這幾個。我習慣這樣盤:

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

這八個裡,新手最常漏掉的是讀寫比跟生命週期。同樣是「訂單」,讀寫比 1:1 跟 100:1,背後的架構天差地遠;保留 7 年的訂單和保留 7 天的點擊紀錄,成本策略也完全不是同一回事。我會特別盯這兩欄,因為它們最容易被「反正是關聯式資料」這種粗分類蓋過去。

至於 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 和 OLAP。OLTP(線上交易處理,Online Transactional Processing)寫得多、一次動一筆、要求低延遲,下單就是典型;OLAP(線上分析處理,Online Analytical Processing)反過來,大量讀、做聚合、可以等個幾秒。一筆資料是哪一種,幾乎就決定了它該住哪一棟。把交易資料丟進分析型倉儲、或拿交易資料庫硬跑報表,就是前面講的「全擠一台」會爆掉的根因。


我盤資料時實際在問的問題

維度表是 checklist,但實戰上我不會八欄逐一填完才動腦。拿到一筆資料,腦袋裡先跑這幾個快問快答,通常前兩問就能把它定位個七八成:

它是拿來交易還是拿來分析的?這一刀先砍下去,OLTP 跟 OLAP 兩邊的服務完全不同棟。接著問它需不需要跨 region 強一致——這題很關鍵,因為「需要」基本上就只剩 Spanner 一條路,而「不需要」卻硬上 Spanner,是在燒錢。再來看查詢是點查(拿單一 key 撈一筆)還是範圍掃描,這會直接影響 key 怎麼設計、服務怎麼挑。然後是熱資料多久變冷,決定你要不要做分層。最後一定要問有沒有合規限制,因為合規常常不是「加個功能」,而是直接框死你的選項——可能逼你用 regional storage、強制 CMEK(客戶自管金鑰)、把網路關進 VPC-SC(VPC Service Controls)。

這套問法沒有標準答案表可以背,但問順了你會發現,很多看起來很糾結的選型,問到第二題就分出勝負了。


走一遍範例 — 登雲書店

回到我們的老朋友。登雲書店上雲,到底有哪些資料要存?我把主要的幾類拉出來做特性分析。注意,下面這張表只到「結論」為止——還是不選服務,那是下一篇的事。先忍住手。

資料特性表

資料結構規模/成長讀寫比一致性延遲要求查詢模式生命週期敏感度
商品目錄結構化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 資料。這意味著它不只是「挑哪個資料庫」的問題,而是整個落地方式都被合規綁住——得放進獨立 project、加密金鑰走 CMEK、網路關進 VPC-SC。這條等到後面講安全時會再深入,但在特性分析這一步就得先把旗子插上。

順手把生命週期也分好層

訂單保留 7 年、點擊紀錄保留 18 個月、圖片長期擺著——這些「放很久但越久越少碰」的資料,如果一路用最貴的熱儲存裝到底,帳單會很難看。所以特性分析的尾巴,順手把冷熱分層也想一遍:

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

實務上這一層常被忘記,等到財務長盯著雲帳單問「為什麼三年前的圖片還在用最貴的儲存等級」,才回頭補生命週期政策。在設計階段順手定好,比事後清理省事太多。

Cloud Storage 建立值區的「儲存級別」設定區塊,可選 Autoclass 或設定預設級別,展開後有 Rapid、Standard、Nearline、Coldline、Archive 五個單選項,每個旁邊標註存取頻率,如 Standard 適合經常存取、Nearline 每月存取少於一次、Coldline 每季少於一次、Archive 每年不到一次

上面那張分層表在 Console 裡就是這塊「儲存級別」選單。這裡藏著一個常被反著踩的考點:上表教你別把冷資料留在貴的等級,但 Nearline/Coldline/Archive 各有 30/90/365 天的最短儲存時間 ——資料還沒住滿天數就搬走或刪掉,系統照樣按整段收你錢,太早搬反而更貴。所以生命週期政策不是越早往下沉越省,得先確定它在上一層真的待夠了。實在懶得算,最上面那個 Autoclass 讓 GCP 自動幫你搬,也是題目裡會出現的省事解。

走到這裡,你還是沒決定「訂單到底是 Spanner 還是 Cloud SQL」,但你已經很清楚:哪些資料得當祖宗供著、哪些丟給便宜的最終一致服務就好。這就是這一步的全部目的。


幾個容易翻車的地方

把所有資料塞同一個資料庫,前面講過了,這是最大的雷,本質是 monolith 病——一台機器同時扛 OLTP、OLAP、全文檢索,結果三樣都做不好。願意花力氣分清楚資料特性,多半就是為了不再踩這個坑。

第二個是低估資料量的複合成長。「每日 5 億筆」單看還好,乘上時間就嚇人:光是 18 個月的保留期,每日 5 億筆 × 365 天 × 1.5 年 就快 2700 億筆,這個量級 Cloud SQL 根本扛不住。新手常只看當下的單日數字就拍板,沒去算它累積一年多會變成什麼怪物。

第三個比較細,但很考經驗:索引與查詢成本。Firestore 預設幫你每個欄位都自動建索引,欄位一多,寫入成本會悄悄爬上去;Bigtable 則完全相反,它沒有 secondary index,所有查詢都得靠 row key 設計撐住——這兩種特性如果在選型時沒先想清楚,上線後要改的代價很高。

最後一個是合規。很多人講到合規腦袋裡只浮出「加密」兩個字,但 PCI DSS 要的遠不只如此——網路隔離、稽核紀錄、金鑰管理一樣都不能少。考試裡只要看到金流、信用卡,就別只想加密,把這一整串都拉進考量。

📝 考場提點

遇到合規題,先在腦中過一遍「資料駐留 → 加密金鑰 → 網路隔離 → 稽核」這條線,再去看選項。出題者很愛放一個「技術上最漂亮」但踩了某條合規的選項當誘餌——例如把金流資料丟進 BigQuery 做即時分析,效能滿分、合規零分。時間分配上,case study 的合規題通常牽一髮動全身,值得多花 30 秒確認,不要為了趕進度跳過。


延伸閱讀


下一步:資料特性表到手,接下來就要動真格——把每一筆資料對應到具體的 GCP 產品,正式做選型。這部分交給系列第 8 篇 儲存與資料庫選型

🎯 換你練習

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

PCA 雲端架構師之旅 — 7/13 完成 查看系列全覽 →

留言討論

徽章解鎖!