2017-05-19 34 views
0

我正在构建一个Web服务,它为来自嵌入式数据库的请求提供服务,该服务本质上是一个文件。该文件将被另一个进程定期替换。文件重新加载后台线程vs基于请求

该服务必须检测到此更改并更新文件参考。请求驱动是否更好?即每个请求是否检查新版本是否可用或是否有后台线程?

+0

请求的数量是多少?你如何访问该文件?平面文件? Json,Xml? – efekctive

+0

5k/s;在文本文件 – user1956069

+0

中管理分隔的键值对,因此您需要执行某种f if-modified-因为每次请求都会执行,并在适当时缓存数据。或者servlet /控制器中的另一个线程提取更改。如果更新不是太频繁,你可能会没有线程。但每秒5k似乎要求强大的东西。异步响应会很好 – efekctive

回答

0

我不会为每个请求做任何IO相关的事情。事实上,我认为服务本身不应该负责检查数据的新鲜度。所有它应该关心的是从源头上查找数据(执行一些不是CPU密集型的业务逻辑)并将其发出以便处于实时Web应用程序的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); 
相关问题