这篇文章主要讲解了“基于账户系统做数据库数据迁移的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于账户系统做数据库数据迁移的方法是什么”吧!
10年积累的成都做网站、网站制作、成都外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有延吉免费网站建设让你可以放心的选择与我们合作。
1. 新旧系统的数据库分析
新旧系统都是基于Mycat分片,旧系统有12个分片,新系统有8个分片;由于新系统是重构,目前只对其中一种会员的账户类型(会员主钱包,相当于余额宝)进行重构,剩余的果币、积分、优惠券就在后续的迭代中慢慢重构。
单算主钱包的话,用户信息大约5千万,主钱包账户信息大约在5千万,流水大约在8千万左右。涉及的表有三张,就称为user_info和account_info表和account_record表,对应到新系统也是这两三表,差别是里面的数据需要做转换。如图,老系统是基于old_user_id分片,新系统是基于new_user_id分片
2. 采用的线程模型及演进
2.1 程序连接数据库方式
两边系统都是基于Mycat进行分片,迁移程序如果是通过mycat连接数据库的话,速度会稍慢;就打算通过直连各个分片进行迁移,但是由于两边的分片数不同和分片的字段不一样,通过直连的方式迁移到新系统时需要自己写分片规则。
如图直连的方式,从旧系统读取一批数据时需要计算出具体落到新系统的哪个分片,为了减少实现复杂度和正式迁移时出现问题能快速定位,所以采用了另一种方式。旧系统采用直连12个分片,写入到新系统时通过mycat,规则的计算由Mycat处理。
2.2 通过队列方式,多线程读,多线程写
为了提高速度,毫不犹豫的选择了多线程的方案,一开始想到的就是基于队列的方式,一边读一边写两不误;旧系统总共12个分片,每次开启多个线程读取一个分片的数据放进阻塞队列,同时多个线程从队列取数据并组装再通过Mycat写入新系统。直到一个分片的数据读取完再读取下一个分片。
优点:读取速度快
缺点:写入慢,造成消息堆积,内存不足,导致GC频繁,速度变慢。
2.3 以分片的维度切割线程,同个线程同步读写(以读取用户信息和账户信息为例)
由于迁移的服务器是8核32G,所以只开启8个线程分别去读取12个分片的数据,同个线程里同步读写数据。如图,步骤如下,基于该方案,用户和账户数据的迁移时间大约为26分钟左右。
将旧系统12个分片放进阻塞队列。
每个线程开始时从队列拿一个分片数据源,通过直连的方式
分页读取,每批次大约5000条,组装数据后通过新系统的mycat插入数据
直到最后一批数据小于5000条时,认为该分片的数据已经读取完毕
读取完毕后该线程进行分片切换,即重新到队列拿取新的分片,如果队列的分片为空,则线程退出,否则重复1-4
感谢各位的阅读,以上就是“基于账户系统做数据库数据迁移的方法是什么”的内容了,经过本文的学习后,相信大家对基于账户系统做数据库数据迁移的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
网页名称:基于账户系统做数据库数据迁移的方法是什么
地址分享:http://scpingwu.com/article/iijoig.html