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

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

藏色散人
Freigeben: 2021-03-30 09:14:06
nach vorne
2873 Leute haben es durchsucht

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,
    ];});
Nach dem Login kopieren

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());
    }}
Nach dem Login kopieren

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
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage