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