数据库插入数据量过大时分批插入处理(JAVA)
在特殊情况下,比如插入的数据是业务表,每行的数据量较大,且该表访问频繁,那么,插入1条的时候可能不会锁表,而插入10000行的时候,会遇到锁表的情况。如果并发插入,甚至发生死锁。这个时候,就要根据经验分析,调整每个批次的量,以避免影响使用。...
·
批处理原因
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行的时候,会遇到锁表的情况。如果并发插入,甚至发生死锁。这个时候,就要根据经验分析,调整每个批次的量,以避免影响使用。
更多推荐
已为社区贡献1条内容
所有评论(0)