Yii2 创建大量数据
Yii2 create large amount of data
我必须从现有 table 数据创建大量数据。量大概一天5000到10000条数据。
我的控制器:
$skus = Sku3d::find()->all();
foreach ($skus as $sku) {
$model = new Loghour3d();
$model->sku = $sku->sku;
$model->modeler = $sku->modeler;
$model->team = $sku->team;
$time = new \DateTime('now');
$today = $time->format('Y-m-d');
$model->day = $today;
$model->handover = $sku->handover;
$model->hour = $sku->totalhours;
$model->save();
}
但是创建的时间不正确。示例:$sku->totalhours = 12
但 $model->hour = 600
而我的代码是 $model->hour = $sku->totalhours;
。所以我不知道600
从哪里来。
还有没有更好的方法来完成这个任务,因为现在大约需要 15-20 分钟。
如果你想加快数据库中大量数据的处理速度,你应该首先放弃使用 ActiveRecord
。对数组进行操作并使用 DAO 应该比为每个记录创建 ActiveRecord
对象更有效。
其次 - 您应该使用 batchInsert()
在一个查询中插入多条记录。在一个查询中插入 100 条记录比在 100 个单独的查询中插入要快。
第三 - 如果每条记录的某些值相同,则将其移动到 foreach 之前。如果当前日期始终相同,则没有必要计算当前日期 10000 次。
$skus = Sku3d::find()->asArray()->all();
$time = new \DateTime('now');
$today = $time->format('Y-m-d');
$toInsert = [];
foreach ($skus as $sku) {
$toInsert[] = [
'sku' => $sku['sku'],
'modeler' => $sku['modeler'],
'team' => $sku['team'],
'day' => $today,
'handover' => $sku['handover'],
'hour' => $sku['totalhours'],
];
}
Yii::$app->db->createCommand()
->batchInsert(
Loghour3d::tableName(),
[
'sku',
'modeler',
'team',
'day',
'handover',
'hour',
],
$toInsert
)
->execute();
我必须从现有 table 数据创建大量数据。量大概一天5000到10000条数据。
我的控制器:
$skus = Sku3d::find()->all();
foreach ($skus as $sku) {
$model = new Loghour3d();
$model->sku = $sku->sku;
$model->modeler = $sku->modeler;
$model->team = $sku->team;
$time = new \DateTime('now');
$today = $time->format('Y-m-d');
$model->day = $today;
$model->handover = $sku->handover;
$model->hour = $sku->totalhours;
$model->save();
}
但是创建的时间不正确。示例:$sku->totalhours = 12
但 $model->hour = 600
而我的代码是 $model->hour = $sku->totalhours;
。所以我不知道600
从哪里来。
还有没有更好的方法来完成这个任务,因为现在大约需要 15-20 分钟。
如果你想加快数据库中大量数据的处理速度,你应该首先放弃使用 ActiveRecord
。对数组进行操作并使用 DAO 应该比为每个记录创建 ActiveRecord
对象更有效。
其次 - 您应该使用 batchInsert()
在一个查询中插入多条记录。在一个查询中插入 100 条记录比在 100 个单独的查询中插入要快。
第三 - 如果每条记录的某些值相同,则将其移动到 foreach 之前。如果当前日期始终相同,则没有必要计算当前日期 10000 次。
$skus = Sku3d::find()->asArray()->all();
$time = new \DateTime('now');
$today = $time->format('Y-m-d');
$toInsert = [];
foreach ($skus as $sku) {
$toInsert[] = [
'sku' => $sku['sku'],
'modeler' => $sku['modeler'],
'team' => $sku['team'],
'day' => $today,
'handover' => $sku['handover'],
'hour' => $sku['totalhours'],
];
}
Yii::$app->db->createCommand()
->batchInsert(
Loghour3d::tableName(),
[
'sku',
'modeler',
'team',
'day',
'handover',
'hour',
],
$toInsert
)
->execute();