2013-02-19 2 views
0

네트워크의 다른 사용자 컴퓨터에서 로그 파일을 구문 분석한다고 가정합니다. 어느 날 어느 곳에서 읽히는 기계의 수는 10K에서 40K 사이가 될 수 있습니다. 또한 로그 파일을 구문 분석 한 후 각 구문 분석 결과 (라인 또는 2)를 공통 위치 (데이터베이스 테이블 또는 플랫 파일)에 저장하려고합니다. 로그 파일은 크기가 그다지 크지 않습니다.
MultiThreading to Read Files

어떻게하면 가장 우아하고 효율적인 방법이 될까요?

콘솔 응용 프로그램을 작성하고 스레드 풀을 사용하여 작업을 배포합니까? 아니면 C#에서 사용할 수있는 더 복잡한 솔루션/클래스가 있습니까?

Windows 서비스 작성에 익숙하지 않지만
여러 컴퓨터에 서비스를 배포 할 수 있습니까?
또는
다른 방법이 있습니까?

+0

병목 현상이 거의 확실하게 하드 드라이브가되어 한 번에 둘 이상의 요청을 처리 할 수 ​​없기 때문에 파일 읽기를 다중 스레드하는 것이 도움이되지 않으며 아플 수 있습니다. 멀티 스레딩은 파일의 데이터에 CPU 처리량이 많은 경우에만 도움이됩니다. – Servy

+0

내가 읽고있는 파일은 다른 사용자의 다른 컴퓨터의 다른 하드 드라이브에 있습니다. –

답변

0

이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?

그건 논쟁의 여지가 있습니다. 나는 그 게시물에 대한 이유 중 일부를 말합니다. 개인적으로, 컴퓨터 기반의 로그에 대한 읽기를 스레드 풀링하고 SQL Server 백 엔드에 이러한 작업의 결과를 저장합니다. 그러나 이것은 견고한 생산 환경 접근 방식이며 적용하려는 노력에 따라 적용되지 않을 수 있습니다.

이상적으로 이것은 전용 Windows 서비스로 작성되고 이들을 빌드/디버깅하는 것이됩니다. 최신 버전의 Visual Studio에서 훨씬 쉽습니다. 실행 가능한 또 다른 접근법은 쉽게 실행할 수 있고 출력을 볼 수있는 콘솔 응용 프로그램을 만드는 것입니다. 배포 할 때 모든 NSSM 도구를 사용하여 콘솔 응용 프로그램을 Windows 서비스로 실행할 수 있습니다. 이것은 아마도 가장 고통스럽지 만 약간 clunky 방법입니다 - 다른 포스터는 깔끔한 해결책을 가지고 있습니다.

하나의 응용 프로그램이나 프로그램을 단일 서버에서 실행하는 것이 가장 쉬운 방법이지만 로그 파일이있는 각 컴퓨터의 관련 공유에 대한 액세스가 서버에있는 것으로 가정합니다.

문제가되는 각 시스템에 서비스를 배포하고 정의 된 일정에 따라 한 세트의 로그 파일을 검사하는 스레드가 하나씩 있으므로 전체 멀티 스레드 방법을 무시하고 로컬로 실행하려면 SQL SQL Server 계정을 구성하고 컴퓨터에 대한 폴더 공유를 구성하는 것보다 SQL Server 계정을 쉽게 구성하고 원격 연결을 허용하기 때문에 서버 백엔드를 사용하는 것이 더 쉬운 방법입니다. 도메인 관리자). 단점은 응용 프로그램을 업데이트해야하는 경우 각 컴퓨터에서 업데이트하는 것이 쉽지 않다는 것입니다.

귀하의 상황에 가장 적합한 접근 방식은 무엇입니까? 단일 시스템 배포 또는 단일 SQL Server (또는 다른 데이터 저장소) 인스턴스와의 다중 배포가 필요한 배포?