数据库分库分表的思想(以Mysql为例)

数据局分库分表设计思想

1、分库的优点

数据库涉及到将数据从硬盘读取到内存当中,这一步在目前计算机所有常用的调度之中,可以说是最耗费时间的。同时,对于大数据的处理,往往也是在这里最容易出现性能方面的问题。主要存在如下几个方面的问题:
1、数据库连接数的问题
Mysql默认的最大连接数为100.这个连接连接数可以修改,而mysql服务允许的最大连接数为16384,常见的报错 ’too many connections‘
2、数据访问压力
单一数据库的访问压力是有一定的限度的。
3、Mysql的读写机制
Mysql具有读写分离的机制,写操作都对应到Master,读操作可以在 Master和Slave机器上进行,Slave可以认为是Master的子节点,并且Slave下也可以有 Slave,如此便可以提高整个系统的读写速度。
写操作都是先在Master上操作,然后同步更新到Slave上,从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。在读压力比较大的情况下,增加Slave是可以在一定程度上解决的,但是Slave也不能无限增加,还有成本的问题,所以还是需要进行分库。

2、分表的优势

1、单个表数据的维护量减少
2、对于程序的改动也可以减少,后期增加需求时,对于代码的改动程度也可以减少。
3、可以将经常需要修改的数据和经常不使用的数据分离开来,从而平衡数据库表的访问次数,进而降低数据的压力。
4、后台业务逻辑也会更加清晰,减少后端编码的工作量。

3、mysql分库分表的具体方法

首先可以认为分库就是大型的分表的方法,而分表就是小型分库方法。所以,这里可认为二者的方法相同。
1、RANGE(一般使用比较少)
所谓RANGE就是根据数据的范围进行进行分库分表,比如说数据在10w以下的可以放在一张表中,在10w以上的放在另外的表中,不过这样的话就需要记录对应不同表的id,可以采用一个路由表的方式
2、Hash算法
userId.hascode()%n
n为数据库中的数量或者表的数量。
优点: 能保证数据较均匀的分散落在不同的库、表中,减轻了数据库压力。
缺点: 扩容麻烦、迁移数据时每次都需要重新计算hash值分配到不同的库和表。
3、一致性hash算法
一直性hash算法是在hash算法的基础上,将数据库通过hash映射到hash环上,当某个节点失效时,后面可以将其移动到最近的节点上。参考下面这篇文章,介绍的非常详细。https://segmentfault.com/a/1190000021199728

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值