Spring Batch에서의 파티셔닝(Partitioning)
import org.springframework.batch.core.partition.support.Partitioner;
import org.springframework.batch.item.ExecutionContext;
import java.util.HashMap;
import java.util.Map;
public class RangePartitioner implements Partitioner {
@Override
public Map<String, ExecutionContext> partition(int gridSize) {
Map<String, ExecutionContext> partitions = new HashMap<>();
int min = 1; // 데이터베이스 ID의 최소값
int max = 5; // 데이터베이스 ID의 최대값
int targetSize = (max - min) / gridSize + 1; // 각 Partition의 범위 크기
int start = min;
int end = start + targetSize - 1;
for (int i = 0; i < gridSize; i++) {
ExecutionContext context = new ExecutionContext();
context.putInt("minId", start); // 시작 ID
context.putInt("maxId", end); // 종료 ID
partitions.put("partition" + i, context);
start += targetSize;
end += targetSize;
}
return partitions;
}
}
gridSize = 4
: 데이터를 4개의 Partition으로 나눔.chunkSize = 10
: 각 Partition에서 데이터를 10개씩 읽어 처리.코드가 여러줄 나올거같진 않아서 방식은 페어 프로그래밍 방식으로 진행하도록 하죠
개발 절차는 이렇게 갈 예정이에요
Partition 생성:
각 Partition에서 Chunk 처리:
병렬 실행:
트랜잭션 관리: