SpringCloud MyBatis高效批量新增

引言

        mybatis 每次批量新增的数量是越大越好吗,怎么选择每次批量新增的数量,以下实验告诉你

1 背景

某功能模块,一个请求需要入库30万测点,http超时设置了20s,批量新增,超过20s后tcp连接断开,前端判定失败,页面操作出现异常,需要接口在20s内处理完毕并返回结果

2 方案设计

        1)同步方案,批量新增需要在20s内完成,批量新增有三种方式,轮训单次新增、foreach拼接、session提交。

2)异步方案,收到请求后,任务状态变更为正在进行中,返回数据并提示“正在创建任务,请耐心等待”,同时启用线程处理入库数据,入库完成后更改任务状态

3 方案对比

        1)同步方案

                第一种轮训单次新增30万次,单单交互时间损耗就达到不可思议的地步,不可取

       

for(T t:objects){
    mapper.save(t);
}
或者
objects.stream().foreach(object->{mapper.save(object)});

                第二种获取sql session factory类,轮训列表,每次将数据放入session中,当session数据超过n时,提交持久化session里面的数据

@Autowired
private SqlSessionFactory sqlSessionFactory;

private final int BATCH_SIZE=10
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值