gpt4 book ai didi

laravel - 如何在laravel上插入大数据?

转载 作者:行者123 更新时间:2023-12-02 11:14:05 24 4
gpt4 key购买 nike

我使用的是 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

如何解决这个问题?

最佳答案

正如前面所说,如果是时间执行问题,那么在这种情况下, block 不会真正帮助您。我认为您尝试使用的批量插入无法处理那么多数据,所以我看到两个选项:

1 - 重新组织代码以正确使用 block ,这看起来像这样:

$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;
}

$insert_data = collect($insert_data); // Make a collection to use the chunk method

// it will chunk the dataset in smaller collections containing 500 values each.
// Play with the value to get best result
$chunks = $insert_data->chunk(500);

foreach ($chunks as $chunk)
{
\DB::table('items_details')->insert($chunk->toArray());
}

这样,您的批量插入将包含更少的数据,并且能够以相当快的方式处理它。

2 - 如果您的主机支持运行时重载,您可以在代码开始执行之前添加指令:

ini_set('max_execution_time', 120 ) ; // time in seconds

$insert_data = [];

foreach ($json['value'] as $value)
{
...
}

了解更多请前往官方docs

关于laravel - 如何在laravel上插入大数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51487769/

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