@generate
...

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы