どのようにインポート速度を向上させるチャンキングを使用します.
5666 ワード
イントロ
昨日、データベースに挿入する前にレコードをチャンクすることについて話しました.今日はどのように動作し、速度の違いは何かを示したい.
TLR
常に3 x速度を得るためにデータベースに挿入する前にあなたのレコードをチャンクします.
コンソールコマンド
このコンソールコードでは、各モデルを反復処理して、Githubから最新のコレクションを取得し、それを注入しようとします.
public function handle(): int
{
//...
foreach ($this->models as $model) {
$record = $service->factory($model);
$injectStation->inject($record, $model);
}
//...
}
注入ステーション
注入ステーションでは、レコードをチャンクして500にし、データベースに挿入します.
public function inject(?Collection $records, string $modelName): void
{
$tableName = (new $modelName)->getTable();
DB::table($tableName)->truncate();
$chunks = $records->chunk(500);
foreach ($chunks as $chunk) {
DB::table($tableName)->insert($chunk->toArray());
}
}
輸入速度は約8秒、70 Kレコードのクールな速度です.もし何か
だから、科学のために.我々は、チャンキングを削除し、それを1つずつ挿入します.(コードの数が少ない場合に注意してください).
public function inject(?Collection $records, string $modelName): void
{
$tableName = (new $modelName)->getTable();
DB::table($tableName)->truncate();
foreach ($records as $record) {
DB::table($tableName)->insert($record);
}
}
輸入速度は、28秒に、3倍の速度は、チャンクドバージョンと比較して低下!物語の教訓
データベースに大量のデータを挿入する場合は、それをチャンクすることを忘れないでください!
Reference
この問題について(どのようにインポート速度を向上させるチャンキングを使用します.), 我々は、より多くの情報をここで見つけました https://dev.to/chengkangzai/how-i-use-chunking-to-improve-the-import-speed-20glテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol