1. 목적/배경
- 가끔 대용량 데이터 처리(예. DB에 100만건 insert values로 bulk insert할때) 부하 분산을 위해 적절한 데이터 사이즈로 분할하여 처리할 필요가 있음
(간단한 수학 계산인데 필요할때마다 다시 코딩하는게 번거롭고 헷갈려서 메모 목적으로 작성해둡니다.
2. 처리 방법
- 적절한 데이터 사이즈만큼 잘라서 loop처리
샘플 소스
public static void main(String[] args) {
int dataSize = 103;
ArrayList<Integer> dataList = new ArrayList<>(dataSize);
for (int i = 1; i <= dataSize; i++) {
dataList.add(i);
}
final int dataCnt = dataList.size();
final int PER_CNT = 10;
int fromIndex = 0;
int toIndex = 0;
boolean isNeedNextLoop = true;
int loopCompleteCnt = 0;
do {
fromIndex = loopCompleteCnt * PER_CNT;
toIndex = fromIndex + PER_CNT;
if (toIndex >= dataCnt) {
toIndex = dataCnt;
isNeedNextLoop = false;
}
System.out.println(String.format("%s회 data subList: %s", loopCompleteCnt+1, dataList.subList(fromIndex, toIndex)));
loopCompleteCnt++;
} while (isNeedNextLoop);
}
샘플소스 결과
1회 data subList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2회 data subList: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
3회 data subList: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
4회 data subList: [31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
5회 data subList: [41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
6회 data subList: [51, 52, 53, 54, 55, 56, 57, 58, 59, 60]
7회 data subList: [61, 62, 63, 64, 65, 66, 67, 68, 69, 70]
8회 data subList: [71, 72, 73, 74, 75, 76, 77, 78, 79, 80]
9회 data subList: [81, 82, 83, 84, 85, 86, 87, 88, 89, 90]
10회 data subList: [91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
11회 data subList: [101, 102, 103]