laravel - 如何优化 Laravel 超大数据的导入流程?

标签 laravel laravel-5.7 php-7.1 laravel-5.8

我有导入大约 500 万条大量记录的功能。

我必须在导入过程中同时为相关表创建条目。

我必须对新条目进行批量插入查询,并处理所有查询,并以 block 的形式进行处理。

还有哪些其他方法可以加快这一过程?

最佳答案

因此,为那些懒得单独查看所有评论的人总结一下:

  • 使用 Laravel 提供的数据库外观而不是 Eloquent 模型 improved performance .
  • 分批运行导入过程,而不是一次导入所有数据。
  • Disble query logging以节省内存使用。
  • 在后台作业中运行导入,而不是在网络请求期间运行。

除了已经提出的观点之外,您还可以考虑:

  • 首先运行一个作业,以 50 行(或其他合理的数字)为一组读取您的输入 xlsx/csv 文件。确保没有将所有行都保留在内存中。然后为每批生产线创建一个新作业。因此,您将进行两步导入。
  • 为每个批处理创建单独的作业时,您可以同时运行这些作业(= 同时运行多个队列工作线程)。
  • 如果您有用户等待导入完成,请确保显示进度条或至少显示某种动画加载程序。虽然这不会加快进程,但会给他们一个指示工作正在完成。
  • 您还可以利用 database transactions用于同时运行多个数据库查询(此查询归功于 Philippe Thiers)

关于laravel - 如何优化 Laravel 超大数据的导入流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56459095/

相关文章:

php - 拉维查询。独一无二的地方

laravel - 带 Lumen 的 NotFoundHttpException

android - Laravel 中的 FCM 配置问题推送通知 Android 和 iOs

mpdf - 如何使 mPDF 6.1 与 PHP 7.1.5 一起工作

javascript - Linnworks 的 AJAX 请求

php - 使用 Laravel Query Builder 进行复杂的 MySQL 内连接查询

php - 在 Windows 上使用 Laravel 5.7 出现 500 服务器错误

php - Laravel 作业(数据库)不执行句柄

php - 如何在 Symfony3.4 中清除 Controller 中的缓存?

php - 准备在 PHP 7.2 中删除 Mcrypt