假如我在做一个批量插入数据到mysql的接口,但批量传进来的数据会有多大我不知道,在数据传进来以后会有一个list去接收。为了避免插入数据时出现OOM,请问可以怎么处理?
我的思路:对传进来的数据做细分,每1W条插入一次(假设一次最多能插入1W)。
实现代码:
public void insert(List<User> list) {
int count = 10000; // 这里暂不考虑数据量小于10000的情况
int max = list.size();
int temp = count;
for(int i=0; i<max; i+=count){
if(max - i < count){
temp = max - i; // 假如总共有1.5万条数据,那么最后那5k的数据不能按最初设定的count=10000的量来取,所以这里做个处理。
}
List<Integer> list1 = list.subList(i, i+temp);
userMapper.insert(list1); // 每次传1W的数据到mapper方法里
}
}
1、请问这段代码能不能优化?
2、请问有没有更好的方法去处理这个问题?
请大神指教,谢谢。
1:业务规范数据量
2:解决方法思路就是你的分批保存