Как быстро загрузить большой CSV-файл в MySQL в Codeigniter? - PullRequest
0 голосов
/ 07 июня 2019

Я использую codeigniter Framework.Я хочу быстро загрузить файл Larg CSV в базу данных MySQL.Файл содержит 87000 строк.Я добавил для загрузки данных, но он загружается более 1 часа.Мне нужно оптимизировать это время. Пожалуйста, предложите мне.

if(move_uploaded_file($_FILES['file_content']['tmp_name'],$path.$actual_file_name))
            {
if (($handle = fopen($path.$actual_file_name, "r")) !== FALSE) 
    {               
    while (($data = fgetcsv($handle,100000, ",")) !== FALSE) 
    {
$insert_batch=array(    
'unique_transactionid' => mb_check_encoding($data[0], 'UTF-8') ? $data[0] : utf8_encode($data[0]),
'data-year' => mb_check_encoding($data[2], 'UTF-8') ? $data[2] : utf8_encode($data[2]),
'supplier_group' => mb_check_encoding($data[4], 'UTF-8') ? $data[4] : utf8_encode($data[4]),
);
this->db->insert('table name', $insert_batch);
}
}
}

Мне нужно, чтобы данные загружались быстро.В настоящее время наш сервер max_excecution время составляет 10 минут.Это превышает 10 минут, и страница не перенаправлена ​​на мою страницу, и, наконец, я получил страницу не найдена ошибка.Пожалуйста, помогите мне быстро загрузить.

1 Ответ

0 голосов
/ 07 июня 2019

выньте функцию insert() из цикла while и используйте вместо нее batch_insert(). Сейчас вы создаете массив и вставку для каждой строки.

$i=0;
while (($data = fgetcsv($handle,100000, ",")) !== FALSE) 
{
  $insert_batch[$i]=array(    
    'unique_transactionid' => mb_check_encoding($data[0], 'UTF-8') ? $data[0] : utf8_encode($data[0]),
    'data-year' => mb_check_encoding($data[2], 'UTF-8') ? $data[2] : utf8_encode($data[2]),
    'supplier_group' => mb_check_encoding($data[4], 'UTF-8') ? $data[4] : utf8_encode($data[4]),
  );
  $i++;
}
$this->db->insert_batch('table_name', $insert_batch); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...