저장 한 레코드에 일괄 처리를 포함하는 최대 절전 모드 응용 프로그램을 작성 중입니다.처리 완료 후 다른 데이터베이스 작업에 동일한 스레드 사용
데이터베이스 테이블에 30000 개의 레코드가 저장되어 있고 30 개의 스레드가 있다고 가정합니다. 각 스레드는 병렬로, 즉 일괄 처리로 1000 개의 레코드를 처리합니다. Thread1 processes 1000 to Thread2 : 1001 to 2001, etc. 여기서 process는 내가 모두 일괄 적으로 select 연산을 수행한다는 것을 의미합니다. 나는 이들을 파싱하여 웹 서비스로 보내기 위해이 레코드를 처리하고있다.
시나리오가이 문제가 여기 때 발생하는 레코드가 다음 레코드의 상태 열에 다른 하나 이제 0
로 만들어지는 웹 서비스에 의해 허용되는 경우 데이터베이스 테이블의 상태라는 이름의 열입니다 Thread1은 id가 1에서 1000 사이의 레코드를 처리하고 Thread 2는 여전히 1001에서 2001을 처리합니다. id가 5에서 30, 40에서 50 사이 인 레코드가 0, 즉 웹 서비스에 전달되지 않은 것으로 가정합니다. 이제 시나리오는 처리가 완료된 스레드, 즉 Thread1이 ID가 5 ~ 30, 40 ~ 50 인 레코드를 처리하고 레코드의 메시지를 웹 서비스로 다시 전달하려고 시도해야합니다.
나는 위와 같은 방법으로 코딩하기 위해 ExecutorService
을 사용하고 있습니다.
은 너무 커서 선택하기 위해 30 개의 스레드를 사용해야합니다. 1 개의 스레드 선택기와 30 개의 작업자 스레드를 사용하는 것은 어떻습니까? – JIV
몇 개의 코어를 사용할 수 있습니까? 30보다 작 으면 과도한 컨텍스트 스위칭과 스 래싱으로 인해 병렬화가 이루어지지 않습니다. 지나치게 복잡한 디자인처럼 들립니다. – duffymo
아니요. 이미 처리하는 데 많은 시간이 걸리고 레코드의 일괄 처리 및 배달에 대한 언급을 잊어 버렸기 때문에 단일 스레드로 알고있는 30000 레코드 이상을 처리하는 것이 좋습니다. webservice는 ** 15 분 **의 제한된 시간 프레임 내에서 발생해야합니다. 내 컴퓨터에는 8 개의 코어가 있습니다. –