【问题标题】:Artisan migrate fails for (very) large number of data insertsArtisan migrate 因(非常)大量数据插入而失败
【发布时间】:2019-04-01 13:18:36
【问题描述】:

所以我在最近的一个项目中一直在使用 Laravel 的数据库迁移,并且一切正常,除了一个有大约 380 万行的“城市”表。 以下按预期工作:

DB::table('cities')->insert([
    'name' => 'Dublin'
]);

但是当我将额外的 380 万行添加到上述插入数组中时,工匠迁移命令只是失败/超时。

我在这里遗漏了什么还是有更好的方法?

城市迁移的文件大小为 365 MB,这实际上会导致 Phpstorm 崩溃(内存不足错误)。 我想知道是否有办法将大型数据库迁移拆分为更小的文件?

PHP 7.2 Laravel 5.7 Docker/Laradock。

【问题讨论】:

    标签: php laravel laravel-artisan artisan-migrate laradock


    【解决方案1】:

    我会考虑在 Job 中执行它并在 redis 队列上运行它。

    所以只需编写一个简单的命令来调度作业。另外,我建议您将数据分块写入,例如 1000er 块 :)

    【讨论】:

    • 您也不应该在迁移文件中插入数据。如果只是测试数据,您应该使用 DataSeeder :)
    【解决方案2】:

    在这种情况下使用作业更可取,它可以使用数据块批量插入,就像 addi2113 解释的那样,如果用于测试环境,您应该使用播种机。

    【讨论】:

      【解决方案3】:

      首先你可以在两个播种机中输出记录

      你必须在 php/php.ini 设置中提高你的内存限制

      How to assign more memory to docker container

      【讨论】:

        猜你喜欢
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2011-03-09
        • 1970-01-01
        • 2017-08-13
        相关资源
        最近更新 更多