MySql分库分表设计


一、分库分表方案

  1. 水平分库:以字段为依据,按照一定策略(hash、range 等),将一个库中的数 据拆分到多个库中。
  2. 水平分表:以字段为依据,按照一定策略(hash、range 等),将一个表中的数 据拆分到多个表中。
  3. 垂直分库:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。

二、分库分表中间件

  1. sharding-jdbc(当当)
  2. Mycat
  3. TDDL(淘宝)
  4. Oceanus(58 同城数据库中间件)
  5. vitess(谷歌开发的数据库中间件)
  6. Atlas(Qihoo 360)

三、分库分表可能遇到的问题

  1. 事务问题:需要用分布式事务啦
  2. 跨节点 Join 的问题:解决这一问题可以分两次查询实现
  3. 跨节点的 count,order by,group by 以及聚合函数问题:分别在各个节点上得到结果后在应用程序端进行合并。
  4. 数据迁移,容量规划,扩容等问题
  5. ID 问题:数据库被切分后,不能再依赖数据库自身的主键生成机制啦,最简单可以考虑 UUID
  6. 跨分片的排序分页问题(后台加大pagesize 处理?)

四、应用场景

只分库不分表
当数据库的读写访问量过高,还有可能会出现数据库连接不够用的情况。这个时候我们就需要
考虑分库,通过增加数据库实例的方式来获得更多的数据库连接,从而提升系统的并发性能。
只分表不分库
当单表存储的数据量非常大的情况下,并且并发量也不高,数据库的连接也还够用。但是数据
写入和查询的性能出现了瓶颈,这个时候就需要考虑分表了。将数据拆分到多张表中来减少单表存储
的数据量,从而提升读写的效率。
既分库又分表
结合前面的两种情况,如果同时满足前面的两个条件,也就是数据连接也不够用,并且单表的
数据量也很大,从而导致数据库读写速度变慢的情况,这个时候就要考虑既分库又分表。

总结

以上为个人学习过程中对java的一些学习总结,如有错误,欢迎各位批评指导,如有侵权,请联系本人删除,如果觉得有一点帮助麻烦点个赞加收藏!谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值