約500万の非常に大量のレコードをインポートする機能があります。
インポートプロセスでも、関連するテーブルのエントリを同時に作成する必要があります。
新しいエントリの束挿入クエリを作成し、すべてのクエリを処理して、チャンクでプロセスを作成する必要があります。
プロセスをスピードアップする他の方法は何ですか?
(ララキャストからコピー)これもおそらく役立つでしょう:
DB::connection()->disableQueryLog();
「デフォルトでは、Laravelは、現在のリクエストに対して実行されたすべてのクエリのログをメモリに保持します。ただし、多数の行を挿入する場合など、これにより、過剰なメモリを使用するアプリケーション。」
したがって、すべてのコメントを個別に確認する必要がない人のために要約します。
すでに指摘した点に加えて、次のことを検討できます。
使用する:
チャンクでデータを処理するLaravelキューを使用する
使用 https://docs.laravel-Excel.com/3.1/imports/ ユーザーモデルバインディングの例
namespace App\Imports;
use App\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
class UsersImport implements ToModel
{
use Importable;
public function model(array $row)
{
return new User([
'name' => $row[0],
'email' => $row[1],
'password' => Hash::make($row[2]),
]);
}
}
コントローラ内
(new UsersImport)->import('users.xlsx', 'local', \Maatwebsite\Excel\Excel::XLSX);