2014-02-18 60 views
1

此代碼只適用於包含大約1K記錄的csv文件。但是,如果我嘗試插入文件,比如說100K,它就會生效。 我在網上搜索,發現了很多建議,比如調整php超時執行,增加爲php分配的內存(這有點幫助),但是我需要導入大量數據文件,例如100萬條記錄。將big csv,xls數據文件插入到帶有codeigniter的Mysql中

我正在使用codeigniter。 有沒有辦法加快這個過程: 有關此功能的描述: - 第一個「INSERT INTO」插入到客戶端(admin_id)和時間創建(create_time)的table =「client」中。

第二個「INSERT INTO」將attribute_id,client_id和value插入到table =「client_attribute_value」中。

function Add_multiple_users($values) 
{ 
    $err = ''; 
    foreach($values as $rows) 
    { 
     $clientQuery = 'INSERT INTO 
          client 
          (
           admin_id, 
           create_time 
          ) 
          VALUES 
          (
           "'.$this -> session -> userdata('user_id').'", 
           "'.date('Y-m-d H:i:s').'" 
          )'; 
     $clientResult = @$this -> db -> query($clientQuery); 
     if($clientResult) 
     { 
      $client_id = $this -> db -> insert_id(); 
      foreach($rows as $row) 
      { 
       $attrQuery = 'INSERT INTO 
            client_attribute_value 
            (
             attribute_id, 
             client_id, 
             value 
            ) 
            VALUES 
            (
             "'.$row['attribute_id'].'", 
             "'.$client_id.'", 
             "'.addslashes(trim($row['value'])).'" 
            )'; 
       $attrResult = @$this -> db -> query($attrQuery); 
       if(!$attrResult) 
       { 
        $err .= '<p class="box error">Could not add attribute for<br> 
          Attribute ID: '.$row['attribute_id'].'<br> 
          Client ID: '.$client_id.'<br> 
          Attribute Value: '.trim($row['value']).'</p>'; 
       } 
      } 
     } 
    } 
    return $err; 
} 

回答

0

我已經處理過這個。 How to parse Large CSV file without timing out?

上傳文件本身或找到文件的位置並使用cron作業來處理它。沒有超時。我個人的做法是設置一個帶有數據庫表的隊列系統,該表指向該文件並具有狀態標誌。一旦cron作業拿起該項目,它將開始插入CSV文件(當天結束時它的大小約爲300mb)。一旦cron作業完成插入數據庫,它會刪除csv文件,更新該排隊項目的狀態,併發電子郵件給我說已完成。

+0

是否可以在此函數中加入「LOAD DATA INFILE」? – chap

相關問題