MySql分库分表设计

我就是我 2023-10-10 22:52 124阅读 0赞

文章目录

  • 一、分库分表方案
  • 二、分库分表中间件
  • 三、分库分表可能遇到的问题
  • 四、应用场景
  • 总结

一、分库分表方案

  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 条评论,124人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL分库设计常见问题

    在MySQL进行分库分表设计时,可能会遇到以下一些常见的问题: 1. 数据一致性:分库分表后,数据的更新和删除可能需要跨多个数据库操作,这可能导致一致性问题。 2. 查询效

    相关 mysql分库

    先说问题,分表以后的查询问题 先脑补一个订单表, 主键 创建时间 购买商品id 商品分类 所属商铺 用户id 当前状态 平时会有各种各样的查询要求, 有每天的统

    相关 Mysql 分库

    mysql在什么情况下才需要进行分库分表? 采用何种设计方式才是最优的选择,根据这些问题,以下是关于MySQL分库分表的应用场景和最优的设计方式举例。 一. 分表  场景:

    相关 MySQL分库

    一、概述:数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库

    相关 mysql分库

    一丶分库分表注意事项: 1、维度问题 假如用户购买了商品,需 要将交易记录保存取来,如果按照用户的纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用