Laravel-excel: 为什么排队的出口要花很多时间?

创建于 2020-07-02  ·  7评论  ·  资料来源: Maatwebsite/Laravel-Excel

先决条件

  • [X]已阅读并理解: https :
  • [X]检查是否仍支持您的Laravel Excel版本: https ://docs.laravel-excel.com/3.1/getting-started/support.html#supported -versions
  • [X]检查了您的问题之前是否尚未提出。
  • [X]填写了整个问题模板

版本号

  • PHP版本:7.1.3
  • Laravel版本:5.8
  • 套餐版本:3.1

描述

我已经使用此程序包一年多了。 最近,我开始在内存和性能方面遇到问题。 用户正在尝试下载大量数据; 有时历史数据。 因此,我阅读了文档,然后找到了排队的部分。 起初,这是一个完美的解决方案。 对于排队的导出,将分派多个作业,以按块生成文件。 但是我注意到了一些。 分派的每个作业(AppendQueryToSheet)花费的时间都比上一个多。 最终工作(CloseSheet)花费了更多时间才能完成。

我的问题是:这是排队导出的工作方式吗? 或我想念什么吗?

附加信息

我正在使用Redis和Horizo​​n。 即使我尝试了多名工人,但似乎每当工作完成时,都会派出新工作。 因此,它没有解决我的问题。

我附上了这张图片,所以您可以看到已注册的时间。

Selection_007

question

最有用的评论

每个查询都必须重新打开电子表格文件,这需要花费一定时间PhpSpreadsheet,因此,每次追加的确需要更长的时间。

我计划对3.2进行一些更改,以改善这一点。

所有7条评论

每个查询都必须重新打开电子表格文件,这需要花费一定时间PhpSpreadsheet,因此,每次追加的确需要更长的时间。

我计划对3.2进行一些更改,以改善这一点。

我在这里遇到同样的问题。 文件大小也不大,只有5-10mb。 我没有遇到CPU或内存使用率的任何峰值。

我决定使用python和pandas构建服务,它改进了很多,我的意思是说很多。 Laravel Excel是一个出色的库,但我想这可能不是正确的工具

@ okmkey45公平地说,这并不是Laravel Excel的真正错,它依赖于PHPSpreadsheet,PHPSpreadsheet是一个用于读取/写入文件的低效库。 很遗憾,因为关于分块查询和排队作业的抽象在这里非常方便,并且为我节省了很多时间在Go / Python中编写服务并将其与我的队列挂钩。

PHPSpreadsheet有很多替代方法,它们在大型文件上的运行速度要快得多,也许当我们使用->queueShouldQueue时可以将它们交换掉吗?

@aakarim实际上是我考虑过的东西,但是目前没有时间或用例来实现。 我将对PR保持开放,只要它保持简单并选择加入即可。

在这个截止日期之后,我将受到打击。 是否有您喜欢/推荐@patrickbrouwers的软件包? https://github.com/box/spout似乎是一个不错的起点。

@aakarim是的盒子/壶嘴。 我什至考虑过,如果您只想使用csv,就可以使用League / csv,这是迄今为止大批量进出口的最快选择。

此页面是否有帮助?
0 / 5 - 0 等级