2011-03-08 1 views
1

나는 새로운 코드베이스를 사용하고 있으며 iBatis를 사용하고 있습니다. 기존 테이블을 업데이트하거나 추가해야하며 20,000 개 이상의 레코드가 필요할 수 있습니다. 프로세스는 하루에 한 번 실행되며 한밤중에 실행됩니다.일반 거래 많은 레코드 다루는 질문

웹 서비스 호출에서 데이터를 가져오고 있습니다. 데이터를 가져온 다음 레코드 당 하나의 모델 유형 개체를 채우고 각 모델 유형 개체를 개체의 데이터를 읽고 개체를 테이블로 업데이트/삽입하는 몇 가지 메서드에 전달할 계획입니다.

예 :

ArrayList records= new ArrayList(); 
Foo foo= new Foo(); 
foo.setFirstName("Homer"); 
foo.setLastName("Simpson"); 
records.add(foo); 
//make more Foo objects, and put in ArrayList. 

updateOrInsert(records); //this method then iterates over the list and calls some method that does the updating/inserting 

내 주요 질문 트랜잭션으로 삽입/업데이트를 모두 처리하는 방법입니다. 테이블을 업데이트/삽입하는 데 사용되는 모든 레코드가 읽히기 전에 시스템이 다운되면 알 필요가 있으므로 웹 서비스 호출로 돌아가서 시스템이 정상적으로 작동하면 다시 시도 할 수 있습니다.

Java 1.4를 사용 중이며 db는 Oracle입니다.

답변

0

내가보기 엔 당신은 스프링 배치를 사용하여 고려하는 것이 좋습니다 - 오류보고, 트랜잭션 관리, 멀티 스레딩, 스케일링, 입력 유효성 검사 - http://static.springsource.org/spring-batch/

프레임 워크가 일괄 처리에 필요한 필수 기능을 많이 제공합니다.

프레임 워크는 매우 잘 설계되어 있으며 사용하기가 쉽습니다.

나열된 접근 방식은 모든 개체를 읽고 메모리에 모두 저장 한 다음 데이터베이스에 삽입하기를 기다리고 있으므로 잘 수행되지 않을 수 있습니다.

당신은 다음과 같은 과정을 설계하는 것을 고려할 수 있습니다 :

  1. 가 개체의 인스턴스를 만듭니다
  2. 데이터를 가져 오기 위해 웹 서비스를 호출 200 개체
  3. 을 저장할 수있는 캐시를 작성, 검증 개체의 필드에 데이터를 저장하십시오.
  4. 개체를 캐시에 추가하십시오. 캐시가 가득 차면, 배치를 수행
  5. 는 SpringBatch 당신이 배치 커밋 수행 할 수 있습니다 1

단계를 계속 배치의 크기를 제어 데이터베이스

  • 에 캐시에있는 객체의 커밋 커밋, 입력을 읽을 때 오류 처리 수행 - 요청을 다시 시도하고 데이터를 데이터베이스에 쓰는 동안 오류 처리를 수행합니다.

    보세요.

  • +0

    기본적으로 Java 1.4 인 것 외에 다른 것을 사용할 수 없습니다. 귀하가 개략적으로 설명하는 단계가 도움이되며, 거래 방법/방법에 대해 의견을 말합니까? – bmw0128

    +0

    1.4 이외의 다른 것을 사용할 수 없다면 스스로 tx 관리를해야 할 것입니다. – sdc

    +0

    연결을 잡고 자동 커밋을 false로 설정하고, 일괄 처리 삽입을 실행하고, 모든 레코드가 완료되면 명시 적 커밋 – sdc