美文网首页laravel
大批量假数据填充的正确方法

大批量假数据填充的正确方法

作者: 足迹人生2017 | 来源:发表于2018-06-27 16:18 被阅读1次

说明

开发 数据填充 时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。

只有当 db:seed 运行起来很快的时候,才能完全利用数据填充工具带来的便利,而不是最后变成累赘。

模型工厂

Laravel 的官方文档中,建议 使用模型工厂来填充数据 ,在日常使用中,需要注意以下。

避免使用 create 方法

在使用 模型工厂函数 来书写假数据插入逻辑时,要注意避免使用 create 方法,因为每一次就是一条 SQL 语句。

factory(\App\Models\User::class)->times(300)->create();

以下截图是一个使用 factory 辅助函数的例子,插入 300 条数据,总共执行了 602 条 SQL 语句,总执行时长为 23.91 秒。

file

轻轻松松运行时间就累积起来了,你能想象运行一次 db:seed 要半个小时是什么感觉么?

c4o3E6gq7W.png

正确的做法:使用 make 方法

$users = factory(\App\Models\User::class)->times(1000)->make();
\App\Models\User::insert($users->toArray());
file

传统方式

一个错误的例子

下面代码执行了 1000 条 SQL 语句,在书写数据填充的时候,也是要尽量避免。

$faker = Faker::create();
$users = User::lists('id');

foreach (range(1, 1000) as $index)
{
    Topic::create([
        'user_id'     => $faker->randomElement($users),
        'title'       => $faker->sentence(),
        'description' => $faker->text(),
    ]);
}

解决方案

使用 DB:insert,直接,快速,一步到位:

$faker = Faker::create();
$users = User::lists('id');
$datas = [];

foreach (range(1, 1000) as $index)
{
  $datas[] = [
      'user_id'     => $faker->randomElement($users),
      'title'       => $faker->sentence(),
      'description' => $faker->text(),
      'created_at'  => Carbon::now()->toDateTimeString(),
      'updated_at'  => Carbon::now()->toDateTimeString(),
  ];
}
DB::table('topics')->insert($datas);

只有 db:seed 运行起来很快的时候,你才可以随时随地,想 seed 就 seed。

--- EOF ---

本文章首发在 Laravel China 社区

相关文章

  • 大批量假数据填充的正确方法

    说明 开发 数据填充 时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量...

  • 批处理 rewriteBatchedStatements=tru

    最近在优化大批量数据插入的性能问题。项目原来使用的大批量数据插入方法是Mybatis的foreach拼接SQL的方...

  • 处理缺失数据

    方法一:直接丢弃含缺失数据的列。 方法二:对缺失值进行填充,SimpleImputer()默认按均值填充。 方法三...

  • laravel 基础教程 —— Seeding

    数据库:数据填充(Seeding) 简介 Laravel 使用 seed 类提供一种简便的方法填充你用于测试的数据...

  • laravel中批量填充假数据(一)

    laravel中批量填充假数据分为两个部分 对要生成假数据的指定模型字段进行赋值 批量生成假数据模型 使用arti...

  • 数据清洗和准备

    一、处理缺失数据 处理方法有: 1、滤除缺失数据 2、填充缺失数据 填充用fillna函数,它的参数有: 其中me...

  • 数据填充

    数据填充 factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为...

  • laravel 模型工厂 简单使用

    Laravel 使用填充类和测试数据提供了一个简单方法来填充数据到数据库。所有的填充类都位于 database/s...

  • laravel 数据初始化和假数据填充

    数据初始化 创建数据迁移文件 编写数据迁移文件 假数据填充 数据模型 User.php 用户的数据工厂 编辑dat...

  • 数据填充HTML的方法

    1. js填充 2. JS使用正则+JSON对HTML模板进行数据填充 原文地址感觉这才是原创啊:牛逼:基于HTM...

网友评论

    本文标题:大批量假数据填充的正确方法

    本文链接:https://www.haomeiwen.com/subject/wgxiyftx.html