1、分库分表种类算法
一、垂直拆分数据库
在考虑数据拆分的时候,通常状况下,应该先考虑垂直拆分。垂直能够理解为分出来的库表结构是互相独立各不相同的、网络
- 若是有多个业务,每一个业务直接关联性不大,那么就能够把每一个业务拆分为独立的实例、库或表。负载均衡
- 若是在一个库里面有多张表,那么能够把每张表拆分到不一样的实例上。运维
- 若是你有一张表,但这个表里的字段不少,每一个字段都有不一样的含义,例如user表里面有姓名、生日、地址等,那么能够把每一个字段独立出来拆分为一张新表。优化
二、水平拆分设计
水平拆分是针对一张表来讲的。在通过垂直拆分以后,若是数据量依然很大,那么能够经过某种算法进行水平拆分。拆分后具备多张相同表结构的表,每张表存储一部分数据。日志
2、分库分表原则内存
一、原则1:能不分就不分date
MySQL是关系型数据库,数据库表之间的关系从必定角度映射了业务逻辑。任何分库分表的行为都会提高业务逻辑的复杂度,数据库除了承载数据的存储和访问外,协助业务更好地实现需求和逻辑也是其重要的工做之一。分库分表会带来数据的合并、查询、更新条件的分离,以及事物的分离等多种后果,业务实现的复杂度每每会翻倍或指数级上升。因此在分表分库以前,应先升级硬盘、内存、CPU、网络、版本、读写分离、负载均衡及SQL语句优化。
二、原则2:数据量太大,正常的运维影响业务访问
正常运维主要包括:
- 数据库的备份
- 数据表的修改
- 热点数据
三、原则3:表设计不合理
- 某个表字段不断被update,压力很是大
- 某个表字段存在TEXT或BLOB字段
四、原则4:某些数据表出现了无穷增加的状况
各类评论、消息、日志记录表现为不可控的增加,此时可按用户、时间、用途等进行水平拆分。