應用資料庫 進階
資料庫分片(Sharding)策略有哪些?各自的優缺點為何?
資料庫分片(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 評分
