首页 > 其他分享 >大数据量插入、更新改成批量模式

大数据量插入、更新改成批量模式

时间:2024-01-24 17:33:30浏览次数:27  
标签:false 批量 模式 耗时 sqlSession 数据量 储位 改成

可以看出实际应用场景中储位数据量比较大,优先优化储位相关接口

本机环境优化前耗时:

储位个数 3200
update时间 28578
insert时间 21758

 

 

 

 

本机环境优化后耗时:

储位个数 3200
update时间 5169
insert时间 1733

 

 

 

 

将数据库连接加上rewriteBatchedStatements=true,因为mysql的驱动包里有代码限制

数据源:org.apache.commons.dbcp.BasicDataSource

依赖版本:commons-dbcp:1.4

数据源属性defaultAutoCommit=false;否则sqlSession.commit()不会提交事务。

源码解析

核心代码 

boolean isSuccess = true;
SqlSession sqlSession = null;
try {
    sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
    sqlSession.getConnection().setAutoCommit(false);
    WCellDao wCellDaoBatch = sqlSession.getMapper(WCellDao.class);
    WShelfDao wShelfDaoBatch = sqlSession.getMapper(WShelfDao.class);
    if (CollectionUtils.isNotEmpty(cellExistNeedUpdateList)) {
        for (Cell cel : cellExistNeedUpdateList) {
       wCellDaoBatch.updateCell(cel);
     }
    }

} catch (Exception e) {
    isSuccess = false;
    sqlSession.rollback();
    throw e;
} finally {
    if (sqlSession != null) {
        if (isSuccess) {
            sqlSession.commit();
        }
        sqlSession.close();
    }
}

为什么批量模式这么快?

分别抓包看看,

Test1:

REUSE模式下 代码循环单条执行(耗时最久):

  第一次 第二次 第三次
分组数 6500 6506 6508
总大小(字节) 2107617 2187085 2187913

 

 

 

 

Test2:

REUSE模式下 Mybatis循环拼接sql执行:

  第一次 第二次 第三次
分组数 1747 1657 1012
总大小(字节) 3478215 2544297 1999521

 

 

 

 

Test3:

BATCH模式下 代码循环单条执行(耗时最少):

  第一次 第二次 第三次
分组数 1015 1315 1591
总大小(字节) 1860823 1929347 1941918

 

 

 

 

tips:BATCH模式下测试记得越过mysql驱动的限制。

标签:false,批量,模式,耗时,sqlSession,数据量,储位,改成
From: https://www.cnblogs.com/zhengbiyu/p/17985195

相关文章

  • vue print.js 批量打印功能
    批量打印 :1.用到print.js  自行安装  安装完成后 引用  importprintJSfrom'print-js';2.用到深拷贝深拷贝代码:(可以将此代码放在一个页面中,对此进行引用即可,例如:放在until文件中,引用代码 import{deepClone}from'@/utils/index')exportfunctiondeepClone......
  • mybatis + oracle 批量修改
    service层:intbatchSize=1000;inttotalData=waferOrderList.size();intstartIndex=0;while(startIndex<totalData){intendIndex=Math.min(startIndex+batchSize,totalData);List<WaferOrder>sub......
  • rocketmq--同步、异步、批量、事务消息demo
    在SpringBoot中使用RocketMQ进行同步和异步消息传输的关键是使用RocketMQTemplate类。下面是两个例子,分别演示了如何实现同步和异步消息传输。首先,确保你已经添加了RocketMQ的依赖到你的pom.xml中,如下所示:<dependency><groupId>org.apache.rocketmq</groupId><artifa......
  • sudo提权,ansible批量给所有主机创建系统账户,授权
    sudo(superuseroranotherdo)让普通用户可以以超级管理员或其他人的身份执行命令。sudo基本流程如下:1.管理员需要先授权(修改/etc/sudoers文件)2.普通用户以sudo的形式执行命令3.可以通过sudo-l查看授权情况修改/etc/sudoers的方法如下:1.visudo(带语法检查,默认没有颜色提示)2......
  • mysql innobackupex xtrabackup 大数据量 备份 还原
    大数据量备份与还原,始终是个难点。当MYSQL超10G,用mysqldump来导出就比较慢了。在这里推荐xtrabackup,这个工具比mysqldump要快很多。 一、Xtrabackup介绍1,Xtrabackup是什么Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDBHot......
  • RabbitMq批量删除队列
    RabbitMq批量删除队列​ 由于部分公司同事使用RabbitMq时,没有将Client设置为autodelete,导致大量冗余队列。其中这些队列又是无routekey队列,收到了批量的订阅消息,占用服务器内存。​ 如何将这些无用的队列删除成为一个问题?经过多次摸索,在rabbitmqmanagementapi里面找到了方案:u......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • 【数据库】对大数据量数据集,PostgreSQL分组统计数量,限定每组最多数量
    一、背景介绍在处理大数据量数据集时,我们经常需要进行分组统计。例如,我们需要统计每个城市的人口数量、每个年龄段的人数等。在PostgreSQL中,我们可以使用row_number()函数结合over(partitionby)子句来实现这个功能。同时,为了限定每组最多数量,我们可以使用row_num<=100......
  • oracle导入表批量更新操作
    1、把excel的数据整理成跟数据库存放呼叫相应的样式2、把excel文件另存为*.txt或*.csv文件,最好是*.csv文件,容易对数据做修改3、把转换好的*.txt或*.csv文件上传至数据库中(1)打开工具(tools)菜单-->文本导入器(TextImporter),导入转换好的文件,可以把标题名的复选框去掉4、选择对......