우리 회사는 Microsoft Access 데이터베이스를 Cerner Multum에서 얻습니다.이 데이터베이스는 Sybase (12.0.1.3924) 인 프로덕션 백엔드와 다른 위치에 있어야합니다. 그리고 기성 데이터베이스 차용 도구 (http://www.diffkit.org/, http://www.liquibase.org/)를 알고있는 동안 아무 것도 내 필요에 맞지 않는 것 같습니다. 따라서 개념 증명으로 작업을 수행하는 Java 도구를 작성하기로 결정했습니다. 약자로멀티 스레드 데이터베이스 diffing에 대한 올바른 접근
,이 도구는 현재 여기에 설계된대로 작동하고이 절차의 : 모두 백엔드에 연결합니다
- 테이블의 목록을 얻 설정 파일
- 에서 diffed 할
- 각 테이블의 경우 :
- 은 diff를 진행, 설정 파일의 테이블 MS 액세스 및베이스
- 그렇다면 모두에 대해 일치 할 수 있는지 확인 0,123,
- 행의 각 열 위에 반사 통해
- 반복 처리를 객체를 인스턴스화 MS 액세스에서 행을 구하여 액세스 POJO를 사용하여 새롭게 생성 된 "액세스"POJO
- 으로 스터핑 데이터는베이스에 대한 쿼리를 구축
- 쿼리베이스 :
- 결과 세트가 NULL 인 경우, 결과가 NULL로 설정하면,
- 베이스 에 레코드를 삽입 그것으로 다른 POJO 물건 Sybase 데이터를 인스턴스화합니다.
- 두 POJO를 비교하십시오 :
- POJO가 일치하는 경우 : 아무 것도하지 말고 다음 행으로 이동하십시오.
- POJO를 일치하지 않는 경우 : 매우에 불구하고, 액세스 POJO
지금 언급 한 바와 같이
이 현재 작업이 이루어지고의 데이터를 사용하여베이스에 대한 업데이트를 수행 절차, 단일 스레드 방식, 그리고 내 질문 거짓말 : 멀티 스레드 방식으로 두 데이터베이스 (그 관련이없는 일이) diffing에 적절한 접근 방식은 무엇입니까?
나는 멀티 스레딩에 대한 경험이 있지만 삽입/업데이트를 대기 적이 없으므로 정확한 접근법에 대해 확실하지 않습니다. 즉, 나는 완전히 대기열에 적절한 접근 방식이 아니라고 말했어 - 일괄 업데이트/삽입은 어떨까?
이 영역에 대한 경험이있는 사람이라면이 문제에 접근하는 방법에 대한 높은 수준의 통찰력을 얻을 수 있습니까? 그것이 그대로, 약 2 시간 만에 1.5m 행을 휘젓고 있는데 대략 200 TPS입니다. 아주 느린. 모든 지침을 크게 높이겠습니다. 필요한 경우 추가 정보를 제공해 드리겠습니다.
또한보십시오 http://stackoverflow.com/a/29502316/32453 – rogerdpack