Задать вопрос
@W2nn3ss

Как оптимизировать запросы к api?

У меня есть сайт на битрикс, и есть стороннее API, с которого я получаю данные. Данные приходят таким образом: можно получить либо сразу все данные (юзеры, категории, услуги), либо получить сначала всех юзеров, записать их в инфоблок, а потом используя уникальный id юзера сделать ещё раз запрос и получить конкретно для каждого юзера категории и услуги, которые относятся к нему и записать их уже со связью. Мне необходимо реализовать второй вариант получения данных и записать услуги и категории вместе со связью с юзерами. Но я столкнулся с проблемой реализации получения данных и их записи. Мой алгоритм выглядит так: есть N пользователей, которых я получаю по API, записываю их в инфоблок, в процессе записывая их уникальный id в массив, и получаю массив уникальных id пользователей, дальше делаю foreach, в котором прохожусь по этим id, каждый добавляю в массив параметров для запроса и делаю запрос.
Логика была такая: я делаю N запросов с каждым отдельным id (api не поддерживает работу с массивом запросов), каждый полученный результат обрабатываю и записываю в БД. Но мой сайт падает с таким количеством запросов, а других вариантов я придумать не могу. Может кто-нибудь посоветовать, как можно реализовать такой алгоритм получения и записи данных?
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
Самое простое, агент с пошаговой обработкой.
Ответ написан
@humoured
Вы всё на свете найдёте в коробке с карандашами
Для решения проблемы с обработкой большого количества {{anything}} давно придуманы очереди. На первом этапе получаем перечень объектов для обработки, добавляем job'ы (объекты) в очередь, а дальше обрабатываем очередь при помощи worker'ов. Дополнительным плюсом такого подхода будет возможность запустить обработку job'ов (объектов) в несколько параллельных потоков, что даст выигрыш во времени обработки.
Ответ написан
Комментировать
@SidVisceos
Скрипт 1
Проверили базу с необработанными айдишниками, если пусто: Получили айдишники -> записали их в базу.

Скрипт 2
В идеале нужен отдельный скрипт который по кронтабу например каждую минуту постоянно запускается, базы берёт айдишники по одному, обрабатывает их и удаляет.
Причём нужно делать через транзакции.

Скрипт 1 тоже можно по расписанию запускать если необходимо.

Если задача не постоянная, а периодическая - можно обойтись без кронтаба, обновляя страницу ручками или накидать js скрипт в этой странице.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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