浅析分库和分表

为什么要分库分表?

随着业务量不断上涨,数据量和请求量会变的越来越大,凭借单个数据库和单个表扛不住暴增的数据量和请求量。

分表

以mysql为例,一旦数据量达到千万级别,就会极大影响你的 sql的性能,无论是新增还是查询数据都会变的很慢。一般来说,一旦单表数据量到六、七百万的时候,就需要开始考虑分表了。

分表可以以月份为纬度,每月数据分表。也可以以用户纬度分表,对于用户id取模或hash等方式分表,也可以根据地区为纬度分表。

分库

每个数据库的连接数是有限的,最多支撑到并发 2000(最好保持在1000 一下)。可以将一个库的数据拆分到多个库中,分散请求量。

如何分库分表?

Sharding-jdbc

当当开源的,属于 client 层方案,支持分库分表、读写分离、分布式 id 生成(支持snowflake)、柔性事务(最大努力送达型事务、TCC 事务)。不用部署,运维成本低,不需要代理层的二次转发请求,性能很高,但是如果遇到升级啥的需要各个系统都重新升级版本再发布,各个系统都需要耦合 Sharding-jdbc 的依赖。

Mycat

基于 Cobar 改造的,属于 proxy 层方案,支持的功能非常完善,而且目前应该是非常火的而且不断流行的数据库中间件,社区很活跃,也有一些公司开始在用了。不需要部署,自己运维一套中间件,运维成本高,但是对于各个项目是透明的,如果遇到升级之类的都是自己中间件那里搞就行了。

如何迁移数据?

1)停服数据迁移,会影响正常业务,不建议

2)数据双写,上线后同时忘两个库写数据,然后将历史数据导入新库,需要修改线上代码,不建议

3)使用阿里canal同步mysql binlog,写入新库,不影响线上逻辑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值