历史背景:
业务系统在设计初期,由于数据量小,一般会采取单服务+单数据库
随着访问量的上升,需要对数据库做垂直或者水平拆分
如上图通过分片算法我们对数据做了水平拆分,比如订单的库,我们按照订单号对数据表的数量做取于9算法,如订单号为1000,1000/4取余=0,则将数据存入orderdb_1中
随着业务量对上升经过拆分的数据库表的数据里已经达到极限,影响到数据查询等表操作,需要对数据库做扩容操作,扩容方案(扩容一倍)
方案一:
1:增加新表
2:修改分片规则,修改写库逻辑、实现新旧库双写,停机发版本
3:写数据迁移任务,通过前一任务将历史数据迁移至新的表中(按照分片规则)
4:数据迁移完成,删除就表数据结构(已经迁移到新表中的数据)
方案二:
分片算法 为原来的 0库增加一个扩容库 00,(原来按照%2=0 的数据会落在0库),落在0库的数据都按照%4会被分成结果为0,和2的数据,结果为0的还是放在原来的0库中,结果为2的数据现在落在00库中,这样一个库能拆分成2个库,通过分片算法也能找到对应的数据
1:增加新表
2:将新表找到对应的一张原表(比如0对应到00)
3:将新表设置成需要拆分表的从表做数据同步(这是方案的核心)
4:等数据同步成功之后,切换路由算法
5:待数据稳定之后将各个库中冗余的数据(分片之后不应该落在该库中的数据)删除
方案三:一致性hash算法