2

Q를 XML 파일에서 대용량 데이터를 마이그레이션 할 수 있습니다.데이터베이스에

내가 할 것은 :

I 싶어 내 데이터베이스에서의 유사한 테이블에 XML 파일에서 데이터를 마이그레이션 할 수 있습니다. 예를 들어

:

courses, teachers

  • 두 테이블 (데이터베이스)

    courses, teachers :

    • 내가 두 노드 (XML 파일)이있다.

    사용자가 XML 파일을 내 서버의 폴더에 업로드 할 수 있도록 허용하고 XML 파일을 읽고 데이터베이스에 데이터를 삽입하기 시작합니다.

    문제는 : 일부 오류가 삽입 작업 중에 발생

    경우, 나는 모든 테이블의 모든 삽입 된 기록을 삭제 싶어 (또는 롤백)..

    나는 약 transaction, 각 엔티티의 삽입 트랜잭션을 수행 할 것이라고 생각하기 시작하지만 난 두 가지 문제에 직면

    1. 해야 하는가 나는 하나의 트랜잭션 또는 하나의 엔티티에 의해 모든 개체의 모든 삽입을 넣어 하나의 거래에서? 각 업 로더마다 모든 엔티티 데이터가 모두 삽입되거나 전혀 삽입되지 않아야합니다.

    2. 내가 기록의 큰 숫자가

      는 (1500 기록) 국지적 인 다음 예외가 나타날 말 :

      This IfxTransaction has completed; it is no longer usable

      , 아니 한 수정 그것.

    3. 내 팀 리더는 거래를 사용하지 말라고 말했습니다. 테이블을 잠그고 많은 사용자가 해당 테이블을 사용하기 때문입니다. 그는 다른 메커니즘을 원합니다.

    이 문제를 해결하고 성능 문제와 데이터 무결성 및 일관성을 유지하는 방법 (자세한 설명), 제 문제에 대한 해결책을 제공해주십시오.

  • 답변

    2

    우리가 같은 문제에 사용되는 메커니즘입니다 : 당신은 구글, 또는이 두 기사를 읽을 수 있습니다 임시 테이블에 삽입 한 후 exeption을 수행하지 않고 이러한 임시 테이블의 내용을 실제 테이블에 복사하는 저장 프로 시저를 실행 한 다음 임시 테이블에서 삭제 *합니다. 이렇게하면 트랜잭션 메카니즘을 사용할 때 테이블에 대한 액세스를 잠글 수 없습니다. 또 다른 메커니즘이 있지만 사용하면 모든 데이터베이스 구조를 재고해야합니다. CQRS라고합니다 (.NET의 경우 NCQRS라는 API가 있음)

    1

    올바르게 이해하면 배치 삽입을 수행하고 있습니다. 마지막 실패 지점에서 다시 시작, 데이터 재시도, 청킹, 파티션 분할 등의 기능을 가진 Spring Batch를 사용하지 않는 이유는 무엇입니까?

    asp.net에 태그를 추가했지만 데이터로드가 기술 독립적 인 방법과 분리 된 방법. 그렇지 않니?