【发布时间】:2018-12-31 10:27:10
【问题描述】:
我正在使用 laravel 5.6
我插入大数据的脚本是这样的:
...
$insert_data = [];
foreach ($json['value'] as $value) {
$posting_date = Carbon::parse($value['Posting_Date']);
$posting_date = $posting_date->format('Y-m-d');
$data = [
'item_no' => $value['Item_No'],
'entry_no' => $value['Entry_No'],
'document_no' => $value['Document_No'],
'posting_date' => $posting_date,
....
];
$insert_data[] = $data;
}
\DB::table('items_details')->insert($insert_data);
我尝试在脚本中插入 100 条记录,它可以工作。成功插入数据
但是如果我尝试用脚本插入 50000 条记录,它会变得非常慢。我已经等了大约 10 分钟,但它没有工作。存在这样的错误:
504 Gateway Time-out
我该如何解决这个问题?
【问题讨论】:
-
你可以使用 Laravel 的分块函数来分块数据。也许这篇文章会对你有所帮助insert big data
-
你也可以使用 Laravel 队列系统,每次插入创建 50,000 个作业。但是如果你坚持大量发送,你需要增加 PHP 超时时间(你会想 google 一下你的服务器堆栈是什么)
-
是的,在这种情况下,chunk 不会真正帮助您。
chunk将有助于解决内存使用问题,但不适用于您的应用程序运行时间过长。就像 Rob 建议的那样,研究使用队列并为每个单独的项目创建一个作业。然后你可以运行一堆工人来为你处理数据。 -
@Dwight 我仍然很困惑。尝试用详细的答案(用脚本)回答这个问题
-
@Rob Fonseca 我仍然很困惑。尝试用详细的答案(用脚本)回答这个问题
标签: laravel laravel-5 insert bigdata laravel-5.6