Высоконагруженное задание в cron

231
14 августа 2017, 11:32

Доброго времени суток. Стоит задача реализовать на сайте функцию, которая раз в сутки будет делать необходимую проверку на сайте. Проблема в том что такая проверка занимает большое кол-во времени, так как для ее реализации необходимо выполнять обращение к другим ресурсам и работать (по приблизительным подсчетам) с 100 тыс. записей из базы данных.

Язык php. Фреймворк Yii2. База данных MySQL

Суть вопроса в следующем, какие есть практики для подобных проблем, когда не хватает времени на выполнения скрипта и он заканчивает свою работу? По поим подсчетам на полное выполнение скрипта уйдет около 2х часов. Как лучше это реализовывать?

Заранее благодарен за советы и ответы!

Answer 1

В базу данных добавляете индексное поле, например, tested типа int(1) со значением по умолчанию 0. Когда скрипт проверил запись, он ставит ему значение 1. Поскольку индекс короткий, это не вызовет замедление записи в базу. Запускайте скрипт не раз в сутки, а раз в 10 минут, пусть он лочит себя функцией flock для предотвращения повторного запуска, выбирает 100 непроверенных записей и обрабатывает их. Не успел - не беда, при следующем запуске обработает. По поводу обращения к другим ресурсам - здесь время выполнения этого под Linux не считается, под Windows считается, по крайней мере для SAPI модуля Apache. Вот как под CLI, не уверен.

По поводу запуска раз в сутки, если скрипт будет создавать высокую нагрузку на протяжении значительного времени, за это хостер может и по попе надавать, если у вас не VDS.

READ ALSO
составление regexp php

составление regexp php

как можно при помощи регулярного выражения заменить //такой текст// на <em>такой текст</em>? при этом если вдруг попадется ссылка,а мы знаем...

235
Область хранения сессии и куки

Область хранения сессии и куки

Когда создаётся куки setcookie("Cookie", "123"); Значение "123" хранится в браузере пользователя и занимает несколько байтов памяти компьютераЕсли же создаётся...

190