我正在构建一个Web服务,它为来自嵌入式数据库的请求提供服务,该服务本质上是一个文件。该文件将被另一个进程定期替换。文件重新加载后台线程vs基于请求
该服务必须检测到此更改并更新文件参考。请求驱动是否更好?即每个请求是否检查新版本是否可用或是否有后台线程?
我正在构建一个Web服务,它为来自嵌入式数据库的请求提供服务,该服务本质上是一个文件。该文件将被另一个进程定期替换。文件重新加载后台线程vs基于请求
该服务必须检测到此更改并更新文件参考。请求驱动是否更好?即每个请求是否检查新版本是否可用或是否有后台线程?
我不会为每个请求做任何IO相关的事情。事实上,我认为服务本身不应该负责检查数据的新鲜度。所有它应该关心的是从源头上查找数据(执行一些不是CPU密集型的业务逻辑)并将其发出以便处于实时Web应用程序的SLA安全范围之内(我假设?)。你可以考虑像可能性:
“我不会为每个请求做任何与IO有关的事情。”你能否详细说明一下? – user1956069
我认为它应该像后台进程它将通知用户注册事件。您可以使用文件侦听器来实现此目的。下面的示例是基于轮询的模型。
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("Path/To/Watched/Directory");
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
请求的数量是多少?你如何访问该文件?平面文件? Json,Xml? – efekctive
5k/s;在文本文件 – user1956069
中管理分隔的键值对,因此您需要执行某种f if-modified-因为每次请求都会执行,并在适当时缓存数据。或者servlet /控制器中的另一个线程提取更改。如果更新不是太频繁,你可能会没有线程。但每秒5k似乎要求强大的东西。异步响应会很好 – efekctive