I have a performance issue in doing bulk insert to DB using Laravel 5.2. I get the data from server1, format the data and do a bulk insert into server2. Initially, the performance seems to be good, but as the records increase the insert takes time.
How to increase the performance?
My Controller is:
public function oceanupload(){
$this->getRejectedR11($code,$countryName,$type);
}
function getRejectedR11($code,$countryName,$type){
$count = RejectedR11::count();
$chunksize = 30000;
$chunks = floor($count / $chunksize);
for ($chunk = 0; $chunk <= $chunks; $chunk++) {
$offset = $chunk * $chunksize;
$data = RejectedR11::skip($offset)->take($chunksize)->get();
if(!empty($data)){
OceanUpload::insertRejected($data,$code,$type);
//RejectedR11::deleteRejectedR11($data);
}
}
}
RejectedR11 Model:
<?php
namespace App\Models\Soa\Ocean;
use Illuminate\Database\Eloquent\Model;
use DB;
class RejectedR11 extends Model{
protected $table= "R11RejectedData";
public $primaryKey = "R11RejectedDataID";
public $connection = "ocean";
public static function deleteRejectedR11($data){
for($i=0;$i<count($data);$i++){
DB::connection('ocean')->statement('DELETE FROM R11RejectedData WHERE R11RejectedDataID = '.$data[$i]['R11RejectedDataID']);
}
}
}
?>
OceanUpload Model:
<?php
namespace App\Models\SOA;
use Illuminate\Database\Eloquent\Model;
use Session;
use DB;
class OceanUpload extends Model{
public $table = 'fanda_soa_ocean';
public $primaryid = 'ocean_id';
public $timestamps = false;
protected $connection = 'main_db';
public static function insertRejected($data,$code,$type){
$res = array();
if(!empty($data)){
for($i=0;$i<count($data);$i++){
$invodate = explode(" ",str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['InvoiceDate']) ))));
$duedate = isset($data[$i]['DueDate'])?explode(" ",str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['DueDate']) )))):"-";
$res[] = array(
'ocean_countrycode'=>$code,
'ocean_countrystruct'=>$type,
'ocean_status'=>"Rejected",
'ocean_vendorname'=>isset($data[$i]['VendorName'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['VendorName']) ))):"-",
'ocean_vendornum'=>isset($data[$i]['VendorNum'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['VendorNum']) ))):"-",
'ocean_vendorsite'=>isset($data[$i]['VendorSiteCode'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['VendorSiteCode']) ))):"-",
'ocean_currency'=>isset($data[$i]['InvoiceCurrencyCode'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['InvoiceCurrencyCode']) ))):"-",
'ocean_invoicenum'=>isset($data[$i]['InvoiceNum'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['InvoiceNum']) ))):"-",
'ocean_invoiceamt'=>isset($data[$i]['InvoiceAmountSUM'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['InvoiceAmountSUM']) ))):"-",
'ocean_invodate'=>date('Y-m-d',strtotime($invodate[0])),
'ocean_termsdate'=>isset($data[$i]['TermsDate'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['TermsDate']) ))):"-",
'ocean_approvstatus'=>isset($data[$i]['ApprovalStatus'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['ApprovalStatus']) ))):"-",
'ocean_approvname'=>isset($data[$i]['ApproverName'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['ApproverName']) ))):"-",
'ocean_approvdate'=>isset($data[$i]['ApprovalActionDate'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['ApprovalActionDate']) ))):"-",
'ocean_duedate'=>($duedate <> "-")?date('Y-m-d',strtotime($duedate[0])):"-",
'ocean_invocurrcode'=>isset($data[$i]['InvoiceCurrencyCode'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['InvoiceCurrencyCode']) ))):"-",
'ocean_imagerefnum'=>isset($data[$i]['ImagingRefNumber'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['ImagingRefNumber']) ))):"-",
'ocean_reasonlabel'=>isset($data[$i]['ReasonLabel'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['ReasonLabel']) ))):"-",
'ocean_reasoncode'=>isset($data[$i]['ReasonCode'])?str_replace('?','',trim(preg_replace("/[^a-zA-Z0-9_.\s()+-@:\"\'\\\\\&-]+/", "",preg_replace('/_x000D_/', '', $data[$i]['ReasonCode']) ))):"-",
'ocean_recent'=>1,
'ocean_uploadby'=>Session::get('login_id'),
'ocean_uploadon'=>date('Y-m-d'),
);
foreach($res as $val):
DB::statement('UPDATE '.'fanda.fanda_soa_ocean'.' SET ocean_recent = 0 where ocean_countrycode = "'.$val['ocean_countrycode'].'" and ocean_vendorname = "'.$val['ocean_vendorname'].'" and ocean_invoicenum = "'.$val['ocean_invoicenum'].'"');
DB::statement('INSERT IGNORE INTO '.'fanda.fanda_soa_ocean'.' ('.implode(',',array_keys($val)).') values (?'.str_repeat(',?',count($val) - 1).') ON DUPLICATE KEY UPDATE ocean_recent = 1',array_values($val));
endforeach;
}
}
}
}
?>