Как оптимизировать cron и PHP скрипт для большого обновления данных и нескольких вызовов API - PullRequest
0 голосов
/ 16 апреля 2019

Прямо сейчас у меня есть php-скрипт, который выбирает ~ 50000 записей из базы данных и вызывает api для каждой записи и на основе статуса обновления записей ответа api в базе данных.

Я думал оиспользуя 10 php-файлов с 10 кронами и делением 50000 записей на 10, каждый скрипт должен иметь дело только с 5000 записями.но по мере увеличения записей мне нужно создавать больше крон.

правильно ли я делаю или есть какой-то другой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Если у вас слишком много крон, они будут натыкаться друг на друга.И зачем использовать cron?Будете ли вы повторять эту задачу ежедневно?Вместо этого выполните одно задание, которое поделит 50000, и запустите 10 подпроцессов для выполнения этой работы.

Начните с такого количества крон, сколько у вашего ЦП ядер.Если API привязан к процессору, это может быть оптимальным.

Если API находится где-то еще, то это зависит от того, сколько времени вы потратили на ожидание возвращения результатов.

Пакетируйте вещи, если это возможно, в любой из самых медленных веток - API или выборку из базы данных.

Цели:

  • Максимальное использование вашего resources.
  • Не превышайте того, чего могут достичь ваши ресурсы.(Если бы 10 PHP насыщали процессор, было бы плохо увеличить до 100.)
  • Остерегайтесь ограничений скорости в API.(Одно место ограничивает меня до 10 в минуту, поэтому мне пришлось замедлиться, чтобы избежать ошибок из API!)
1 голос
/ 16 апреля 2019

Единственная проблема, которую я вижу из-за этого - это потенциальное время выполнения php, это можно решить с помощью set_time_limit () . Что касается объема памяти, вы можете выбрать количество записей, а затем выбрать n-й индекс, таким образом обрабатывая одну запись за раз. В качестве отказоустойчивой меры поле даты (или дата-время!) Может быть введено в таблицу для записи при последнем обновлении каждой записи. В случае ошибки процесс сможет продолжить с того места, где остановился.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...