架构设计(二)之分库分表

1.分库分表特点

优点:

  1. 提升查询的效率
  2. 方便了表的扩展

缺点:

  1. 分表以什么切分如果弄的不好,导致多次查询,而且有时候要跨库操作,甚至导致join无法使用,对排序分组等有性能影响
  2. 之前的原子操作被拆分成多个操作,事务处理变得复杂
  3. 多个DB维护成本增加
2.分库分表常用的工具
  1. MyCat
  2. TDDL
  3. sharding-sphere
    https://www.cnblogs.com/tellerfuliye/articles/13292076.html
3.MySQL达到什么量需要分库分表

单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
如果预计三年后的数据量根本达不到这个级别,请不要再创建表时就分库分表。

4.分库分表的方法
  1. 水平分库分表
    字段为依据,按照一定策略,将一个数据库表中数据拆分到多个数据库表中,每个表的结构一样。
  2. 垂直分库分表
    字段为依据,按照字段的重要性,将一个数据库表中的字段拆到不同的数据库表中,如:主表和扩展表,每一个的结构不一样。
  3. 二者区别:
    1)水平分库分表的表结构是一样的,而垂直分库分表是不一样的;
    2)水平分库分表没有数据交集,而垂直分库分表是有交集的(主键);
    3)水平分库分表的数据条数为一条,而垂直分库分表是有多条;
5.水平分库分表的常用方案
  1. 范围法
    范围规则是使用数据区间的方式进行划分。
    优点: 扩容简单,提前建好库、表就好。
    缺点: 大部分读和写都访会问新的数据,有IO瓶颈,这样子造成新库压力过大,不建议采用。
  2. 哈希法
    哈希法则是使用主键取模的方式进行划分。
    优点: 能保证数据较均匀的分散落在不同的库、表中,减轻了数据库压力
    缺点: 扩容麻烦、迁移数据时每次都需要重新计算hash值分配到不同的库和表
  3. 一致性hash
    在分布式微服务架构环境下建议使用一致性hash算法进行分库分表,通过虚拟节点方式能保证数据较均匀的分散落在不同的库、表中,并且新增、删除节点不影响其他节点的数据,高可用、容灾性强。
6.垂直分库分表的依据
  1. 主表:存储一些关键、核心的、内容较短、访问频率高的数据,比如:用户名、姓名、年龄、电话等…
  2. 扩展表:存储一些不重要的、内容较长、访问频率较低的数据,比如:用户的爱好、教育、备用地址等…
  3. 优点:
    1)主表可以存储更多的数据,减轻主表的容量压力;
    2)数据库缓冲池可以缓冲更多数据,提升查询效率;
    3)按某种规则进行表拓展,方便信息的维护;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值