2014-02-24 5 views
1

스프링 배치에 익숙하지 만 스프링 배치를 사용하고 multipartItemReder를 읽는다면 multipartItemReader가 내 프로젝트에 적합하지 않다고 생각합니다. 당신의 생각과 길드를 통해 몇 가지 포인트를 제공하십시오.여러 서브 디렉토리의 스프링 배치 다중 소스

나는 아래의 디렉토리 구조와 같이 5 천만 개 이상의 XML 파일을 가지고 있습니다.

GOOD 
    0 
     001/en/1.xml 
     001/jp/1.xml 
     002/en/2.xml 
     003/en/3.xml 
     004/jp/4.xml 
     .... 
     .... 
     999/jp/1.xml 
    1000 
     001/en/1.xml 
     001/jp/1.xml 
     002/en/2.xml 
     003/en/3.xml 
     004/jp/4.xml 
     .... 
     .... 
     999/jp/1.xml 
    2000 
    3000 
    ... 
    .. no limit 
REMAKE/ 
    0 
     001/en/1.xml 
     001/jp/1.xml 
     002/en/2.xml 
     003/en/3.xml 
     004/jp/4.xml 
     .... 
     .... 
     999/jp/1.xml 
PROCLAIMED/ 
... 
    ... 
    .... 
    like 100 directories .. 

각 소스 (GOOD, 리메이크, 선포 ... 등) 다른 XML 파일 편대가 있습니다. 1. 각 소스에 대해 항목 프로세서를 생성해야합니다. 2. 각 원본은 스레드이거나 커밋 트랜잭션 = 1 또는 SOURCE //// xml 안의 lang 파일 수를 기반으로하는 스레드 범위 일 것입니다. 더 나은 옵션은 무엇입니까? 3. IteamReader는 여전히 복잡한 구현이라고 느낍니다. 여기서 각 xml 파일에는 하나의 레코드 만 있습니다. 귀하의 의견을 공유하십시오.

감사

답변

2

은 아마 이런 종류의 시나리오에 가장 적합한의 연습은 partitioning를 사용하는 것입니다; 나는 많은 도움을 줄 수 없도록 시도하지 않았지만 동일한 유형의 데이터를 관리하고 데이터가 혼합 된 경우가 아니라면 파티셔닝이 도움이된다고 생각합니다. 이제

내 2 센트 ...
내가 commit-interval 1에 해당 가지고 split/flow

  • 필요를 사용하지 않는 분리 된 스레드로 관리 parallel steps

    1. 각 소스에 갈 것이다; (당신이 세밀하게 커밋하려는 경우 또는 사용자 정의 CompletionPolicy)는
    2. 전문 프로세서에 의해 반환 된 객체의 모든 종류의 소스의 모든 종류에 대한 StaxEventItemReader 특정에 MultiResourceItemReader 위임을 사용하여 성능을 개선하기 위해 큰 값을 사용할 수 있습니다 당신의 inputs.Really가 많은 도움을위한 독자
    3. 작가는 .. 난이 multiResourceI 하나 의심의 여지가 감사를 (당신의 필요의 따라 다름)

    <job id="job1"> 
        <split id="split1" task-executor="taskExecutor" next="lastStep"> 
        <flow> 
         <step id="GOOD" /> 
        </flow> 
        <flow> 
         <step id="REMAKE" /> 
        </flow> 
        <flow> 
         <step id="PROCLAIMED" /> 
        </flow> 
        </split> 
        <step id="GOOD"> 
        <tasklet> 
         <batch commit-interval="100"> 
         // Set MultiResourceItemReader and delegate to specialized StaxEventItemReader for GOOD file structure 
         // Set specialized processor for GOOD object 
         // Set writer (IDK which type) 
         </batch> 
        </step> 
    </job> 
    
  • +0

    temReader. 30,000 개의 파일이 GOOD/0에만 있다고 가정 해 보겠습니다. GOOD/0, GOOD/1000, Good/2000 총 파일 수는 3 * 30,000입니다. 나는 더 좋은 단계를 0,1000,2000으로 나눌 필요가있다. 그렇다면 그 프로 블럼은 .. 0,1000,2000은 내용이 아니다 .. REMAKE .. 또는 multiresourceIteamReader works 아래에 오직 0 만있을 수있다. . 제발 제안 해주세요 .. – Negation

    +0

    "split"이 커밋 간격에 따라 SB에 의해 자동으로 수행되기 때문에 수동으로 분할 할 필요가 없습니다. 물론 더 넓은 커밋 간격으로 더 많은 메모리가 필요합니다 (균형 잡힌 커밋 간격을 설정하면 성능이 크게 향상 될 수 있습니다) –

    관련 문제