最近业务需求需要将一个已有的用户数据导入到 新的项目中来,看了一下数据是 1239146条。
达到了百万级别的生产数据~ 如下图:
现在的业务需求是将 member_info 表的数据导入到 t_account(主表) 和 t_account_platform_info(附表) 中去,
通过写java程序是可以导入的,但是又得去发版,写controller,service,dao,mapper.xml 对象类。等等繁琐的过程。
先看原始表结构数据:
取到对应的表字段值,然后转换成我们自己需要的字段值,最终分表 插入到我们需要的表t_account,和t_account_platform_info
和java程序导入一样,需要分批次导入、废话不多说。存储过程代码上图:
重点来了,
1.将查询的数据循环迭代然后批量插入,记得循环前要 开启事务。
2.我这边是迭代50000次 批量commit一次。
3.循环到ID 最大的数量时 commit一次。
整个过程提交事务就只有2次。减少了事务的操作。
整个操作的过程中,导入的用户数据100多万条耗时一分钟不到。
还有最重要的,测试过程不要在客户端工具中执行 存储过程。客户端会报错内存溢出。
要通过命令行执行存储过程 call 命令去调用。