MySQL優化(一):MySQL分庫分表


一、分庫分表種類

1、垂直拆分

      在考慮數據拆分的時候,一般情況下,應該先考慮垂直拆分。垂直可以理解為分出來的庫表結構是互相獨立各不相同的、

      - 如果有多個業務,每個業務直接關聯性不大,那么就可以把每個業務拆分為獨立的實例、庫或表。

      - 如果在一個庫里面有多張表,那么可以把每張表拆分到不同的實例上。

      - 如果你有一張表,但這個表里的字段很多,每個字段都有不同的含義,例如user表里面有姓名、生日、地址等,那么可以把每個字段獨立出來拆分為一張新表。

2、水平拆分

      水平拆分是針對一張表來說的。在經過垂直拆分之后,如果數據量依然很大,那么可以通過某種算法進行水平拆分。拆分后具有多張相同表結構的表,每張表存儲一部分數據。

 

二、分庫分表原則

1、原則1:能不分就不分

      MySQL是關系型數據庫,數據庫表之間的關系從一定角度映射了業務邏輯。任何分庫分表的行為都會提升業務邏輯的復雜度,數據庫除了承載數據的存儲和訪問外,協助業務更好地實現需求和邏輯也是其重要的工作之一。分庫分表會帶來數據的合並、查詢、更新條件的分離,以及事物的分離等多種后果,業務實現的復雜度往往會翻倍或指數級上升。所以在分表分庫之前,應先升級硬盤、內存、CPU、網絡、版本、讀寫分離、負載均衡及SQL語句優化。

2、原則2:數據量太大,正常的運維影響業務訪問

      正常運維主要包括:

      - 數據庫的備份

      - 數據表的修改

      - 熱點數據

3、原則3:表設計不合理

      - 某個表字段不斷被update,壓力非常大

      - 某個表字段存在TEXT或BLOB字段

4、原則4:某些數據表出現了無窮增長的情況

      各種評論、消息、日志記錄表現為不可控的增長,此時可按用戶、時間、用途等進行水平拆分。

      


免責聲明!

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



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