預先為各業務模組表名加上前綴(如 BBS_、BLOG_),分庫時可依前綴快速歸類。然而分庫勢必面臨外鍵約束失效問題——跨庫無法建立外鍵,必須果斷移除。
部落格列表需顯示用戶名,原先同庫可 INNER JOIN User,分庫後用戶表與部落格表分處不同資料庫。
| 方案 | 做法 | 優點 | 缺點 |
|---|---|---|---|
| 反正規化冗余 | 在部落格表冗存 UserID、UserName |
查詢極快、無跨庫依賴 | 資料冗余、更新同步成本高 |
| 快取層解耦 | 用戶資訊放入 Redis/Memcached,查詢時從快取取用戶名 | 擴展性強、支援多業務複用 | 引入快取一致性複雜度 |
建議:初期可採方案一快速上線;長期演進建議導入方案二,以快取層統一解決跨庫關聯查詢。
分庫本身不保證效能提升,關鍵在於將分出的庫遷移至獨立實體伺服器,讓 CPU、I/O、記憶體資源物理隔離,真正實現負載分攤。
「分庫與否」取決於資料量級與效能指標(QPS、延遲、併發)。未達瓶頸前勿過度設計;達標後以「業務邊界」為單位分庫,配合快取與讀寫分離,構建可水平擴展的資料層架構。