垂直擴展換機器,水平擴展換複雜度

做法白話
垂直擴展(scale up)把同一台機器變強4 核 → 64 核,16G → 512G,HDD → NVMe
水平擴展(scale out)加更多台機器1 台 → 100 台

為什麼關聯式資料庫傳統上偏向垂直

因為它承諾的東西需要「看得到全部資料」:

  • JOIN 要能配對任意兩張表的任意兩列
  • 交易要能原子地改動任意幾列
  • 外鍵約束要能檢查另一張表

資料全在一台機器上時,這些都是本機操作。 散到 100 台之後,JOIN 變跨網路、交易變分散式協調(2PC)、外鍵檢查變遠端查詢——複雜度和延遲都是階躍式上升。所以最省事的做法就是:別拆,換一台更大的。

垂直的天花板

問題說明
硬體上限單機核心數、記憶體有物理極限,到頂就沒了
成本非線性效能 2 倍的機器,價格往往遠超 2 倍
單點故障一台機器,掛了就全掛
升級要停機雲端好一些,但通常仍要重啟

水平剛好相反:理論上沒有上限,但複雜度就是你付的代價。

「RDB 只能垂直擴展」已經過時了一半

RDB 其實有一整排水平選項,差別在各自擴的是什麼:

讀取副本(read replica)  → 只能擴讀,寫還是單點
分區(partitioning)      → 同一台機器內切表,不是真的擴展
Vitess / Citus            → 在 MySQL / PostgreSQL 上做真分片
CockroachDB / Spanner     → 原生分散式 SQL

真的要水平分片時,怎麼決定資料落在哪台,見 key-range sharding 用順序換熱點,hash 用均勻換範圍查詢。