如何在Spring MVC Web应用程序中处理需要15分钟才能完成的数据库操作?

时间:2014-01-25 22:35:36

标签: database spring-mvc parallel-processing httprequest informix

我的任务是为数据库中的4个分层依赖实体中的每一个创建一个报告。让我们命名那些实体A,B,C和D.为了生成A的报告,我需要生成B的所有报告。要为B生成报告,必须首先生成所有C级报告。 C也是如此;我需要生成所有D级报告。

我在我的应用程序中使用Spring MVC。为最低级别实体(D)生成报告大约需要3秒钟,并且可以在单个HTTP请求中处理。对于“C”级实体,通常需要10-12秒。在“B”级别,它开始变得相当密集:报告3-4分钟。 “A”级报告需要15分钟才能完成。

通过在数据库上调用存储过程来生成D级别报告。所有其他更高级别的报告都是使用java迭代循环完成的,这些循环生成所有相关报告,最高级别为D(最终在数据库上调用相同的存储过程)。

减少这种密集手术时间的最佳方法是什么?我正在使用Spring MVC,JPA / Hibernate和Bitronix事务管理器[JTA](每个用于生成D级报告的存储过程调用都会打开一个只读事务。)

我是否应该使用线程并行生成较低级别的报告?

手术花了这么长时间或者我做错了什么是正常的吗?

如何处理如此密集的操作,以便用户在不必等待15分钟才能完成HTTP请求的情况下获取所请求的数据?

修改

经过一些调整后,我使用Java Futures和Spring的@Async机制实现了并行算法。 A级报告现在需要3分钟才能完成。我很好奇是否可以进一步改进并行化。我真的不知道底层DBMS(在我的情况下是IBM Informix 11.5)是否在读取时锁定行,这可能是我可以解决的另一个问题。在这种情况下,设置事务的隔离级别会有帮助吗?

0 个答案:

没有答案
相关问题