2011-09-23 4 views
1

웹 보관 파일 (warc)이 크롤러에 의해 여러 디렉토리에 주기적으로 삭제되는 시나리오가 있습니다. 각 warc 파일은 내부적으로 수천 개의 HTML 파일로 구성됩니다.여러 파일을 동시에 처리하는 방법은 무엇입니까?

이제 이러한 파일을 효율적으로 처리 할 수있는 프레임 워크를 만들어야합니다. Java가 I/O의 병렬 처리 측면에서 확장되지 않는다는 것을 알고 있습니다. 내가 생각하기에이 디렉토리를 스캔하고, 파일 이름을 선택하고, Executor Service 또는 일부 Java 블로킹 대기열에 들어가는 모니터 스레드를 갖는 것입니다. 실행 프로그램 서비스에서 수신하는 작업자 스레드 (I/O 문제의 경우 작은 번호)가 파일을 읽고, HTML 파일을 읽고 각각의 처리를 수행합니다. 이것은 스레드가 동일한 파일에 대해 싸우지 않는지 확인하기위한 것입니다.

성능과 확장 성 측면에서 올바른 접근 방식입니까? 또한 처리 된 파일을 처리하는 방법은 무엇입니까? 이상적으로, 파일은 스레드에 의해 다시 선택되지 않도록 이동되거나 태그되어야합니다. Future 객체를 통해 처리 할 수 ​​있습니까?

답변

1

Java 최신 버전 (1.5부터 시작)에는 이미 기본 io 라이브러리의 일부로 파일 변경 알림 서비스가 내장되어 있습니다. 직접 확인하는 대신 먼저 확인하는 것이 좋습니다. here

+0

답장을 보내 주셔서 감사합니다. 이것은 아마도 새 파일이 디렉토리에 떨어 졌는지 여부를 파악하는 데 도움이되지만 실제로 문제는 해결되지 않습니다. 요구 사항에 따라 일단 파일이 처리되면 파일을 보관 폴더로 옮겨야합니다.작업자 스레드는 작업이 완료되면 파일 이동을 수행 할 수 있지만 기본 스레드에 통보해야합니다. 이유는 작업자 프로세스에서 오류가 발생하는 경우 해당 파일을 다시 재 시도해야한다는 것입니다. – Shamik

+0

@ simeon..this 기능은 jdk 7에서 사용할 수 있지만 여전히 jdk 6입니다. 일부 조사를 할 때 비슷한 기능을 제공하는 jpathwatch라는 유사한 라이브러리를 발견했습니다. 포인터 주셔서 감사. – Shamik

1

필자에게 주요 권장 사항은 특정 요구 사항이없는 한 휠 재발 명을 피하는 것입니다.

자바 7을 사용하는 경우 WatchService를 활용할 수 있습니다 (Simeon G에서 제안).

Java 6 또는 이전 버전으로 제한된 경우이 서비스는 JRE에서 사용할 수 없습니다. 그러나 Apache Commons-IO는 파일 모니터링을 제공합니다. here을 참조하십시오.

Java 7에 비해 Commons-IO 모니터는 등록 된 콜백에 대한 이벤트를 발생시키는 스레드를 생성합니다. Java 7에서는 이벤트 목록을 직접 폴링해야합니다.

일단 이벤트가 발생하면 ExecutorService를 사용하여 오프 스레드 파일을 처리하는 것이 좋습니다. 파일 이동은 Java IO에서 지원되며 발생한 삭제 이벤트는 무시할 수 있습니다.

나는이 모델을 과거에 성공으로 사용 해왔다. 파일이 디렉토리에 존재하면

  • 새 파일 이벤트 가능성이 제기됩니다

    여기에 조심하는 몇 가지 있습니다. 그러나 데이터는 계속해서 기록됩니다. 파일 크기에 대한 합리적 기대치와 파일이 '전체'로 간주 될 때까지 기다릴 필요가있는 시간을 고려하십시오.

  • 파일에 소비해야하는 최대 시간은 얼마입니까?

  • 는 설정을 통해 실행 프로그램 서비스 매개 변수가 tweakable 확인 -이 성능 시험이 도움이

희망을 단순화합니다. 행운을 빕니다.

+0

@ 라이언 ... 당신의 조언에 감사드립니다. 나는 자바 6에 있기 때문에 WatchService를 활용할 수 없다.하지만 WatchService와 비슷한 jpathwatch를 살펴 보았다. 파일이 작성되면 모니터가 이벤트를 발생시킵니다. 필자의 경우, warc 파일을 생성하는 도구는 먼저 임시 파일을 생성하고 임시 파일을 작성합니다. 완료되면 파일을 gzip 처리합니다. 나는 이것이 새로운 파일 확장이기 때문에 기대하고있다. 청취자는 그것을 새로운 파일 이벤트로 취급 할 것이다.이 경우, 추적하기가 쉬울 것이다. – Shamik

관련 문제