我们有一个服务 Tomcat-Spring-JPA 运行在 MySQL 之上。
报告功能是我们服务的一部分。我们有不同规模的不同客户,因此数据量也不同。
当他们运行报告时,他们选择日期和各种其他参数,将它们发送到服务器,然后服务器创建 PDF、XLS 工作表等。
我们担心,如果他们可以选择任何日期时间段,可能会占用太多内存,因此我们做了一些估计,并提出了报告的“最大时间段”。
由于多种原因,这并不是最佳选择,因此现在我们有更多时间,我们正在寻找替代方案。
到目前为止,我想出的最好的方法基本上是使用“最大行数”,即使用所有参数对查询进行计数(*),如果数据太多,请告诉用户它们必须缩短日期期限。
不过我有一些担忧,希望得到一些反馈:
- count(*)本身不会占用相当多的内存吗?
- 有没有我没有想到的更好的方法来做到这一点? (我不想进行分页或类似操作,如果他们正在运行报告,他们希望获得所有数据)
最佳答案
Count(*) 不会占用大量内存。
我会定义时间范围以减少数据量。例如。如果所选间隔小于 15 天,则报告时间间隔为 DAYS。
如果间隔大于 15 天但小于 100 天,则报告时间间隔为 WEEK
如果间隔大于 100 天但小于 200 天,则报告时间间隔为 MONTH
如果间隔大于 200 天但小于 500 天,则报告时间间隔为 QARTER
如果间隔超过 500 天,则报告时间间隔为 YEAR。
因此,报告中的行数始终是合理的,但如果用户想要更深入地调查某些间隔,则选择较短的时间段并生成更详细的报告
关于java - 降低服务器端报告占用过多内存风险的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27500578/