Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP(Codeigniter)中,在Mongodb中插入少量数据后,插入速度变慢_Php_Mongodb_Codeigniter - Fatal编程技术网

在PHP(Codeigniter)中,在Mongodb中插入少量数据后,插入速度变慢

在PHP(Codeigniter)中,在Mongodb中插入少量数据后,插入速度变慢,php,mongodb,codeigniter,Php,Mongodb,Codeigniter,在Mongodb中,插入少量数据后,插入速度变慢,我使用batch_insert进行插入。在插入时,我还需要检查一些条件 插入20k数据本身需要1个多小时 在临时表格中,我有1L数据 $batchSize = 20; $documents = array(); $count = count($pending_contacts_data); $count =1; $temporary_data = array(); for($i=0;$i<$count;$i++){ $multipl

在Mongodb中,插入少量数据后,插入速度变慢,我使用batch_insert进行插入。在插入时,我还需要检查一些条件

插入20k数据本身需要1个多小时

在临时表格中,我有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();
    }
  }
}
$batchSize=20;
$documents=array();
$count=计数($pending_contacts_data);
$count=1;
$temporary_data=array();
对于($i=0;$imongo\u db->select('*')->其中(数组('contact\u id'=>(int)4,'status'=>1))->限制(10000)->获取('temporary\u table');
$temporary\u data=array\u merge($temporary\u data,$multiple\u temporary\u data);
}
$count1=计数(临时数据);
$documents=array();
对于($i=0;$i_id;
$test\u email=$this->mongo\u db->select('*')->其中(数组('encrypted\u email'=>$temporary\u data[$i]->encrypted\u email))->获取('email\u table');
如果(空($test_email)){
$document=array('email\u id'=>$temporary\u data[$i]->email,
“加密电子邮件”=>$temporary\u data[$i]->加密电子邮件,
“加密密钥”=>$temporary\u data[$i]->加密密钥,
'encrypted_iv'=>$temporary_data[$i]->encrypted_iv,
“状态”=>(int)1,
“开放式禁止状态”=>“
);
数组推送($documents,$document);
如果(($i%$batchSize)==0)){
$insert=$this->mongo\u db->batch\u insert($opend\u contacts\u email\u new1',$documents);
$update_temporary=$this->mongo_db->where_in('u id',$obj_id)->set(数组('status'=>13))->update_all('temporary_data');
$documents=array();
}
}
}

您的代码出错的地方是在第500个元素之后,每个新项都充当了单批插入。而$documents只是循环其余部分的一个元素数组。您应该使用模数运算符
%

$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();
    }
  }
}
$count=20000;
$batchSize=50;
对于($i=1;$imongo\u db->select('*')->其中(数组('email\u id'=>$temporary\u data[$i]->email\u id))->获取('email\u table');
如果(空($test_email)){
$document=array('email\u id'=>$temporary\u data[$i]->email,
“加密电子邮件”=>$temporary\u data[$i]->加密电子邮件,
“加密密钥”=>$temporary\u data[$i]->加密密钥,
'encrypted_iv'=>$temporary_data[$i]->encrypted_iv,
“状态”=>(int)1,
“抑制状态”=>“
);
数组推送($documents,$document);
如果($i%$batchSize)==0){
$insert=$this->mongo\u db->batch\u insert('email\u table',$documents);
$documents=array();
}
}
}

您的代码出错的地方是在第500个元素之后,每个新项都充当了单批插入。而$documents只是循环其余部分的一个元素数组。您应该使用模数运算符
%

$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();
    }
  }
}
$count=20000;
$batchSize=50;
对于($i=1;$imongo\u db->select('*')->其中(数组('email\u id'=>$temporary\u data[$i]->email\u id))->获取('email\u table');
如果(空($test_email)){
$document=array('email\u id'=>$temporary\u data[$i]->email,
“加密电子邮件”=>$temporary\u data[$i]->加密电子邮件,
“加密密钥”=>$temporary\u data[$i]->加密密钥,
'encrypted_iv'=>$temporary_data[$i]->encrypted_iv,
“状态”=>(int)1,
“抑制状态”=>“
);
数组推送($documents,$document);
如果($i%$batchSize)==0){
$insert=$this->mongo\u db->batch\u insert('email\u table',$documents);
$documents=array();
}
}
}


不确定缓慢的原因,但您可以尝试的是调试,但开始删除选择查询并尝试简单的批插入我们使用批插入每次插入500个文档,抱歉,我没有得到调试意味着您可以解释它。@Marceldjamanj必须删除选择查询并查看您得到了什么,然后将批大小减少到20或50N不确定缓慢的原因,但您可以尝试调试,但开始删除选择查询并尝试简单的批插入我们正在使用批插入每次插入500个文档,很抱歉,我没有得到调试方法,您可以解释一下吗。@MarceldJamanj只需删除选择查询并查看您得到了什么,然后将批大小减少到20或50 Hi,我尝试了d插入借助于上述方法,我将批量大小设置为20,插入很好,但我有一个问题,我正在尝试插入1L数据,每次拆分10K,第一个10K文档插入需要2分钟,接下来的10K需要5分钟,接下来的10K需要8分钟,我想知道延迟的原因(我使用的是mongodb)@Marcel DjamanAs我在你的评论中说,尝试使用select语句进行简单插入,看看完成任务需要多长时间。完整代码可能会从其他地方来缓慢。你在哪里定义了vars
$temporary\u data
我已经添加了完整的代码,请查看@Marcel Djamanok尝试对更新sta进行评论tement行。检查时间。tookHi,我尝试使用上述方法插入,我将批量大小设置为20,插入很好,但我有一个问题,我尝试插入1L数据,每次拆分10K,第一个10K文档插入需要2分钟,接下来的10K需要5分钟,接下来的10K需要8分钟,我想知道插入的原因他延迟(我正在使用mongodb)@Marcel DjamanAs我在你的评论中说,尝试使用select语句进行简单插入,看看完成任务需要多长时间。完整代码可能会从其他地方来缓慢。你在哪里定义了vars
$temporary\u data
我已经添加了完整的代码,请查看@Marcel Djamanok尝试对更新sta进行评论电话线,还有检查时间