Я должен заполнить и обновить одну из моих таблиц базы данных MySql, используя сложный и дорогой запрос, основанный на выборе из данных другой таблицы. Эта таблица не должна быть всегда полностью обновлена, когда я делаю запрос к ней, но я хотел бы иметь циклическое обновление каждые 5 минут.
Это автоматическое обновление должно быть бесконечным, и я должен быть уверен, что оно никогда не останавливается.
После некоторых исследований я нашел какое-то решение, но я не знаю, какое лучше для безопасности и производительности.
Одна из них может быть моей целью:
Я думаю, что первое решение может быть дорогостоящим, так как запрос сложный и может быть много запросов каждую секунду, но результат всегда обновляется. У меня нет опыта работы с Cron Job, поэтому я не знаю, может ли это быть хорошей идеей или нет. Что касается третьего решения, у меня все еще нет привилегий базы данных для запуска событий, но я хотел бы знать, может ли это быть правильным решением.
Все другие решения приветствуются, спасибо.
Не используйте cron. Подумайте, что произойдет, если один экземпляр превысит 5 минут, а следующий запустится. В конце концов у вас будут сотни копий, спотыкаясь друг о друга.
Вместо этого сделайте обновление в цикле. (Хорошо, у вас может быть задание cron для выполнения «keep-alive» задачи перезапуска запроса, если он умирает.)
Работа будет
CREATE TABLE new ...
INSERT INTO new SELECT complex-stuff...
RENAME TABLE real TO old, new TO real;
DROP TABLE old;
loop.
Я бы выбрал Cron Job.
cron -u apache -e
).*/5 * * * * php /path/to/script.php
).У меня была работа cron под корень и это работало просто отлично. Моя проблема была в том, что у проекта был частный механизм каротажа что каждый файл журнала будет создан апаш пользователь. Запустив его из корень, иногда файл будет создан корень и после этого сценарии выполняются апаш не сможет APPEND в журнал.
У меня также был скрипт электронной почты, который запускался раз в 2 минуты и который зависал на 1 час. Оказывается, из-за ошибки в приложении в базу данных был вставлен неверный адрес электронной почты (somethingwithoutatsign.com), из-за чего библиотека PHPMailer выдает ошибки. После этого я добавил ловить блок, который будет отправлять мне электронное письмо всякий раз, когда возникнет исключение. Теперь, если скрипт перестает работать из-за плохого исполнения, я сразу узнаю.