MySQL优化(一):MySQL分库分表

1、分库分表种类算法

一、垂直拆分数据库

      在考虑数据拆分的时候,通常状况下,应该先考虑垂直拆分。垂直能够理解为分出来的库表结构是互相独立各不相同的、网络

      - 若是有多个业务,每一个业务直接关联性不大,那么就能够把每一个业务拆分为独立的实例、库或表。负载均衡

      - 若是在一个库里面有多张表,那么能够把每张表拆分到不一样的实例上。运维

      - 若是你有一张表,但这个表里的字段不少,每一个字段都有不一样的含义,例如user表里面有姓名、生日、地址等,那么能够把每一个字段独立出来拆分为一张新表。优化

二、水平拆分设计

      水平拆分是针对一张表来讲的。在通过垂直拆分以后,若是数据量依然很大,那么能够经过某种算法进行水平拆分。拆分后具备多张相同表结构的表,每张表存储一部分数据。日志

 

2、分库分表原则内存

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

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

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

      正常运维主要包括:

      - 数据库的备份

      - 数据表的修改

      - 热点数据

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

      - 某个表字段不断被update,压力很是大

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

四、原则4:某些数据表出现了无穷增加的状况

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

相关文章
相关标签/搜索