another_dream
@another_dream
Backend-разработчик, Laravel/ZF2/Yii2

Как менее ресурсозатратно решить задачу?

Имеется постоянно пополняющаяся таблица подписчиков (на данный момент более 8000 записей).

Каждые 5 минут выполняется CRON-задача и запускается процесс обработки записей за последний месяц (обычно не более 1000 записей).

Процесс обработки включает в себя обращение к API стороннего сервиса для получения статуса подписчика (подписан или ожидается подтверждение) и, при наличии статуса "активен" - статус в моей таблице тоже обновляется отдельным запросом. Так же, при отсутствии юзера в списке сервиса - повторное добавление через запрос к API этого сервиса.

Вопрос - как оптимизировать данный процесс?
Повторю данные:
~ 1000 записей из БД (один запрос на получение).
Цикл (в моем случае foreach) для этого массива.
Каждая итерация цикла - обращение к стороннему API, а также обновление статуса подписчика в моей базе (1 запрос), если он "активен" или повторный запрос к API сервиса.

PHP 5.6, CodeIgniter 2, MySQL.
  • Вопрос задан
  • 295 просмотров
Решения вопроса 2
riky
@riky
Laravel
никак. узкое место - обращение к сервису.

разве что можете оптимизировать сохранение в базу. массовые update в mysql делаются
insert into ... on duplicate key update ...

но не думаю что это что-то ускорит. 99% времени ваш скрипт отдыхает дожидаясь ответа сервиса.
чтобы убедится в этом - сделайте профилирование. хотя бы через microtime().
Ответ написан
@egormmm
Борітеся — поборете!
Библиотека Requests позволяет делать параллельные запросы. Делайте по 10 параллельных запросов к API. Пока они обрабатываются - выполняются следующие 10.
С количеством запросов можно поэкспериментировать, зависит от мощностей хостера/vps.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
e_svirsky
@e_svirsky
Web Developer
А к апи нельзя сделать запрос указав 50 записей, 100? Если можно сделать такой Bulk Request - то выход только один - делать пачкой запросы и также пачкой их обрабатывать. Статусы ставить на отправление и что обработан. Запрос может грохнуться в любой момент. Не забудьте при реализации.
Ответ написан
Ваш ответ на вопрос

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

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