给出:
问题:
如何使用户能够通过Web应用程序在客户端硬盘驱动器上从DB下载如此大的数据,而不会出现OutOfMemory异常/在服务器上存储/缓冲完整数据
答案 0 :(得分:3)
尝试在单个HTTP请求中执行此操作可能会遇到很多限制。
流和异步处理是两种可能的解决方案。
它看起来像JPA 2.2 has added streaming support。为了避免出现内存不足的情况,您可能需要调整JVM,还可能需要调整JDBC提取大小,以平衡数据库性能和客户端性能。
然后您可以将结果流式传输/缓冲回客户端。
这种方法仍然存在问题。当网络连接暂时中断时会发生什么?有人不小心关闭了浏览器,提供了Content-Length响应标头来帮助评估剩余时间,等等?更好的方法是:
步骤可能如下:
可以将该方法配置为允许自动恢复功能,并消除网络不确定性,并从公式中关闭浏览器选项卡。总体而言,这也减轻了必须处理重新请求的压力。还可以使用JMS,使您能够水平而不是垂直扩展此解决方案。