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

1、分庫分表種類算法

一、垂直拆分數據庫

      在考慮數據拆分的時候,通常狀況下,應該先考慮垂直拆分。垂直能夠理解爲分出來的庫表結構是互相獨立各不相同的、網絡

      - 若是有多個業務,每一個業務直接關聯性不大,那麼就能夠把每一個業務拆分爲獨立的實例、庫或表。負載均衡

      - 若是在一個庫裏面有多張表,那麼能夠把每張表拆分到不一樣的實例上。運維

      - 若是你有一張表,但這個表裏的字段不少,每一個字段都有不一樣的含義,例如user表裏面有姓名、生日、地址等,那麼能夠把每一個字段獨立出來拆分爲一張新表。優化

二、水平拆分設計

      水平拆分是針對一張表來講的。在通過垂直拆分以後,若是數據量依然很大,那麼能夠經過某種算法進行水平拆分。拆分後具備多張相同表結構的表,每張表存儲一部分數據。日誌

 

2、分庫分表原則內存

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

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

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

      正常運維主要包括:

      - 數據庫的備份

      - 數據表的修改

      - 熱點數據

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

      - 某個表字段不斷被update,壓力很是大

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

四、原則4:某些數據表出現了無窮增加的狀況

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

相關文章
相關標籤/搜索