Импорт PHP в .csv (44k записей) в базу данных MySQL завершается с ошибкой прокси - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь импортировать огромный файл .csv в базу данных.Это база данных Drupal, я импортирую продукты в таблицы node, type_type_ и uc_products.Но это не так актуально, так как из-за оптимизации производительности я прекратил использовать функции Drupal node_load и / или node_save и вставляю / обновляю записи напрямую с помощью команд SQL.

Сценарий:

  1. Считать весь файл csv с локального сервера (около 40 МБ) в переменную (чтобы предотвратить доступ к файлу для каждой записи)
  2. Разобрать его в массив для каждой строки
  3. Разобрать каждую строку вполя

  4. Проверьте, существует ли запись в базе данных (1 выбор SQL, сравните конкретное поле)

  5. Если существует, обновите ее (1 обновление SQL)
  6. Если не существует, вставьте его (3 вставки, 1 обновление)

    6.1.Если запись имеет код изображения и он отличается от кода в базе данных, загрузите (сверните) новый файл изображения с внешнего сервера и сохраните его на локальном сервере.

  7. 1 дополнительная задержкавставить в таблицу журнала

При запуске этого скрипта я получил 502 Ошибка прокси (причина: ошибка чтения с удаленного сервера) после прибл.10k импортированных записей и страница перестает загружаться.Однако импорт продолжается (новые записи все еще добавляются в таблицы).Это останавливается после 20k-26k (пробовал несколько раз) записей.

Два вопроса: что это за ошибка прокси и почему я ее получаю?Как оптимизировать мой сценарий еще больше?Есть ли другой, обычный способ импортировать огромное количество данных в MySQL?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 11 января 2012

Это звучит как прокси-сервер между вами и кодом php (очень вероятно, что обратный прокси-сервер на сервере, если это ваша установка) разочаровывается в ожидании ответа от вашего скрипта.

Хотя вы, вероятно, можете настроить эти таймауты, лично я попытался бы отделить очень длинные действия, подобные этим, от жизненного цикла http. Не php-разработчик, поэтому не знаю, каковы общие подходы фо.

0 голосов
/ 11 января 2012

Я думаю, что у вас есть ограничение max_request_body_size для вашего прокси-сервера Squid (или чего-то еще).Вам следует связаться с администратором прокси-сервера, чтобы разрешить большее тело запроса POST, или разделить на меньшие части CSV и повторить шаг для каждого.

Или, возможно, вы можете проверить этот пост: https://serverfault.com/questions/185894/proxy-error-502-reason-error-reading-from-remote-server-with-apache-2-2-3-de

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