單機 MySQL
│
▼ (QPS 瓶頸、寫入壓力)
讀寫分離 (主從複制)
│
▼ (寫入單庫瓶頸、同步延遲)
垂直分庫 (業務解耦)
│
▼ (單表數據量/寫入超限)
水平分表 (分片演算法)
讀寫比 > 3:1,寫入壓力尚可,主要瓶頸在讀並發。
將高頻寫入、核心業務表拆分到獨立庫/實例:
user_db:用戶、認證、配置 (高寫、高查)order_db:訂單、交易、流水 (高寫、強一致)log_db:日誌、審計、行為 (超高寫、可降級)| 維度 | 分庫前 | 分庫後 |
|---|---|---|
| 寫入並發 | 單庫瓶頸 | 分散到多實例 |
| 同步延遲 | 全庫影響 | 故障域隔離 |
| 跨庫查詢 | JOIN 直接可用 | 應用層組裝 / 冗餘字段 |
| 事務 | 本地事務 | 分布式事務 (TCC/Seata) 或 避免跨庫 |
| 運維複雜度 | 低 | 高 (多實例監控、備份、變更) |
| 演算法 | 原理 | 優點 | 缺點 | 擴容難度 |
|---|---|---|---|---|
| 取模 Hash | user_id % N | 簡單、均勻 | 擴容需全量重分片 | 極高 (全量遷移) |
| 範圍分片 | 1-1000→分片1, 1001-2000→分片2 | 範圍查詢快、擴容只遷移邊界 | 熱點傾斜 (新用戶集中新分片) | 中 |
| 映射表 | 獨立表存 user_id → shard_id | 完全可控、業務無關 | 額外查詢開銷、映射表本身擴容 | 低 (只擴映射表) |
| 一致性 Hash | 環狀分佈、虛擬節點 | 擴容只影響相鄰節點 | 實現複雜、需中間件支援 | 低 |