Вставка больших данных из CSV в MySQL дает HTTP ERROR 500, используя Laravel - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь вставить 400k записей из csv в mysql, используя построитель запросов laravel, но выдает ошибку http 500 после вставки почти 150k записей на сервер, но на localhost работает нормально, как и ожидалось

я уже увеличиваю max_execution_time до99999999 .. использовал try catch, но ничего не показывает

if (($handle = fopen($path, "r")) !== FALSE) {
    fgetcsv($handle);
    try {
        while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
            $num  = count($data);
            $row++;

                $insert = [
                'col1' => $data[0],
                'col2' => $data[1],
                'col3' => $data[2],
                'col4' => $data[3],
            ];
            $insertData = DB::table('mytable')->insert($insert);
        }
        fclose($handle);
    } catch(\PDOException $e) { 
        if($e->getCode() != 23000){ 
                throw new \PDOException($e->getMessage(), $e->getCode(), $e); 
        }
    }
}

1 Ответ

0 голосов
/ 18 апреля 2019

Выполнение запроса к базе данных очень медленно для каждой вставки. Намного лучше сделать один запрос на вставку для всех строк. Переместить эту строку за пределы цикла while

$insertData = DB::table('mytable')->insert($insert);

И измените способ сбора данных

от

$insert = [...];

к этому

$insert[] = [...];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...