為什么會決定進行分庫分表,分庫分表過程中遇到什么難題,如何解決的?


一、為什么決定進行分庫分表?

  1. 根據業務類型,和業務容量的評估,來選擇和判斷是否使用分庫分表

  2. 當前數據庫本事具有的能力,壓力的評估

  3. 數據庫的物理隔離,例如減少鎖的爭用、資源的消耗和隔離等

  4. 熱點表較多,並且數據量大,可能會導致鎖爭搶,性能下降

  5. 數據庫的高並發,數據庫的讀寫壓力過大,可能會導致數據庫或系統宕機

  6. 數據庫(MySQL5.7以下)連接數過高,會增加系統壓力

  7. 單表數據量大,如SQL使用不當,會導致io隨機讀寫比例高。查詢慢(大表上的B+樹太大,掃描太慢,甚至可能需要4層B+樹)

  8. 備份和恢復時間比較長

二、都遇到什么問題?

  1. 全局pk(主鍵和唯一索引)的沖突檢測不准確,全局的自增主鍵支持不夠好

  2. 分片鍵的選擇。如沒有選擇好,可能會影響SQL執行效率

  3. 分布式事務,中間價產品對分布式事務的支持力度

  4. 對於開發來說,需要進行業務的拆分

  5. 對於開發來說,部分SQL不兼容則需要代碼重構,工作量的評估

  6. 對於開發來說,跨庫join,跨庫查詢

三、如何解決?

  1. 使用全局分號器。或者使用全局唯一id,(應用生成順序唯一int類型做為全局主鍵)

  2. 應用層來判斷唯一索引

  3. 配合應用選擇合適的分片鍵,並加上索引

  4. 配合應用,配合開發,對不兼容SQL的進行整改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM