一、分库分表种类

1、垂直拆分

      在考虑数据拆分的时候,一般情况下,应该先考虑垂直拆分。垂直可以理解为分出来的库表结构是互相独立各不相同的、

      - 如果有多个业务,每个业务直接关联性不大,那么就可以把每个业务拆分为独立的实例、库或表。

      - 如果在一个库里面有多张表,那么可以把每张表拆分到不同的实例上。

      - 如果你有一张表,但这个表里的字段很多,每个字段都有不同的含义,例如user表里面有姓名、生日、地址等,那么可以把每个字段独立出来拆分为一张新表。

2、水平拆分

      水平拆分是针对一张表来说的。在经过垂直拆分之后,如果数据量依然很大,那么可以通过某种算法进行水平拆分。拆分后具有多张相同表结构的表,每张表存储一部分数据。

 

二、分库分表原则

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

      MySQL是关系型数据库,数据库表之间的关系从一定角度映射了业务逻辑。任何分库分表的行为都会提升业务逻辑的复杂度,数据库除了承载数据的存储和访问外,协助业务更好地实现需求和逻辑也是其重要的工作之一。分库分表会带来数据的合并、查询、更新条件的分离,以及事物的分离等多种后果,业务实现的复杂度往往会翻倍或指数级上升。所以在分表分库之前,应先升级硬盘、内存、CPU、网络、版本、读写分离、负载均衡及SQL语句优化。

2、原则2:数据量太大,正常的运维影响业务访问

      正常运维主要包括:

      - 数据库的备份

      - 数据表的修改

      - 热点数据

3、原则3:表设计不合理

      - 某个表字段不断被update,压力非常大

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

4、原则4:某些数据表出现了无穷增长的情况

      各种评论、消息、日志记录表现为不可控的增长,此时可按用户、时间、用途等进行水平拆分。

      

posted on 2018-08-15 11:55  杜先生的博客  阅读(3421)  评论(0编辑  收藏  举报