关于框架在插入大量数据时候的效率慢的问题疑问

Blade 未结 5 1820
8855709
8855709 剑圣 2021-08-24 10:21

一、该问题的重现步骤是什么?

1. 准备:一个Spring Jdbctemplate的环境、一个Springboot+Mybatis的纯净环境、Bladex框架-Biz工程

2. 同时对单表,18个字段进行批量插入,分别测试100-10万条数据的插入。数据库为MySQL。

3.记录每次插入的时间。


二、你期待的结果是什么?实际看到的又是什么?


期待的结果是:框架的插入效率,应该跟Spring+Mybatis差异不大,但是实际看到的结果是,在批量插入超过5000条的时候,我们框架的插入速度已经比Spring+Mybatis慢了1倍。

(插入均采用 Mybatis Mapper,传入List,XML文件为insert  <foreach>)

可以看到,批量插入上万之后,纯净Mybatis已经比JdbcTemplate慢了1倍,而框架又比Mybatis慢了1倍。


能不能查一下,框架是哪里的封装影响了效率,我认为慢其实是可以接受的,毕竟封装就会慢,但是这个慢了1倍,还是太多了,或者给一个方向,我们的行业,批量数据同步很多,很多导入、接口引导等存在不少上万数据导入的场景,所以比较关注这个问题。


           插入方式

插入条数    
jdbc纯净Spring+Mybatis使用框架测试SqlExecute(日志打印SQL实际执行时间)
100204217566
50026734019522
100029442739541
200037258471870
50006199671789157
1000093414683470374
500002503485692341460
10000046359318210987465


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

最新版本,windows系统,IDEA开发环境,32GB内存电脑,配置应该是没问题的,而且测试是在同一台电脑同一个数据库。


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

如还需要其他信息,可以在评论区继续讨论

5条回答
  • 2021-08-24 11:46

    大数据量的话 用 mapper 上的一个批量方法,是拼接成 install (xx,xx) values 形式的,更快

    2 讨论(1)
  • 2021-08-24 11:43

    框架会有token解析、xss防注入、多租户插件拦截等额外的操作,在这个上面会耗时。

    如果想让性能和原生一致,你把对应接口做token放行、xss关闭、多租户关闭就可以了。

    因为内部用的就是mybatis-plus,把业务相关的逻辑去掉,就和原生一样了。

    0 讨论(1)
  • 2021-08-24 13:58

    就是想问一下,哪一步耗时最长,因为我是直接组装的insert values()()()语句。


    我是直接进入Service方法才开始计时的。


    按照你的说法,token解析时间应该是很短的,而且不会随着数据量的递增和增加。

    多租户,也只是一道拦截,同样不会随着数据量的递增而增加。


    xss放SQL攻击倒是有可能,这个位置是在哪里?我看下这里的速度。

    倒不是说框架慢,或者质疑什么。

    只是想看一看有没有什么优化的空间,共同让框架更好。找一下跟原生速度差异点最大的那个位置,只要把能够接近原生就好,不求能够相同。


    0 讨论(0)
  • 2021-10-20 17:03

    同问。 目前框架批量导入数据确实非常慢。

    0 讨论(0)
  • 2022-08-26 17:37

    可以换种思路去解决,表id自增,insert into 表A   select * from  表B。这种速率是最快的。服不服

    0 讨论(0)
提交回复