【问题标题】:Allowed memory size of 134217728 bytes exhausted (tried to allocate 1052672 bytes)允许的内存大小 134217728 字节用尽(尝试分配 1052672 字节)
【发布时间】:2021-12-29 16:36:09
【问题描述】:

我已经检查过这个问题,但没有找到适合我需要的解决方案。

我为州、城市和地区创建了表格,其中有 37、7431 和 91853 条记录可用。

当我使用 create 而不是在播种器中使用 insert 时,花费的时间更长。

所以,我通过将 create 替换为 insert 来更改我的代码。然后通过Laravel Daily视频了解了chunk。

Chunk 在 CitySeeder 中运行良好,但在 LocalitySeeder 中出现问题。

这是我的 Seeder 中的代码:

    <?php
    
    namespace Database\Seeders;
    
    use App\Models\Locality;
    use Illuminate\Database\Seeder;
    
    class LocalitySeeder extends Seeder
    {
        public function run()
        {
            $input = [
                [ 'name' => 'Adilabad', 'city_id' => 5487, 'created_at' => now()->toDateTimeString(), 'updated_at' => now()->toDateTimeString() ],
.
.
.
.
.
.
.
.
                [ 'name' => 'Nalgonda', 'city_id' => 5476, 'created_at' => now()->toDateTimeString(), 'updated_at' => now()->toDateTimeString() ],];
    $chunks = array_chunk($input, 5000, true);
            foreach ($chunks as $key => $data) {
                Locality::insert($data);
            }
        }
    }

错误图像

使用创建的工作图像

提前致谢。

【问题讨论】:

    标签: laravel laravel-8 laravel-migrations laravel-seeding laravel-factory


    【解决方案1】:

    您正在尝试加载一个包含接近 92K 条目的数组 ($input),然后将其复制到带有 array_chunk 的分块数组中。您已配置(或在安装期间设置)的内存限制不允许您使用这么多 RAM。正如 Daniel 指出的那样,解决此问题的一种方法是增加内存限制,但另一种方法可能是从种子文件中读取这些数据。我将在下面尝试说明这一点,但您可能需要稍作调整。

    localities.json 中,注意每一行都是一个单独的 JSON 对象

    {"name": "Adilabad", "city_id": 5487}
    [...]
    {"name": "Nalgonda", "city_id": 5476}
    

    然后在seeder类中,可以实现run方法如下:

    $now = now()->toDateTimeString();
    $handle = fopen(__DIR__."/localities.json");
    while(($line = fgets($handle)) !== FALSE){
      $data = json_decode($line, TRUE);
      $data["created_at"] = $now;
      $data["updated_at"] = $now;
      Locality::insert($data);
    }
    

    编辑:关于这将花费的时间,这么多数据总是会很慢,但是播种机并不意味着要经常运行。

    【讨论】:

    • 感谢您的评论,我会检查一下。如果有任何问题,我会告诉你的。
    猜你喜欢
    • 2016-04-18
    • 2013-08-09
    • 2017-07-23
    • 2018-02-23
    • 2014-11-20
    • 2017-10-30
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    相关资源
    最近更新 更多