@generate
...

При работе одного скрипта ложиться весь сайт, как сделать правильно?

Есть скрипт он парсит большой json оттуда берет картинки загружает на сервер, остальные поля добавляет в базу. В одном json больше ста объектов, когда запускаю скрипт он долго обрабатывается потому что там много информации. Но при этом весь сайт перестает работать. Как решить эту проблему ? по одному не вариант.
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 4
dima9595
@dima9595
Junior PHP
По крону; в другом потоке; используя очереди...
Ответ написан
Комментировать
@mletov
Вводных явно недостаточно.
Непонятно где узкое место. На уровне базы? Или серверу оперативки не хватает? Если второе, то может характеристики сервака увеличить?
Тут можно предложить только экспериментальные решения:

- Перед запуском скрипта создавать копию базы, импортировать в нее, а потом подменять копию базы обновленной копией.

- Разбивать прилетевший json на несколько json меньшего размера, скажем, если там 100 объектов, то, к примеру, на 10 файлов по 10 объектов и загружать их с некоторым временным промежутком.
Ответ написан
@rPman
что значит перестает работать? какую ошибку пишет клиенту?

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

Однозначно, любой сервер можно 'убить' плохо написанным кодом, ищите проблемы.
Ответ написан
Adamos
@Adamos
"Берет картинки" - это, видимо, url, и за каждым он тянется наружу, а весь остальной мир пусть подождет?
Стоит парсить файл, писать в базу данные (не по одной строчке, а транзакциями), а в очередь - урлы на скачку.
Потом фоновой задачей по крону потихоньку скачивать картинки, пока не закончится очередь.
А то сильно кривой скрипт действительно может весь сайт раком поставить, залочив на себя нужную всем таблицу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы