2017-05-19 4 views
0

기본적으로 파일 인 포함 된 데이터베이스의 요청을 처리하는 웹 서비스를 구축하고 있습니다. 파일은 주기적으로 다른 프로세스로 대체됩니다.파일 다시로드 배경 스레드 대 요청 기반

서비스가이 변경 사항을 감지하고 파일 참조를 업데이트해야합니다. 요청을 유도하도록하는 것이 더 좋습니다. 즉, 최신 버전을 사용할 수 있는지 각 요청을 확인하거나 그렇게 할 백그라운드 스레드가 있습니까?

+0

요청한 볼륨이 무엇입니까? 어떻게 파일에 액세스하고 있습니까? 플랫 파일? 젠슨, XML? – efekctive

+0

5k/s; 텍스트 파일의 파이프로 구분 된 키 값 쌍 – user1956069

+0

모든 요청에 ​​대해 일종의 수정을 수행하고 적절한 경우 데이터를 캐시해야하는 경우 일종의 f를 수행해야합니다. 서블릿/컨트롤러 내부의 다른 스레드가 변경 사항을 감지합니다. 업데이트가 너무 자주 발생하지 않으면 스레드없이 얻을 수 있습니다. 그러나 초당 5k는 강력한 것을 필요로합니다. 비동기 응답은 멋질 것입니다. – efekctive

답변

0

모든 요청에 ​​관련된 IO는 수행하지 않습니다. 사실 나는 서비스 자체가 데이터의 신선도를 점검 할 책임이 있어서는 안된다고 주장한다. 관심을 가져야 할 것은 소스에서 데이터를 검색하고 (CPU 집중적이지 않은 비즈니스 로직을 수행하는) 실시간 웹 애플리케이션을위한 SLA의 안전 범위 내에 있기 위해 그것을 방출하는 것입니다. (당신이 언급 한대로) 확인하고 파일을 업데이트를 유지 폴러가있는

  • 배경 스레드 : 당신은 같은 가능성을 고려할 수 있습니다.
  • 콘텐츠 변경 파일 ( )에 대한 트리거가 발생할 때마다 업데이트하도록 앱에 알리는 이벤트 기반 디자인 (pub-sub)입니다.
+0

"모든 요청에 ​​관련된 IO는 수행하지 않겠습니다." 정교하게 주시겠습니까? – user1956069

0

나는이 이벤트를 등록자에게 알리는 백그라운드 프로세스와 같아야한다고 생각합니다.이 목적을 위해 파일 수신기를 사용할 수 있습니다. 예를 들어 폴링 기반 모델입니다.

WatchService watcher = FileSystems.getDefault().newWatchService(); 

    Path dir = Paths.get("Path/To/Watched/Directory"); 
     dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);