数据库插入数据量过大时分批插入处理(JAVA)

批处理原因

1、一次性全部插入,mysql的sql语句是有最大长度限制的,默认是1M,可配置,超过最大长度就会报错。

2、一条条插入,数据传输多次,事务处理多次,会造成资源浪费。

解决方案

// 批次最大保存数量
int batchNum = 500;

// 总数据量
int insertLength = list.size();

int i = 0;
while (insertLength > batchNum) {
	briefCntechRangesDataMapper.insertList(list.subList(i, i + batchNum));
	i = i + batchNum;
	insertLength = insertLength - batchNum;
}

// 保存首次或最后一次数据量不足"批次最大保存数量"的数据
if (insertLength > 0) {
	briefCntechRangesDataMapper.insertList(list.subList(i, i + insertLength));
}

     在特殊情况下,比如插入的数据是业务表,每行的数据量较大,且该表访问频繁,那么,插入1条的时候可能不会锁表,而插入10000行的时候,会遇到锁表的情况。如果并发插入,甚至发生死锁。这个时候,就要根据经验分析,调整每个批次的量,以避免影响使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值