У меня проблема с моей функцией массовой загрузки. Я пытаюсь загрузить 16000 записей в файл CSV. Ниже мой код, я использую фреймворк yii. но проблема в том, что я получаю php максимальное время выполнения.
Это пример записи
Gella,Rafalla,N/A,N/A,0 Pala da vences,13140,MIRAMAS,1,1926-04-25,N/A,LE TRNT BAT I 13,N/A,CEJEAN GINO,6,N/A,N/A,N/A,N/A
и есть 16 000 записей как таковых.
if (($handle = fopen($file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// save the record after few validation.
}
}
как вы видите, я просматриваю весь файл за один раз. Могу ли я узнать, в чем проблема, чтобы получить максимальную ошибку времени выполнения?
на данный момент, на обработку 2000 записей у меня уходит 6 минут. так что это займет у меня Примерно 48 минут для завершения загрузки этого файла сохраняя записи.
Цените любые предложения, чтобы написать это лучше.
Вот полная логика. сохранил это здесь как его слишком долго. https://3v4l.org/QZeg2
вот таблицы базы данных, которые я использую для проверки внутри цикла while.
http://sqlfiddle.com/#!9/1a579/3
Существует таблица пользователя, таблица пользовательских полей и таблица пользовательских значений. Нет данных Представления или Триггеры или Процедуры.
Причиной проблемы с производительностью является проверка и сохранение, как указано в комментариях.
Но если вы делаете одноразовый ввоз здесь и ваша проблема на самом деле не производительность, а максимальное время исполнения, Вы можете попробовать CLI.
Если у вас уже есть код в yii, вы можете сделать из него консольное приложение yii:
Yii 1.1:
http://www.yiiframework.com/doc/guide/1.1/en/topics.console
Yii 2:
http://www.yiiframework.com/doc-2.0/guide-tutorial-console.html
Других решений пока нет …