在Java面試中,分庫分表是解決數據庫性能瓶頸和擴展性問題的常見方案。分庫策略主要關注如何將數據水平拆分到多個數據庫實例中,以下是詳細的分庫策略解析:
一、分庫策略的核心目標
- 負載均衡:分散數據存儲和查詢壓力,避免單庫成為性能瓶頸。
- 擴展性:支持業務增長,通過增加數據庫實例線性提升系統容量。
- 業務適配:根據查詢模式和數據特性選擇最優拆分方式,減少跨庫操作。
二、常見的分庫策略
1. 哈希分庫(Hash Sharding)
- 原理:根據分庫鍵(如用戶ID)計算哈希值,按數據庫實例數取模,確定數據歸屬。
int dbIndex = Math.abs(userId.hashCode()) % dbCount;
- 適用場景:
- 數據分布均勻,無明確范圍查詢需求(如用戶表、訂單表)。
- 需要避免熱點問題(如電商系統中用戶訂單分散存儲)。
- 優點:
- 數據分布均勻,各庫負載相對均衡。
- 直接路由,查詢效率高。
- 缺點:
- 擴容復雜:新增庫時需重新哈希,數據遷移成本高。
- 跨庫查詢困難:如按非分庫鍵字段查詢需掃描所有庫。
</