mysql分库分表介绍

什么是分库分表

JCSprout

首选分表分库的:最好是在千万级别数据开始实现分表分库。

数据库的拆分主要体现在两个方面:垂直拆分和水平拆分

- 垂直拆分:根据业务的维度,将原本的一个表拆分成多个表,每个表与原有的结构不同(优先采用冷热分离拆分)

- 水平拆分:根据分片(sharding)算法,将一个表拆分为多个表,每个表依旧保留原有的结构。

     两种拆分方法可能会同时存在,在互联网应用中的开发过程中,通常先进行垂直拆分,使单体应用形成多个微服务结构,在微服务中再进行水平表拆分。

     为了分散数据库的压力,采用分库分表的方案,将一个表结构分为多个表,或者将一个表的数据分片后放入多个表,这些表可以放在同一个库里,也可以放到不同的库里,甚至可以放在不同的数据库上。

分库方式:

分库:根据业务实现分库 订单数据库、会员数据库、支付数据库等。

会员数据库又可分成多个不用的数据库

Member_db1 --- 会员数据库

Member_db2 --- 会员数据库

分表方式:

  1. 计算hash  最常见的 根据唯一id取余数  存在表的扩容问题。
  2. 按照时间划分(按照月、年)。

      


macat和Sharding-jdbc实现分库分表:

mycat实现分片:好处隐藏数据库db真实的连接地址 类似于nginx反向代理。

问题:mycat分表分库后查询所有的数据效率是否会很低?

           不会特别低 因为采用多线程查询数据,

Shardingjdbc的实现原理:本地采用aop拦截jdbc语句,在sql发送之前改写sql语句,效率比mycat要高。

Sharding-jdbc与MyCat区别:

  1. MyCAT是基于服务器虚拟数据库的方式实现分表分库代理
  2. sharding-jdbc基于本地AOP,拦截jdbc改写sql语句,效率更加好。

使用数据库的三个阶段

我们对数据库的使用通常经历一下三个阶段

1. 单库单表

2. 单库多表:对表进行水平拆分,产生多个结构完全一样的表,例如User0、User1、User2等等,这些表的数据加起来刚好是一份完整的全 量数据。

3. 多库多表:对数据库进行水平拆分,将切分的数据库和表水平的分散到不同的数据库实例上。


什么情况下需要分库分表


分库分表的典型实例


三种分而治子的解决方案

客户端分片:不需要中间件

代理分片:需要中间件(mycat等)

分布式数据库:

客户端分片

3. 通过ORM框架实现

就是通过取模算法,有多少分表就通过用户id或其他字段来进行取模(用户id%分表数量)

代理分片

支持事物的分布式数据库


冷热分离

1、MyISAM:不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。

2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。


垂直和水平拆分后的问题

分库分表导致的查询问题!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祁_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值