2017-08-21 66 views
1

在Mongodb插入少量數據後插入變慢,我使用batch_insert插入。插入時,我還需要檢查一些條件。在PHP(Codeigniter)中插入Mongodb插入少量數據後插入緩慢

要插入20k數據本身需要1個多小時。

在temporary_table我有1L的數據

$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(); 
for ($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(); 
    } 
    } 
} 
+0

不知道時差的原因,但什麼ü可以嘗試進行調試,但開始刪除的選擇查詢,並嘗試簡單的批處理插入 –

+0

我們正在使用batch_insert插入每次500個文件, @ MarcelDjaman – jhansi

+0

只要刪除選擇查詢,看看你得到 –

回答

0

出了什麼問題與您的代碼是第500個元素每個新項目擔任單批後插入。 $文檔只是其餘循環的一個元素的數組。 ü應該已經使用了模運算%

$count = 20000; 
$batchSize = 50; 

for ($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(); 
    } 
    } 
} 
+0

嗨,我嘗試插入與上述方法的幫助我批量大小爲20, 它插入正常,但我有一個問題 我試圖插入1L數據與10K爲每個拆分,爲第一個10K文件,它花了2米插入,爲接下來的10K花了5分鐘,接下來的10K花了8分鐘,我想知道延遲的原因(我正在使用mongodb)@Marcel Djaman – jhansi

+0

正如我在評論中所說的那樣,嘗試一個簡單的插入與選擇語句,看看需要多長時間來完成任務 –

+0

粘貼年代完整的代碼可能來自其他地方。你在哪裏定義變量'$ temporary_data' –