1

在我们的 Web 应用程序中,我们有一个功能:

  1. 获取产品列表
  2. 将它们写入 excel 文件
  3. 将excel文件返回给用户下载

此过程需要更多时间,具体取决于 > 2 分钟的产品数量。有些请求需要超过 5 分钟!用户平均下载 100-500 个产品,请求大约需要 1-5 分钟。

我认为 1 分钟对于任何 Web 服务器线程来说都太长了,无法在任何单个请求上处于活动状态。除了需要很长时间之外,该进程本身还会导致我们的服务器出现内存不足错误并使其崩溃。

我想说服他们这是不好的做法,因此必须通过引用软件架构师撰写的文章或书籍或研究来改变设计,这些文章或书籍或研究表明这是如此,以及在这种情况下应该做什么的建议。

有人知道这样的书籍/文章/研究吗?

如果您不同意我的假设,即 1 分钟对于任何 Web 服务器线程都无法在单个请求上处于活动状态,请告诉我原因。

4

2 回答 2

2

您是否尝试过重新思考生成 xls 的逻辑?因为如果这是一个业务需求,那么他们可能真的不愿意改变(去过那里,做过那个)它。

我已经使用 apache-poi 生成 xls 并创建报告,并且性能令人满意(最多几秒钟来制作报告)。我们使用服务器端缓存来缓存数据。然后我们就拿出xls。

于 2011-01-06T19:42:34.417 回答
1

如果正在下载的 Excel 列表是固定的,您可以考虑在后台线程中生成它们并返回直接链接以供下载。即使它在一小时或两小时内更改一次,也值得这样做而不是按需生成。

另一种方法可能是,当用户选择产品列表并请求 Excel 提供一个选项时,他们是否希望接收带有下载链接的电子邮件,或者甚至接收作为电子邮件附件的文件。如果他们接受,将每个请求提交到队列并运行批处理作业,生成 Excel 工作表并将它们作为邮件附件发送。这样您就不会限制 Web 服务器。

此外,我的主要问题是为什么需要一分钟以上,该过程的哪一部分需要很长时间。是否值得研究该领域(数据库连接{池,共同定位服务器},巨大的表{分区},excel生成)?

您是否在每个 excel 中添加固定图形?如果是这样,请使用已经具有页眉/页脚等的模板。

值得重新审视造成瓶颈的部分,而不是盲目地说这是一个糟糕的设计/方法。

调查可能会解决当前的问题,或者至少您不会在未来的设计中继续犯同样的错误

于 2011-03-09T19:55:21.553 回答