我有导入大约 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/