laravel實現100w大量資料插入資料庫

huangxu發表於2021-11-11

laravel實現100w大量資料插入資料庫

在使用laravel eloquent進行資料庫操作的時候驚訝的發現這貨居然不支援批量新增,看到網上很多人在迴圈裡進行資料庫插入操作來實現批量新增,我想說這樣做是很損失效能滴!好在框架的DB門面裡的insert方法可以進行批量插入。

$data= [
  ['name'=>'111'],
  ['name'=>'222'],
];
DB::table('xxx')->insert($data);

但是我的資料有點多,100w條資料需要匯入資料庫,一條條插入,需要好久的時間。原生sql可以實現拼接語句實現批量執行達到快速匯入的效果。在laravel框架中貌似要自己實現,查詢發現集合的chunk方法實現資料分塊處理,達到組裝批量插入效果。程式碼如下:

 set_time_limit(0);
 try {
    //上傳檔案位置,這裡預設是在storage中,如有修改請對應替換
    $file = storage_path('/app/public/' . $input['file']);
    $domain = [];
    foreach($this->readTxt($file) as $key=>$line) {
        $domain[$key] = $line;
    }
    //陣列分塊處理
    $chunck = collect($domain);
    $chunks = $chunck->chunk(1000);
    $chunks->all();
    foreach ($chunks as $key=>$val){
        $arr = [];
        foreach ($val as $k =>$value){
            $arr[$k]['domain'] = $value;
            $arr[$k]['created_at'] = date('Y-m-d H:i:s');
        }
        DB::table('domain')->insert($arr);
   }
 }catch (\Exception $e) {
    return $this->response()->error($e->getMessage());
 }
本作品採用《CC 協議》,轉載必須註明作者和本文連結
知者不惑,仁者不憂,勇者不懼。

相關文章