一、该问题的重现步骤是什么?
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实际执行时间) |
100 | 204 | 217 | 56 | 6 |
500 | 267 | 340 | 195 | 22 |
1000 | 294 | 427 | 395 | 41 |
2000 | 372 | 584 | 718 | 70 |
5000 | 619 | 967 | 1789 | 157 |
10000 | 934 | 1468 | 3470 | 374 |
50000 | 2503 | 4856 | 9234 | 1460 |
100000 | 4635 | 9318 | 21098 | 7465 |
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
最新版本,windows系统,IDEA开发环境,32GB内存电脑,配置应该是没问题的,而且测试是在同一台电脑同一个数据库。
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
如还需要其他信息,可以在评论区继续讨论
大数据量的话 用 mapper 上的一个批量方法,是拼接成 install (xx,xx) values 形式的,更快
框架会有token解析、xss防注入、多租户插件拦截等额外的操作,在这个上面会耗时。
如果想让性能和原生一致,你把对应接口做token放行、xss关闭、多租户关闭就可以了。
因为内部用的就是mybatis-plus,把业务相关的逻辑去掉,就和原生一样了。
就是想问一下,哪一步耗时最长,因为我是直接组装的insert values()()()语句。
我是直接进入Service方法才开始计时的。
按照你的说法,token解析时间应该是很短的,而且不会随着数据量的递增和增加。
多租户,也只是一道拦截,同样不会随着数据量的递增而增加。
xss放SQL攻击倒是有可能,这个位置是在哪里?我看下这里的速度。
倒不是说框架慢,或者质疑什么。
只是想看一看有没有什么优化的空间,共同让框架更好。找一下跟原生速度差异点最大的那个位置,只要把能够接近原生就好,不求能够相同。
同问。 目前框架批量导入数据确实非常慢。
可以换种思路去解决,表id自增,insert into 表A select * from 表B。这种速率是最快的。服不服
扫一扫访问 Blade技术社区 移动端