mybatis 批量插入速度慢

mybatis 批量插入速度慢mybatis批量插入速度慢原因以及解决方式

大家好,欢迎来到IT知识分享网。

 问题情况:

导入400个Excel 

每个Excel5000条数据

需要对Excel 进行小范围处理  插入三张表

原同事进行简单嵌套多层循环进行判断

因为需要副表主键进行主表关系绑定

由原来同事代码的简单嵌套循环升级为  预分配主键  进行主表附表的同时批量插入

避免多次单个插入附表等待主键返回以及数据库连接问题

操作完所有数据后用时三十小时

时间长原因分析:

主表未进行真正批量插入

解决方案一:

mysql连接增加参数  rewriteBatchedStatements=true

表示允许mysql进行批量插入

此参数默认为关闭状态,说会因为返回主键或其他造成未知错误。具体原因未深究

设置后发现插入任不是真正批量插入,依然是由循环单个sql进行插入

查看打印的sql发现多次sql的参数不一致

因参数个数不一致会造成mybatis无法解析,会使用循环插入方式解决。

解决方案二:

给所有参数设置默认值

给主表的无参构造函数设置所有默认值,在Excel对象与数据库bean对象进行拷贝时,除了读出的数据其他均保留为默认值

此举作用:让插入语句拥有统一的参数个数和顺序

让mybatis可以使用  insert into table () values ()()()()()()  的语句形式

从而实现真正的批量插入

达到  几千条/秒

当两百万数据插入完成后,进入数据库清理默认数据

update table  set a = null where a = ‘defaultcvalue’

 中间优化了一些小表的小几万数据 放入内存通过map进行缓存  减少了400 * 50000 * 小表数量  的次数循环

最终插入加清理 两百万简单处理的数据 用时一个小时左右 

若使用  多线程 可能耗时更短  但是因为使用了预分配主键的问题,不想在保证数据一致性上在花费功夫   就这样吧   累了

总结:mybatis 和 mybaits plus  的批量插入需要保证 入参个数与顺序一致 否则即使打开了  rewriteBatchedStatements=true 参数也不会进行真正的批量插入

物理多线程:甚至可以使用两台计算机同时执行相同的流程的多线程方式     hhhhhhhh

学吧。学无止境啊

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23596.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信