java - 降低服务器端报告占用过多内存风险的最佳方法

标签 java mysql sql database database-performance

我们有一个服务 Tomcat-Spring-JPA 运行在 MySQL 之上。

报告功能是我们服务的一部分。我们有不同规模的不同客户,因此数据量也不同。

当他们运行报告时,他们选择日期和各种其他参数,将它们发送到服务器,然后服务器创建 PDF、XLS 工作表等。

我们担心,如果他们可以选择任何日期时间段,可能会占用太多内存,因此我们做了一些估计,并提出了报告的“最大时间段”。

由于多种原因,这并不是最佳选择,因此现在我们有更多时间,我们正在寻找替代方案。

到目前为止,我想出的最好的方法基本上是使用“最大行数”,即使用所有参数对查询进行计数(*),如果数据太多,请告诉用户它们必须缩短日期期限。

不过我有一些担忧,希望得到一些反馈:

  1. count(*)本身不会占用相当多的内存吗?
  2. 有没有我没有想到的更好的方法来做到这一点? (我不想进行分页或类似操作,如果他们正在运行报告,他们希望获得所有数据)

最佳答案

  1. Count(*) 不会占用大量内存。

  2. 我会定义时间范围以减少数据量。例如。如果所选间隔小于 15 天,则报告时间间隔为 DAYS。

如果间隔大于 15 天但小于 100 天,则报告时间间隔为 WEEK

如果间隔大于 100 天但小于 200 天,则报告时间间隔为 MONTH

如果间隔大于 200 天但小于 500 天,则报告时间间隔为 QARTER

如果间隔超过 500 天,则报告时间间隔为 YEAR。

因此,报告中的行数始终是合理的,但如果用户想要更深入地调查某些间隔,则选择较短的时间段并生成更详细的报告

关于java - 降低服务器端报告占用过多内存风险的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27500578/

相关文章:

Java 俄罗斯方 block 旋转

php - 在PHP中使用正则表达式查询MYSQL

mysql多对多关系查询

c# - TIME(2) 列的值显示为带有额外的精度零,而查询仅返回 2

java - 为什么我的 JPanel 会与 JFrame 上的其他组件混淆?

java - 有没有办法结合 xpath 和 regexp 来提取节点值的一部分?

mysql - 命令不同步;你现在不能运行这个命令 SQL

python - 将 NumPy.fromiter() 与 MySQL 查询结果一起使用时出错

mysql - 在 Drupal 7 结构化查询中使用 AS 语法

java - apache wicket 世界中的母版页