In PHP(Codeigniter) After inserting few data in Mongodb insertion is getting slow -
in mongodb after inserting few data insertion getting slow, using batch_insert insertion. while inserting need check conditions also.
to insert 20k data takes more 1 hour.
in temporary_table having 1l data
$batchsize = 20; $documents = array(); $count = count($pending_contacts_data); $count =1; $temporary_data = array(); for($i=0;$i<$count;$i++){ $multiple_temporary_data = $this->mongo_db->select('*')->where(array('contact_id'=>(int)4,'status'=>1))->limit(10000)->get('temporary_table'); $temporary_data = array_merge($temporary_data,$multiple_temporary_data); } $count1 = count($temporary_data); $documents = array(); ($i=0; $i<$count1; $i++) { $obj_id[] = $temporary_data[$i]->_id; $test_email = $this->mongo_db->select('*')->where(array('encrypted_email'=>$temporary_data[$i]->encrypted_email))->get('email_table'); if(empty($test_email)){ $document = array('email_id'=>$temporary_data[$i]->email, 'encrypted_email'=>$temporary_data[$i]->encrypted_email, 'encrypted_key'=>$temporary_data[$i]->encrypted_key, 'encrypted_iv'=>$temporary_data[$i]->encrypted_iv, 'status'=>(int)1, 'opend_supression_status'=>'' ); array_push($documents, $document); if ((($i % $batchsize) === 0)) { $insert = $this->mongo_db->batch_insert('opend_contacts_email_new1',$documents); $update_temporary =$this->mongo_db->where_in('_id',$obj_id)->set(array('status'=>13))->update_all('temporary_data'); $documents = array(); } } }
what went wrong code after 500th element each new item acted single batch insert. , $documents array of 1 element rest of loop. u should have used modulus operator %
$count = 20000; $batchsize = 50; ($i=1; $i<=$count; ++$i){ $test_email = $this->mongo_db->select('*')->where(array('email_id'=>$temporary_data[$i]->email_id))->get('email_table'); if(empty($test_email)){ $document = array('email_id'=>$temporary_data[$i]->email, 'encrypted_email'=>$temporary_data[$i]->encrypted_email, 'encrypted_key'=>$temporary_data[$i]->encrypted_key, 'encrypted_iv'=>$temporary_data[$i]->encrypted_iv, 'status'=>(int)1, 'suppression_status'=>'' ); array_push($documents, $document); if (($i % $batchsize) === 0) { $insert = $this->mongo_db->batch_insert('email_table',$documents); $documents = array(); } } }
Comments
Post a Comment