Sat*_*atz 1 mysql laravel laravel-5 laravel-query-builder laravel-eloquent
我需要专家的建议和解决方案。我们正在这里开发工作门户网站,处理大约 100 万条记录。我们正面临获取超时错误的记录。如何使用 laravel 和 MySql 处理这些记录?
我们正在尝试按照以下步骤操作:
小智 7
在处理大型数据集时,您应该对结果进行分块。这允许您处理较小的负载,减少内存消耗,并允许您在获取/处理其余数据时将数据返回给用户。请参阅有关分块的 laravel 文档:
https://laravel.com/docs/5.5/eloquent#chunking-results
为了进一步加快速度,您可以利用多线程并产生并发进程,每个进程一次处理一个块。Symfony 的Symfony\Component\Process\Process类使这很容易做到。
https://symfony.com/doc/current/components/process.html
来自文档:
如果您需要处理数千条数据库记录,请考虑使用块方法。该方法一次检索一小块结果,并将每个块送入闭包进行处理。此方法对于编写处理数千条记录的 Artisan 命令非常有用。例如,让我们一次以 100 条记录为单位处理整个 users 表:
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});
Run Code Online (Sandbox Code Playgroud)