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

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

(使用 Java - Tomcat - Ubuntu)

4

2 回答 2

1

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

ClientVarnish Caching ServerApache HTTP ServerTomcat

如果您需要 HTTPS,您可能会考虑在 Varnish 之前放置另一台服务器,因为它不支持 SSL(我记得)。那么它可能是这样的:

ClientPoundVarnish Caching ServerApache HTTP ServerTomcat

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

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

链接:

阿帕奇:http ://httpd.apache.org/

清漆:https ://www.varnish-cache.org/

英镑: http: //www.apsis.ch/pound

于 2012-05-09T08:00:11.237 回答
0

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

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

由于您的数据是在 Web 应用程序中处理的并且是不可变的,因此您可以将文件映射到字节缓冲区并对其进行处理。这样,您将节省 JVM 中数据的加载和分配。

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

于 2012-05-09T09:24:56.667 回答