Java 在服务器端处理大型文档 一些大型文档(20-50MB)存储在服务器端 可以使用第三方程序加载和查询文档(大约需要3秒钟) 第三方程序(在给定线程上)只能加载一个文档 客户端可以请求查看其中一个已加载文档的查询结果

Java 在服务器端处理大型文档 一些大型文档(20-50MB)存储在服务器端 可以使用第三方程序加载和查询文档(大约需要3秒钟) 第三方程序(在给定线程上)只能加载一个文档 客户端可以请求查看其中一个已加载文档的查询结果,java,tomcat,server-side,large-files,Java,Tomcat,Server Side,Large Files,避免在每次客户端http请求时加载文档的最佳方法是什么?? 将所有这些加载的文档保存在内存中是否合乎逻辑? 如果是,它是否需要一个线程池,其中每个线程都保存一个文档? 如果没有,还有什么其他选择 (使用Java-Tomcat-Ubuntu)我会在您的Tomcat前面放置另一台服务器来进行缓存。如果你自己实现这个,你肯定会遇到问题。设置可能如下所示: 客户端→ 清漆缓存服务器→ Apache HTTP服务器→ Tomcat 如果您需要HTTPS,您可能会考虑在不支持SSL的情况下将另一个服务器放在

避免在每次客户端http请求时加载文档的最佳方法是什么?? 将所有这些加载的文档保存在内存中是否合乎逻辑? 如果是,它是否需要一个线程池,其中每个线程都保存一个文档? 如果没有,还有什么其他选择


(使用Java-Tomcat-Ubuntu)

我会在您的Tomcat前面放置另一台服务器来进行缓存。如果你自己实现这个,你肯定会遇到问题。设置可能如下所示:

客户端
→ <代码>清漆缓存服务器→ <代码>Apache HTTP服务器→ <代码>Tomcat

如果您需要HTTPS,您可能会考虑在不支持SSL的情况下将另一个服务器放在清漆上(如我记得的那样)。那么它可能是这样的:

客户端
→ <代码>英镑→ <代码>清漆缓存服务器→ <代码>Apache HTTP服务器→ <代码>Tomcat

您可以使用某种规则语言配置Varnish。它会很好地为你服务

Pound只是一个小型反向代理,可用于终止SSL和/或负载平衡

链接:

阿帕奇:

清漆:


Pound:

如果您是通过外部程序处理文档,您所能做的就不多了 除了在某处缓存处理结果。另一个选择是急切地预处理文档,并存储所有可能的查询结果,以供以后检索

在每个请求上分叉外部进程显然是最糟糕的选择

由于您的数据是在SEDE web应用程序中处理的,并且是不可变的,所以您可以只使用mmap 将文件放入字节缓冲区中,并重新对其进行处理。这样,您将节省加载和维护时间 在JVM中分配数据


而且,由于您的查询不会更改数据,因此无需将它们推到单独的线程-它们可以直接访问服务于http请求的不同线程的数据

我无法缓存结果,因为这是根据请求进行的,例如:(获取与位置30-40相关的信息),并且它不是外部程序,这是一个名为finally的库:我正在为每个可能的文档考虑一个线程。。这些线程始终处于启动和运行状态。。。当http请求传入时,我根据客户端请求的文档查询正确的线程。。。