Имеется постоянно пополняющаяся таблица подписчиков (на данный момент более 8000 записей).
Каждые 5 минут выполняется CRON-задача и запускается процесс обработки записей за последний месяц (обычно не более 1000 записей).
Процесс обработки включает в себя обращение к API стороннего сервиса для получения статуса подписчика (подписан или ожидается подтверждение) и, при наличии статуса "активен" - статус в моей таблице тоже обновляется отдельным запросом. Так же, при отсутствии юзера в списке сервиса - повторное добавление через запрос к API этого сервиса.
Вопрос - как оптимизировать данный процесс?
Повторю данные:
~ 1000 записей из БД (один запрос на получение). Цикл (в моем случае foreach) для этого массива. Каждая итерация цикла - обращение к стороннему API, а также обновление статуса подписчика в моей базе (1 запрос), если он "активен" или повторный запрос к API сервиса.
разве что можете оптимизировать сохранение в базу. массовые update в mysql делаются
insert into ... on duplicate key update ...
но не думаю что это что-то ускорит. 99% времени ваш скрипт отдыхает дожидаясь ответа сервиса.
чтобы убедится в этом - сделайте профилирование. хотя бы через microtime().
забыл сказать - можно же еще использовать curl_multi тогда можете делать проверки сразу штук по 20-50. надо тестить сколько их сервис выдежрит, в идеале с ними поговорить - спросить. иначе если вы начнете их подвешивать - могут забанить вовсе.
Библиотека Requests позволяет делать параллельные запросы. Делайте по 10 параллельных запросов к API. Пока они обрабатываются - выполняются следующие 10.
С количеством запросов можно поэкспериментировать, зависит от мощностей хостера/vps.
А к апи нельзя сделать запрос указав 50 записей, 100? Если можно сделать такой Bulk Request - то выход только один - делать пачкой запросы и также пачкой их обрабатывать. Статусы ставить на отправление и что обработан. Запрос может грохнуться в любой момент. Не забудьте при реализации.