基于账户系统做数据库数据迁移的方法是什么

发布时间:2021-11-16 14:32:47 作者:iii
来源:亿速云 阅读:110

这篇文章主要讲解了“基于账户系统做数据库数据迁移的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于账户系统做数据库数据迁移的方法是什么”吧!

    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分钟左右。

  1. 将旧系统12个分片放进阻塞队列。

  2. 每个线程开始时从队列拿一个分片数据源,通过直连的方式

  3. 分页读取,每批次大约5000条,组装数据后通过新系统的mycat插入数据

  4. 直到最后一批数据小于5000条时,认为该分片的数据已经读取完毕

  5. 读取完毕后该线程进行分片切换,即重新到队列拿取新的分片,如果队列的分片为空,则线程退出,否则重复1-4

基于账户系统做数据库数据迁移的方法是什么

感谢各位的阅读,以上就是“基于账户系统做数据库数据迁移的方法是什么”的内容了,经过本文的学习后,相信大家对基于账户系统做数据库数据迁移的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 账户系统如何应对高并发、热点账户等问题
  2. 怎么用mysqldump做数据迁移

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

数据库

上一篇:MySQL关于In的优化是怎么样的

下一篇:如何理解MySQL的Explain结果输出项

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》