用于计算或仅控制的Java servlet?

时间:2010-11-23 19:47:01

标签: java jsp servlets java-ee

我正在建立一个网站。它基本上计算动态变化权重的图表上的最短路径。

我计划使用jsp进行开发

原始权重存储在数据库中。一旦我的网站启动并运行,人们就可以登录并执行可能导致边缘权重发生变化的任务。他们可以请求从任何节点到任何节点的最短路径。我的问题是:

  1. 每当我得到最短路径查询时,我应该

    一个。读取数据库,构建图形,计算最短路径并返回结果?或者,
    湾只要服务器启动,图形是否应保留在内存中,图形仅在网站启动时从数据库构建一次。每当遇到updateWeight查询时,权重都会在内存和数据库中更新。

  2. 如果b。那么我如何在内存中维护这个动态图? servlet是处理这个问题的正确技术吗?我想象一个场景,我的jsp页面将请求servlet进行两种查询....当servlet第一次启动时,它会读取数据库,并构建图形,然后每当jsp页面请求它是最短路径,无需咨询数据库即可直接计算。

  3. Servlet用于控制'进程' - 所以我已经阅读了...所以servlet不是正确的事情..如果不是那么什么?豆?

2 个答案:

答案 0 :(得分:1)

选择取决于您:如果您确定该用户将等待结果很长时间,那么您可以只询问数据库,计算路径然后返回结果。但是如果你很幸运,并且你的servlet在具有大量内存的服务器上运行,你当然可以将图形加载到内存中并将其保存在那里。

这里的Servlet技术还可以。只是不要在doGet()或doPost()方法中编写整个计算代码。 Servlet应该真正充当控制器,只是从其他类中获取结果。将代码移动到另一个线程,并在计算器类中完成工作。

答案 1 :(得分:0)

  

一个。读取数据库,构建图形,计算最短路径并返回结果?要么;   湾只要服务器启动,图形是否应保留在内存中,图形仅在网站启动时从数据库构建一次。每当遇到updateWeight查询时,权重都会在内存和数据库中更新。

取决于数据的大小,进程的成本和服务器的硬件容量。我们无法可靠地回答这个问题。只有在靠近生产环境的环境中自行运行的分析器才能提供可行的信息。

  

如果b。那么我如何在内存中维护这个动态图? servlet是处理这个问题的正确技术吗?我想象一个场景,我的jsp页面将请求servlet进行两种查询....当servlet第一次启动时,它会读取数据库,并构建图形,然后每当jsp页面请求它是一条最短路径,无需咨询数据库即可直接计算。

您可以这样做,但在设计良好的MVC方法中,servlet应仅充当请求/响应控制器。在域/操作对象中执行业务/计算任务(servlet应该将作业委托给它们)。要在应用程序范围内进行初始化,最好的方法是实现将数据放入应用程序范围的ServletContextListener。然后,servlet可以从应用程序范围获取它,JSP也可以通过EL访问它。但是,您必须仔细考虑对应用程序范围数据的修改的同步/并发性。 DB更适合这种情况。