Доброго времени суток. Стоит задача реализовать на сайте функцию, которая раз в сутки будет делать необходимую проверку на сайте. Проблема в том что такая проверка занимает большое кол-во времени, так как для ее реализации необходимо выполнять обращение к другим ресурсам и работать (по приблизительным подсчетам) с 100 тыс. записей из базы данных.
Язык php. Фреймворк Yii2. База данных MySQL
Суть вопроса в следующем, какие есть практики для подобных проблем, когда не хватает времени на выполнения скрипта и он заканчивает свою работу? По поим подсчетам на полное выполнение скрипта уйдет около 2х часов. Как лучше это реализовывать?
Заранее благодарен за советы и ответы!
В базу данных добавляете индексное поле, например, tested типа int(1) со значением по умолчанию 0. Когда скрипт проверил запись, он ставит ему значение 1. Поскольку индекс короткий, это не вызовет замедление записи в базу. Запускайте скрипт не раз в сутки, а раз в 10 минут, пусть он лочит себя функцией flock для предотвращения повторного запуска, выбирает 100 непроверенных записей и обрабатывает их. Не успел - не беда, при следующем запуске обработает. По поводу обращения к другим ресурсам - здесь время выполнения этого под Linux не считается, под Windows считается, по крайней мере для SAPI модуля Apache. Вот как под CLI, не уверен.
По поводу запуска раз в сутки, если скрипт будет создавать высокую нагрузку на протяжении значительного времени, за это хостер может и по попе надавать, если у вас не VDS.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей