记录一次接近24万条数据导入Mysql的过程

8 篇文章 0 订阅
4 篇文章 0 订阅

由于开发项目的需求,之前有部分数据要写入阿里云的表格存储,过了一年多时间,表A的数据量接近24万条,现在需要将表A的数据转到Mysql中。

利用官方工具导出数据后,发现文件里面有238999条数据,文件大小是460MB。

想了个流程:

  1. 按照表A的结构先在Mysql中创建对应的表格
  2. 文件先上传到OSS中,再从OSS中通过流方式读取回来,逐行回放,每10条发送一次到Mysql写入

说干就干,写好了程序,本地测试了小文件没有什么问题,放到服务器上的Docker中运行。

网卡打满,内存,CPU全部满载。失败告终。最终成果,只写入了1万多条数据。

总结了原因,读取OSS时用了公网,转成内网再试了一次,公网网卡不受影响了。内存,CPU照样全部满载。又是失败告终。

后来又想了个办法,将文件通过内网下载到Docker中,再用流读取方式,但是有个矛盾始终无法解决。就是控制流速的问题,试了response.data.on(‘data’, (chunk) => {})做等待,也是徒劳。

又尝试了某网友介绍的event-stream包,始终很好地控制流速,导致硬盘IO、内存、CPU全部满载,Mysql只写了几百条数据就失败了。

根据削峰填谷的思想,今天尝试了一个新方法,先将OSS上的数据按照准备写入Mysql的格式放到Redis里,Redis内存使用暴增400多M,之后逐条回放,操作成功就删除Redis上面的对应的数据,经过了差不多一个小时操作,数据入库成功,Redis内存使用量也恢复正常。写入的过程服务器和Mysql的监控显示CPU、内存、带宽、硬盘IO都比较平衡,重要的是没有影响其他服务。经过一个星期的试验和实践,算是完美解决了此问题。

服务器监控数据:
在这里插入图片描述
数据监控数据:
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值