一、為什么決定進行分庫分表?
-
根據業務類型,和業務容量的評估,來選擇和判斷是否使用分庫分表
-
當前數據庫本事具有的能力,壓力的評估
-
數據庫的物理隔離,例如減少鎖的爭用、資源的消耗和隔離等
-
熱點表較多,並且數據量大,可能會導致鎖爭搶,性能下降
-
數據庫的高並發,數據庫的讀寫壓力過大,可能會導致數據庫或系統宕機
-
數據庫(MySQL5.7以下)連接數過高,會增加系統壓力
-
單表數據量大,如SQL使用不當,會導致io隨機讀寫比例高。查詢慢(大表上的B+樹太大,掃描太慢,甚至可能需要4層B+樹)
-
備份和恢復時間比較長
二、都遇到什么問題?
-
全局pk(主鍵和唯一索引)的沖突檢測不准確,全局的自增主鍵支持不夠好
-
分片鍵的選擇。如沒有選擇好,可能會影響SQL執行效率
-
分布式事務,中間價產品對分布式事務的支持力度
-
對於開發來說,需要進行業務的拆分
-
對於開發來說,部分SQL不兼容則需要代碼重構,工作量的評估
-
對於開發來說,跨庫join,跨庫查詢
三、如何解決?
-
使用全局分號器。或者使用全局唯一id,(應用生成順序唯一int類型做為全局主鍵)
-
應用層來判斷唯一索引
-
配合應用選擇合適的分片鍵,並加上索引
-
配合應用,配合開發,對不兼容SQL的進行整改