【问题标题】:How to increase insertion speed in cake php?如何提高蛋糕 php 中的插入速度?
【发布时间】:2018-09-22 00:11:11
【问题描述】:

我正在尝试读取电子邮件的文本文件,并尝试将这些电子邮件插入到具有一些修改值的数据库表中。使用 cake php 和 mysql 数据库。 这是我的代码:

控制器文件:

public function addLead()
{
    //$this->layout=false;
    //$this->autoRender=false;
    set_time_limit(100000);
    $this->loadModel('Client');
    $user=$this->Session->read("Auth.User");
    if ($this->request->is('post')) {
        $count = 0;
        $upFile = $this->request->data['Lead']['filename'];
        $file_ext = @strtolower(end(explode('.', $upFile['name'])));
        $expensions = array("txt");
        $result = "";
        if (in_array($file_ext, $expensions) === false) {
            $errors[] = "extension not allowed, please choose a txt file.";
        }

        if (empty($errors) == true) {
            $myfile = fopen($upFile['tmp_name'], "r") or die("Unable to open file!");
            while (!feof($myfile)) {
                $lead = fgets($myfile, 4096);
                $lead = preg_replace('/\s+/', '', $lead);
                $pieces = explode("@", $lead);
                $clientMailBox = $pieces[0];
                $clientMailHost = $pieces[1];
                $clientInfo = $this->Client->addClient($user['id'], $clientMailBox, $clientMailBox, $clientMailHost,$lead, "","","","");

            }
            fclose($myfile);
        } else {

        }
        //$this->set('result', $elinkDec);
        $this->Session->setFlash(__("<div class=\"alert alert-danger flash animated\">$count Leads Added<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button></div>"));


    }

}

模型功能:

 public function addClient($userId=null, $clientName = null, $clientMailBox = null, $clientMailHost = null,$clientEmail=null, $emailFrom = null,$msgId=null,$msgSubject=null,$pho=null)
{
    $getClient = $this->find('first',array('conditions'=>array('user_id'=>$userId,'email'=>$clientEmail,'status'=>1)));
    if (empty($getClient)) {
        $this->set(array('id' => null,'user_id'=>$userId, 'email_from' => $emailFrom,'phone'=>$pho, 'name' => $clientName, 'mailbox' => $clientMailBox, 'host' => $clientMailHost, 'email' => $clientEmail,'email_from'=>$emailFrom,'message_id'=>$msgId,'subject'=>$msgSubject,'response'=>1, 'status' => 1,));
        $saveClient = $this->save();
        return $saveClient;
    } else {
        if($getClient['Client']['response_status']==1){
            if($pho != '0') $this->set(array('id' => $getClient['Client']['id'],'phone'=>$pho,'response'=>$getClient['Client']['response']+1, 'message_id' => $msgId,'subject' => $msgSubject,  'response_status' => 0,));
            else $this->set(array('id' => $getClient['Client']['id'],'response'=>$getClient['Client']['response']+1, 'message_id' => $msgId,'subject' => $msgSubject,  'response_status' => 0,));
            $saveClient = $this->save();
            return $saveClient;
        }
    }
}

但它工作得太慢了....我正在尝试插入 100k 封电子邮件,执行时间超过 30 分钟。

【问题讨论】:

    标签: mysql cakephp-2.0


    【解决方案1】:

    也许 100k find(first, ... ) 正在减慢速度。 您是否尝试将递归属性设置为 -1 ? (例如 $this->Client->recursive = -1; ) 或尝试将 find(first , conditions) 更改为 hasAny(conditions) (hasAny 使用 find('count' ) 使用您在 find 中设置的相同条件,但同时设置 recurisve 属性。

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多