gpt4 book ai didi

php - 在我的应用服务上处理文件的替代方法

转载 作者:行者123 更新时间:2023-12-03 02:15:15 25 4
gpt4 key购买 nike

我目前正在使用我的应用服务来处理文件。我正在上传 Excel 文件并使用 PhpSpreadsheet 对其进行处理。

在本地,它们在 90 秒内完成(笔记本电脑、SSD、i7、16GB RAM)。在我的应用程序服务(小型 Linux 计划)上,相同的文件和脚本可能需要 10 分钟以上。这会导致 504 网关超时错误。然后我手动确认数据库中的数据上传。

这种处理文件的方式有什么替代方法?

编辑#1

通过处理,我的意思是上传 Excel 文件、浏览行、提取数据并使用 PhpSpreadsheet 更新数据库。我当前的文件大小为 102KB,有 4300 行、23 列,大约需要 6 分钟。在本地,只需几秒钟。

示例:

if ($this->request->is('post')) 
{
$file = $this->request->getData()['my_file'];
$path = TMP.time()."_".$file->getClientFileName();
$file->moveTo($path);

$spreadsheet = IOFactory::load($path);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, false, true, true);

foreach($sheetData as $sheet_row)
{ ... }
}

最佳答案

评论提供了一些关于基本选项的好想法,简要总结如下:

  1. 使用更快的服务器
  2. 使您的算法能够更快地解析文件(无论是什么)。

这两种方法都可以在短期内缓解您的问题。然而,假设您的算法经过了充分优化,并且您的服务器的速度与您愿意支付的速度一样快,这两种情况可能对您来说都是正确的,并且在现实情况下通常也是正确的。我们还假设您的文件大小在某种程度上是不可预测的,因此即使经过充分优化且速度很快,您也可能需要支持处理速度较慢的较大文件的异常情况。

听起来您的工作流程是(同步):

  1. 客户端使用 Excel 文件向服务器发送 HTTP 请求
  2. PHP 服务器运行文件解析
  3. 完成后,服务器返回 HTTP 200(正常)和已解析的文件。如果请求花费的时间超过 600 秒(或任何超时时间),则会超时并返回 504。

我同意建议删除步骤 2 并将其放入 background-job processing 的评论。 。这将使您的工作流程如下所示:

  1. 客户端使用 Excel 文件向服务器发送 HTTP 请求
  2. 服务器将 Excel 文件异步发送到后台作业处理器,开始处理但不等待其完成。
  3. 服务器返回 HTTP“201 Created”,表示服务器已开始处理文件。
  4. 客户端每隔 n 秒轮询一次服务器上的作业状态端点,以检查作业是否完成

有很多不同的方法可以做到这一点(上面的后台处理链接详细介绍了一些 Azure 式的方法)。

我能想到的一种以 Azure 为中心的方法是使用 function app triggered by a queue 。在这种情况下,您的服务器可以接受 Excel 文件,将其保存在某处(或者您的客户端可以将其直接上传到 Azure Blob 存储),然后向您的队列添加一个条目,说明要处理的文件的位置。使用队列触发器,这可以自动触发您的函数应用代码,该代码可以从队列中提取最旧的消息,找到要处理的文件,在尽可能多的时间内处理它,然后上传“已处理” "文件返回到 Blob 存储以供客户端使用。

我对 PHP 后台作业工具知之甚少,因此上述建议是 Azure 性的,但肯定还有数十种其他方法可以完成上面提出的相同基本工作流程,上述方法的好处是您可以实现它基本上使用您想要的任何语言,核心架构保持不变。

关于php - 在我的应用服务上处理文件的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71628110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com