Heim  >  Artikel  >  PHP-Framework  >  Detaillierte Erklärung, wie Laravel Seeder Millionen von Simulationsdaten generiert

Detaillierte Erklärung, wie Laravel Seeder Millionen von Simulationsdaten generiert

藏色散人
藏色散人nach vorne
2021-03-26 17:01:102812Durchsuche

wird der Laravel Seeder vorgestellt, der eine Million Simulationsdaten generiert. Ich hoffe, dass er den Freunden, die ihn brauchen, hilfreich sein wird!

Laravel integriert die Faker-Bibliothek und stellt Seeder bereit, um uns bei der einfachen Generierung von Simulationsdaten zu helfen.

Detaillierte Erklärung, wie Laravel Seeder Millionen von Simulationsdaten generiertSchreiben Sie zuerst den Data Warehouse- und Datenfüllcode.

Data Warehouse-Code Thementabelle, was sehr praktisch ist.

use App\Models\Topic;use Faker\Generator as Faker;$factory->define(Topic::class, function (Faker $faker) {

    $sentence = $faker->sentence();

    // 随机取一个月以内的时间
    $updated_at = $faker->dateTimeThisMonth();

    // 传参为生成最大时间不超过,因为创建时间永远比更改时间要早
    $created_at = $faker->dateTimeThisMonth($updated_at);

    return [
        'title' => $sentence,
        'body' => $faker->text(),
        'excerpt' => $sentence,
        'created_at' => $created_at,
        'updated_at' => $updated_at,
    ];});

Wenn wir 1 Million Daten einfügen möchten, können wir dann einfach die Parameter von times() auf 1000.000 ändern? Wenn Sie dies tun, wird die folgende Fehlermeldung angezeigt:

 class TopicsTableSeeder extends Seeder{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // 所有用户ID数组,如:[1,2,3,4]
        $user_ids = User::all()->pluck('id')->toArray();

        // 所有分类 ID 数组,如:[1,2,3,4]
        $category_ids = Category::all()->pluck('id')->toArray();

        // 获取 Faker 实例
        $faker = app(Faker\Generator::class);

        $topics = factory(Topic::class)
            ->times(1000)
            ->make()
            ->each(function ($topic, $index) use ($user_ids, $category_ids, $faker){
                // 从用户 ID 数组中随机取出一个并赋值
                $topic->user_id = $faker->randomElement($user_ids);

                // 话题分类,同上
                $topic->category_id = $faker->randomElement($category_ids);
            });

        // 将数据集合转换为数组,并插入到数据库中
        Topic::insert($topics->toArray());
    }}

Dieses Problem liegt daran, dass MySQL standardmäßig maximal 65535 (2 ^ 16-1) Platzhalter unterstützt und die geschriebenen Daten m Spalten und n Zeilen umfassen. m*n muss kleiner als 65535 sein.

Es ist also unmöglich, eine große Datenmenge auf einmal einzufügen. Nach der Prüfung

gibt es keinen relevanten Parameter für die Anzahl der Ausführungen.

Schließlich habe ich beschlossen, das Problem mithilfe eines Shell-Skripts zu lösen.

php artisan db:seed --class=TopicsTableSeeder
Warten Sie einen Moment, Sie werden feststellen, dass 1 Million Daten generiert wurden!

PS: Der Data Warehouse- und Datenfüllcode stammt von larabbs

php artisan db:seed

Empfohlen:

Die neuesten fünf Laravel-Video-Tutorials

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie Laravel Seeder Millionen von Simulationsdaten generiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen