gpt4 book ai didi

php - Laravel 队列中的执行时间呈指数增长

转载 作者:行者123 更新时间:2023-11-29 18:39:36 24 4
gpt4 key购买 nike

说明

我目前有一组排队的队列来上传和处理大量数据。这个设置非常繁琐,因为我必须检查记录是否已经存在,并且由于我要上传 10k 条记录的远端,所以我必须减少每个队列必须处理的记录量。

我设置了一个队列来处理数据,并将其分成每个 500 条记录的位,然后将这些 block 传递到它自己的单独队列中,该队列检查每条记录是否存在,然后继续将其上传到数据库.

我设置了一个监听器来检查这个确切过程需要多长时间,这就是问题发生的地方。

正在运行php artisan queue:listen --memory=1024 --timeout=100在我的 CLI 中,前几个队列大约需要 5-10 秒。然后它们的时间开始呈指数增长。

This batch took: 29.013844013214 Seconds to process
This batch took: 28.680887937546 Seconds to process
This batch took: 28.172641992569 Seconds to process
This batch took: 27.722810983658 Seconds to process
This batch took: 20.302350997925 Seconds to process
This batch took: 16.653347969055 Seconds to process
This batch took: 16.353777885437 Seconds to process
This batch took: 15.923125982285 Seconds to process
This batch took: 15.426895856857 Seconds to process
This batch took: 15.151268005371 Seconds to process

这可能会持续 100 秒以上,然后再次随机重置为 5-10 秒。

这是我用来处理记录的代码。

       foreach ($data as $record) {
$batch_id = $record['batch_id'];
unset($record['batch_id']);
if (is_null(Record::where($record)->first())) {
$record['batch_id'] = $batch_id;
$upload[] = $record;
} else {
$duplicatechunks++;
}
}
if (!empty($upload)) {
DB::table('records')->insert($upload);
}

此代码删除值 Batch_id因为它是唯一的,因此我不能在搜索现有记录时使用它。该代码还跟踪 $duplicatechunks value 这只是一种了解该记录之前是否已上传的方法。 $duplicatechunks被上传到$batch我也在跟踪这个队列。在代码的开头,它被设置为 $duplicatechunks = $batch->chunks_duplicate然后在数据库下方插入 $batch->chunks_duplicate = $duplicatechunks保存它。

到目前为止我已经尝试过

  • 我尝试为处理插入记录的进程提供更多处理能力,但这只能持续一分钟左右。
  • 我还尝试编辑代码,从单独上传每条记录到批量上传它们。这将每个队列的总时间从 19 秒缩短到 5 秒。

重要

  • 队列处理程序是数据库,使用内置的 Laravel 作业表

有人遇到过类似的队列问题吗?

编辑:

由于这些记录在执行 InsertRecords 作业并将其存储在数据库中之前不会保存在任何地方,这会对这些记录的执行时间产生任何影响吗?将所有记录临时存储在不同的表中,然后稍后将它们迁移到实际表中是否更明智?

最佳答案

每个队列都有一个可以配置的过期时间。我不知道是否可以针对每个作业进行配置,但可以将其配置为最长作业的最大过期时间。

关于php - Laravel 队列中的执行时间呈指数增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038309/

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