thebigdipperbdx的博客

April Showers Bring May Flowers.

MySQL分库分表

0x00 数据切分

简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果,即分库分表。

数据的切分根据其切分规则的类型,可以分为两种切分模式:

垂直(纵向)切分: 按照不同的表(或者Schema)来切分到不同的数据库(主机)之上;

水平(横向)切分: 根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面。

1. 垂直切分

一个数据库由多个表构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面(专库专用)。例:

#有如下几张表
--------------+--------------+------------------
用户信息(user)+ 交易记录(pay)+  商品(commodity)|
--------------+--------------+------------------

垂直切分根据每个表的不同业务进行切割,user表,pay表,commodity表,每个表切分到不同的数据库上。
这里写图片描述

优点:

  • 拆分后业务清晰,拆分规则明确。
  • 系统之间整合或扩展容易。
  • 数据维护简单。

缺点:

  • 部分业务表无法 join,只能通过接口方式解决,提高了系统复杂度。
  • 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
  • 事务处理复杂。

2. 水平切分

相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,如图:
这里写图片描述

几种典型的分片规则包括:

 按照用户 ID 求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。
 按照日期,将不同月甚至日的数据分散到不同的库中。
 按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。

优点:

  • 拆分规则抽象好,join 操作基本可以数据库做。
  • 不存在单库大数据,高并发的性能瓶颈。
  • 应用端改造较少。
  • 提高了系统的稳定性跟负载能力。

缺点:

  • 拆分规则难以抽象。
  • 分片事务一致性难以解决。
  • 数据多次扩展难度跟维护量极大。
  • 跨库 join 性能较差。

共同特点缺点

  • 引入分布式事务的问题
  • 跨节点 Join 的问题
  • 跨节点合并排序分页问题
  • 多数据源管理问题

分库分表中间件

1、Mycat(基于阿里开源的Cobar产品而研发)
2、zdal(zdal是支付宝自主研发的数据中间件产品)


参考文档:
1. https://kionf.com/2017/05/07/mysql-mycat/

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/thebigdipperbdx/article/details/79945305
个人分类: SQL
想对作者说点什么? 我来说一句

cobar-server1.2.7

2016年03月18日 1.35MB 下载

没有更多推荐了,返回首页

不良信息举报

MySQL分库分表

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭