선형 데이터 처리 루틴의 성능을 최적화하는 임무가 주어집니다. 다음은 이미 수행 된 작업에 대한 개요입니다.실시간 데이터 처리
데이터가 UDP 포트에 들어 오면 다른 포트에서 수신 대기하고 원시 데이터를 SQL Server 데이터베이스에 쓰거나 (RawData 테이블을 호출 할 수 있음) 데이터를 수신합니다. 그런 다음 RawData 테이블에서 원시 데이터를 가져 와서 개별 데이터row를 처리하는 단일 스레드 선형 응용 프로그램의 여러 인스턴스를 보유합니다. 어떤 처리가 의미하는 것은 원시 데이터가 주어진 엔티티에 대해 이전에 수신 된 데이터와 비교되고, 계산이 다른 판독 값의 수를 계산하기 위해 수행 된 다음 각 개별 데이터 행에 대해 몇 개의 웹 서비스가 호출되고 마지막으로 각 데이터에 대해 새 레코드가 추가된다는 것입니다. ProcessedData 테이블의 행. 또한 해당 엔티티 레코드가 다른 테이블에서 업데이트됩니다.
내가보기에 문제는 작은 부분으로 나눌 수 있으며 데이터 처리를 위해 생산자/소비자 패턴을 사용할 수 있습니다. 생산자 한 스레드가 공유 (차단) 대기열을 채우고 여러 소비자가 데이터 행을 가져옵니다. 대기열 및 병렬 처리를 수행합니다. 소비자는 처리 된 데이터를 다른 공유 대기열에 저장 한 다음 SqlBulkCopy를 사용하여 새로운 레코드를 삽입하는 또 다른 소비자 스레드 (단일)가 액세스합니다. 이 과정에서 업데이트에 대한 엔티티 정보를 저장할 다른 공유 대기열이 있으며 또 다른 소비자는 엔티티에 대한 업데이트 된 정보를 수집하고 업데이트를 수행합니다.
질문은 곧장 앞으로 나올 것으로 보이지만, 성가신 접근법으로 보입니다. 나는 내가 원하는 것을하는 더 좋은 방법이 있다고 느낍니다. 위의 프로듀서/소비자 패턴 구현에 대한 제안 사항은 무엇입니까? 또는 내 문제에 대해 다른 디자인 패턴을 찾아야합니까? 사전에
감사
, 당신은 "큐를 공유"의미합니까? –
예, 제 잘못입니다. 그것을 알아 줘서 고마워. 수정 됨 – Dimitri