我的编程空间,编程开发者的网络收藏夹
学习永远不晚

大批量数据分批批量插入或更新(Mybatis+MySQL)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

大批量数据分批批量插入或更新(Mybatis+MySQL)

在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素:

  1. 数据库一次可以承受多大或者多少条数据的插入
  2. 批量插入是否会占用Mysql资源太久,影响系统整体使用性能
  3. 代码中的集合是否会造成内存不足

一、MySql性能考虑

1.1计算插入一条数据需要的空间

以下是mysql各个数据类型的占用的字节,可在菜鸟教程-MySQL查看各个分类的具体字节。
数值类型
数值类型
注意定长和变长数据类型,将所有数据加起来。假设一条数据需要的字节是100。

1.2查看MySQL参数

查看MySQL一次最大能插入多少

show variables like '%max_allowed_packet%';

查询
1073741824/1024/1024=1024M,1M是10241024/100=10485.76,约等于10000条。那么1024M可插入102410000=1024W条。

1.3MySQL执行时间

链接耗时 (30%)
发送query到服务器 (20%)
解析query (20%)
插入操作 (10% * 词条数目)
插入index (10% * Index的数目)
关闭链接 (10%)
可以看出最耗时的是链接。其次是解析。所以插入或更新时尽量采用批量的方式

二、代码实现分批批量查询

2.1Mybatis的xml实现批量sql

直接贴代码,使用DUPLICATE KEY UPDATE是,在设置主键或者唯一键字段的前提下,存在则更新、不存在则插入。这是MySQL中的使用方法

<insert id="saveOrUpdateSlaStandardsRat">        INSERT INTO sla_standards_rat(date_time,area_name,ec_code,ec_name,belong_trade,apn_name,standards_rat,order_type,create_time)        VALUES        <foreach collection="list" index="index" item="item" separator=",">            (#{item.dateTime},#{item.city},#{item.ecCode},#{item.ecName},#{item.industry},#{item.apnName},#{item.rat},#{item.orderType},now())        foreach>        ON DUPLICATE KEY UPDATE ec_name = values(ec_name), belong_trade=values(belong_trade),area_name=values(area_name),standards_rat=values(standards_rat),update_time=now()insert>

2.2分批插入

MAX_NUMBER为自行定义分批的大小。

    private static final Integer MAX_NUMBER = 2000;    @Override    public void test() {        log.info("-----------------开始同步数据--------------------");        List<SrsfulirmsResourceGprs> resourceGprs = srsfulirmsResourceOssMapper.getSrsfulirmsResourceGprss();        //分割        if (!CollectionUtils.isEmpty(resourceGprs)){            int limit = countStep(resourceGprs.size());            List<List<SrsfulirmsResourceGprs>> mglist1 = new ArrayList<>();            Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> {                mglist1.add(resourceGprs.stream().skip(i * MAX_NUMBER).limit(MAX_NUMBER).collect(Collectors.toList()));            });            for (List<SrsfulirmsResourceGprs> myList:mglist1){                int row1 = srsfulirmsResourceMysqlMapper.saveOrUpdateSrsfulirmsResourceGprss(myList);                log.info("---------------------同步数据row1:"+row1+"------------------------");                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }       private static Integer countStep(Integer size) {        return (size + MAX_NUMBER - 1) / MAX_NUMBER;    }

来源地址:https://blog.csdn.net/her_he/article/details/129929228

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

大批量数据分批批量插入或更新(Mybatis+MySQL)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

大批量数据分批批量插入或更新(Mybatis+MySQL)

大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成
2023-08-30

MyBatis如何批量插入大量数据

这篇文章将为大家详细讲解有关MyBatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBa
2023-06-22

Mybatis Plus批量插入数据到MySQL中

SQL语句的长度受MySQL服务端的max_allowed_packet参数限制,默认为1M,如果拼接的字符串过长则会报错。可以进来减少批量提交的记录,或者是调整max_allowed_packet参数的大小。

MyBatis iterate优化大数据批量更新

在处理大数据批量更新时,MyBatis 提供了一些方法来优化性能。以下是一些建议:使用批量更新:在 MyBatis 的 XML 映射文件中,可以使用 标签进行批量更新。这样可以将多个更新操作合并为一个 SQL 语句,从而
MyBatis iterate优化大数据批量更新
2024-09-19

mybatis怎么批量更新数据

MyBatis 可以通过批量操作来更新数据。下面是一个示例代码,展示如何使用 MyBatis 进行批量更新数据:1. 首先,需要在 Mapper XML 文件中定义一个批量更新的 SQL 语句,如下所示:```xmlUPDATE table
2023-08-09

MyBatis中怎么批量插入数据

在MyBatis中,可以使用foreach标签来实现批量插入数据。具体步骤如下:创建一个Mapper接口,定义一个insertBatch方法用于批量插入数据。public interface UserMapper {void insertB
MyBatis中怎么批量插入数据
2024-03-07

spring data jpa开启批量插入、批量更新的示例分析

这篇文章给大家分享的是有关spring data jpa开启批量插入、批量更新的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ORM框架,最早我用的是jdbcTemplate,后来用了Mybatis,唯独
2023-06-20

Mybatis批量插入大量数据的方法有哪些

本文小编为大家详细介绍“Mybatis批量插入大量数据的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis批量插入大量数据的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mybat
2023-07-05

编程热搜

目录