分库分表

分库分表用于应对当前互联网常见的两个场景——大数据量和高并发。他们都可以分为垂直拆分和水平拆分两种。

  • 垂直拆分是根据业务将一个库(表)拆分为多个库(表)。如:将原本同一张表中经常访问和不常访问的字段,拆分至不同的表中;按业务划分将不同的表存放在不同的库里。
  • 水平拆分则是根据分片算法将一个库(表)拆分为多个库(表)。如:将原本的order表拆分成order_1、order_2、order_3多张表,每个表的数据结构一模一样,存取数据都是要按照ID的最后一位以3取余,尾数是1的放入第1个表,尾数是2的放入第2个表这样;分库也一样,将原本一个库复制成多个库,每个库里面的表结构、字段结构一模一样,只是存放的数据不一样,所有库的数据的和就是所有数据。

分表是针对解决数据量过大导致检索变慢的问题,但无法解决过多并发请求访问同一个库,导致数据库响应变慢的问题。而分库就可以将同一个库的并发量拆分到多个库,减轻单个库的并发压力。

分库分表是两个不同的概念,他们分别都对应了有水平拆分、垂直拆分的概念,也都代表不一样的意义,解决的问题也不一样,下面具体说明。

  • 水平分库

以表的主键字段为依据,按照一定策略(取模,hash等),将本来在一个库中的数据拆分到多个库中。

每个库的表结构都一模一样;

每个库的数据都不一样,没有任何交集;

所有库的表的数据的并集才是全量数据;

  • 水平分表

以表的主键字段为依据,按照一定策略(取模,hash等),将本来在一个表中的数据拆分到多个表中。

拆分的表的结构都一样;

拆分的表数据都不一样,没有交集;

拆分的所有表的所有数据并集才是全量数据;

  • 垂直分库

以表为单位依据,按照业务归属不同,将不同业务的表拆分到不同的库中。

每个库的结构都不一样;

每个库的数据也不一样,没有交集;

所有库的数据的并集才是全量数据;

  • 垂直分表

以字段为依据,按照字段的使用情况(常用和不常用),将表中字段拆到不同的表,主要分为主表和扩展表。

每个表的结构都不一样;

每个表的数据也不一样,一般来说,主表和扩展表的字段至少有一列交集,一般是主键,用于主表和扩展表关联;

所有表的数据的并集是全量数据;

使用场景(什么时候分库,什么时候分表)

  • 分表(为了解决单表数据量大)

数据量大,单表超过 4 、500万条数据,这时就要分表了,将一个表的数据拆分成多个表,控制单表的数据不要超过 200万 条。

  • 分库(为了解决数据库每秒并发数大)

并发请求大,当每秒到数据库的请求到达了 2000次的时候,就要分库了,将原本一个库的数据结构拆分到几个库去,控制单个库每秒的请求不超过 1000次。

怎么分库分表

市面上有很多实现分库分表的中间件,目前几乎最火的中间件应该是 mycat

粘上一个 mycat 分库分表的使用说明:

https://blog.csdn.net/weixin_38319645/article/details/81537849

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值