[SPRING] Spring Batch : 높은 볼륨 및 낮은 대기 시간에 사용할 ItemReader 구현
SPRINGSpring Batch : 높은 볼륨 및 낮은 대기 시간에 사용할 ItemReader 구현
사용 사례 : 데이터베이스에서 1 천만 행 [10 열]을 읽고 파일에 기록합니다 (CSV 형식).
해결법
-
==============================
1.이런 종류의 데이터를 처리하기 위해서는 가능한 경우 병렬화해야 할 것입니다 (출력 파일이 입력에서 순서를 유지해야하는 경우에만이를 방지 할 수 있습니다). 처리를 병렬 처리한다고 가정하면,이 유형의 유스 케이스에 대한 두 가지 주요 옵션 (제공 한 것부터)이 남게됩니다.
이런 종류의 데이터를 처리하기 위해서는 가능한 경우 병렬화해야 할 것입니다 (출력 파일이 입력에서 순서를 유지해야하는 경우에만이를 방지 할 수 있습니다). 처리를 병렬 처리한다고 가정하면,이 유형의 유스 케이스에 대한 두 가지 주요 옵션 (제공 한 것부터)이 남게됩니다.
Spring Batch와 병행하여 데이터를 처리하는 방법에 대해 논의했습니다. 특히 내가 제시 한 예는 원격 파티션 작업입니다. 다음에서 볼 수 있습니다. https://www.youtube.com/watch?v=CYTj5YT7CZU
귀하의 특정 질문 :
기본 단계 정의부터 시작하겠습니다. 그런 다음 다중 스레드 단계를 시도하십시오. 요구 사항을 충족시키지 못하면 로컬 파티셔닝으로 이동하고 필요한 경우 원격 파티셔닝하십시오. Spring Batch는 그 진행을 가능한 한 고통스럽게 만들도록 설계되었습니다. 정기적 인 단계에서 구성 업데이트 만있는 다중 스레드 단계로 이동할 수 있습니다. 파티셔닝을 진행하려면 하나의 새 클래스 (Partitioner 구현)와 몇 가지 구성 업데이트를 추가해야합니다.
하나의 마지막 메모. 이것의 대부분은이 데이터의 처리를 병렬 처리하는 것에 관해 이야기했습니다. Spring Batch의 FlatFileItemWriter는 스레드로부터 안전하지 않습니다. 최선의 방법은 여러 파일을 동시에 병렬로 작성한 다음 속도가 가장 중요한 문제 일 경우 나중에 합산하는 것입니다.
-
==============================
2.선택을하기 위해서는 이것을 프로파일 링해야합니다. 평범한 JDBC에서는 다음과 같은 것을 시작했다.
선택을하기 위해서는 이것을 프로파일 링해야합니다. 평범한 JDBC에서는 다음과 같은 것을 시작했다.
JdbcCursorItemReader는이 두 가지를 모두 다루고있는 것으로 보이지만 모든 DBMS에서 최상의 성능을 보장하지는 못하기 때문에 성능이 부적절한 경우 JdbcPagingItemReader를 시도해보십시오.
JdbcCursorItemReader를 사용하여 간단한 처리를하는 것은 매우 엄격한 성능 요구 사항을 제외하고는 데이터 세트 크기가 느려질 것이라고 생각하지 않습니다. 당신이 정말로 JdbcPagingItemReader를 사용하여 병렬 처리해야한다면 더 쉬울 수도 있지만,이 두 인터페이스는 매우 유사하므로 그다지 중요하지 않습니다.
어쨌든, 프로필.
from https://stackoverflow.com/questions/20386642/spring-batch-which-itemreader-implementation-to-use-for-high-volume-low-laten by cc-by-sa and MIT license