1、分庫分表種類算法
一、垂直拆分數據庫
在考慮數據拆分的時候,通常狀況下,應該先考慮垂直拆分。垂直能夠理解爲分出來的庫表結構是互相獨立各不相同的、網絡
- 若是有多個業務,每一個業務直接關聯性不大,那麼就能夠把每一個業務拆分爲獨立的實例、庫或表。負載均衡
- 若是在一個庫裏面有多張表,那麼能夠把每張表拆分到不一樣的實例上。運維
- 若是你有一張表,但這個表裏的字段不少,每一個字段都有不一樣的含義,例如user表裏面有姓名、生日、地址等,那麼能夠把每一個字段獨立出來拆分爲一張新表。優化
二、水平拆分設計
水平拆分是針對一張表來講的。在通過垂直拆分以後,若是數據量依然很大,那麼能夠經過某種算法進行水平拆分。拆分後具備多張相同表結構的表,每張表存儲一部分數據。日誌
2、分庫分表原則內存
一、原則1:能不分就不分date
MySQL是關係型數據庫,數據庫表之間的關係從必定角度映射了業務邏輯。任何分庫分表的行爲都會提高業務邏輯的複雜度,數據庫除了承載數據的存儲和訪問外,協助業務更好地實現需求和邏輯也是其重要的工做之一。分庫分表會帶來數據的合併、查詢、更新條件的分離,以及事物的分離等多種後果,業務實現的複雜度每每會翻倍或指數級上升。因此在分表分庫以前,應先升級硬盤、內存、CPU、網絡、版本、讀寫分離、負載均衡及SQL語句優化。
二、原則2:數據量太大,正常的運維影響業務訪問
正常運維主要包括:
- 數據庫的備份
- 數據表的修改
- 熱點數據
三、原則3:表設計不合理
- 某個表字段不斷被update,壓力很是大
- 某個表字段存在TEXT或BLOB字段
四、原則4:某些數據表出現了無窮增加的狀況
各類評論、消息、日誌記錄表現爲不可控的增加,此時可按用戶、時間、用途等進行水平拆分。