應用資料庫 進階

資料庫分片(Sharding)策略有哪些?各自的優缺點為何?

AI 練習作答

資料庫分片(Sharding)

什麼是 Sharding?

將資料水平分割,分散至多個資料庫節點(shard),每個 shard 儲存資料的子集。

分片策略

1. Range-based Sharding(範圍分片)

依值範圍分配(如 user_id 1-100000 → shard1) ✅ 範圍查詢效率高 ❌ 可能造成熱點(如 ID 增長集中在最新 shard)

2. Hash-based Sharding(雜湊分片)

shard = hash(key) % N ✅ 資料均勻分佈,避免熱點 ❌ 範圍查詢需掃描所有 shard;擴展 shard 數量時需要大量資料遷移

3. Directory-based Sharding(目錄分片)

維護一張查詢表(lookup table)記錄 key → shard 的映射 ✅ 靈活,可動態調整 ❌ lookup table 本身是瓶頸,需 HA 設計

挑戰

  • 跨 shard JOIN:需應用層聚合,效率低
  • 分散式交易:ACID 難以保證,通常降為最終一致性
  • 擴展:增加 shard 需要 resharding(資料遷移)

替代方案

考慮先使用 垂直分片(分庫,按業務切分)或讀寫分離,Sharding 是最後手段。

面試加分:Consistent Hashing(一致性雜湊)解決了 Hash Sharding 的 resharding 問題,Redis Cluster 即採用此機制。

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分