2011-12-23 5 views
0

우리는 JDBC 배치 작업이 있습니다. 두 개의 테이블이 있습니다JDBC 배치 작업에서 멀티 스레딩 사용

  • BUSINESS_CONTRACT
  • CLASSIFY_RECORD

비즈니스 계약의 테이블 BUSINESS_CONTRACT 정보를 저장, 우리는 테이블 CLASSIFY_RECORD에 결과를 분류 매월 저장 사업 계약을 분류합니다.

일괄 처리 작업은 한 달에 한 번 실행되며 BUSINESS_CONTRACT에 비즈니스 계약을 쿼리하여 분류 할 필요가 있는지 쿼리하고 분류 한 다음 CLASSIFY_RECORD에 분류 결과를 삽입합니다.

배치 작업이 지금은 하나의 스레드에서 실행하고 나는 그것을 만들고 싶어 멀티 스레드

으로 실행 내가 발송자 노동자 패턴을 사용하여 기본 코드 구조를 작성해야하는 방법

?

자바 멀티 스레딩을 배우지 만 이론적 인 리소스를 대부분 발견했습니다. 이제 실제 문제를 해결하기 위해 멀티 스레딩을 사용하지만 첫 번째 코드를 작성하는 방법을 모르겠습니다.

답변

2

먼저 멀티 스레딩의 복잡성이 추가적으로 필요합니까? 현재 프로세스가 실행되기까지 얼마나 걸립니까? 서버에서 다중 CPU 또는 다중 CPU 코어를 사용할 수 있습니까? 그렇게하면 멀티 스레딩이 유용할까요?

내가 당신을 위해 코드를 작성하지 않을거야,하지만 당신에게 몇 가지 포인터를 제공 할 수 있습니다 ... 당신이 직접이 일을 얼마나

? 당신이 이것을 종이 기록으로 갖고 있다고 가정하고 동료와 함께 작업을 나누어야했습니다. 어떻게 일을 나눌까요? 2 명 또는 20 명 사이? (이 스레드를 분할 할 수있는 스레드의 수는 많습니다.)

이러한 세부 정보를 파악한 후에는 상위 스레드 (작업자, 상위 "발송자"코드 사용)를 만들 수 있습니다. 각 스레드는 귀하의 쿼리 결과. 각 스레드에 대한 참조를 유지하고 전체 일괄 처리가 완료 될 때까지 대기하기 위해 스레드가 모두 시작되면 각 스레드에 .join()을 호출해야합니다. 동일한 작업 단위로 분할하기 어려운 많은 양의 데이터가있는 경우 (1,000 개의 레코드를 500과 500으로 나누면 어떤 이유로 든 리소스의 75 %와 25 %가 필요할 수 있음) 작업을 분할하는 것이 좋습니다 훨씬 작은 단위 (스레드보다 많은 단위)로 설정 한 다음 모든 작업이 할당 될 때까지 디스패처로 하여금 작업 단위를 작업자에게 계속 제공하게합니다.

또한 작업의 분할 기능이 정말로 뚜렷합니까? 어떤 이유로 인해 하나의 작업 단위가 실패하고 데이터베이스에서 롤백해야하는 경우 이는 다른 모든 작업 단위가 중지되어야하며 기존 삽입물도 롤백된다는 것을 의미합니까?

+0

나는 이것을 배우기 위해서만하고 싶다. 진짜 문제가있는 개념을 이해합니다. – CaiNiaoCoder

+0

현재 내 랩톱에서 실행하는 데 30 분이 걸리고 일괄 작업이 8 개의 CPU가있는 서버에 배포됩니다. – CaiNiaoCoder

0

일괄 업데이트를 사용하고 있습니까? 단일 업데이트를 수행하는 여러 스레드보다 차이가 더 클 것입니다.