Обновлять таблицу базы данных циклически каждые 5 минут

Я должен заполнить и обновить одну из моих таблиц базы данных MySql, используя сложный и дорогой запрос, основанный на выборе из данных другой таблицы. Эта таблица не должна быть всегда полностью обновлена, когда я делаю запрос к ней, но я хотел бы иметь циклическое обновление каждые 5 минут.

Это автоматическое обновление должно быть бесконечным, и я должен быть уверен, что оно никогда не останавливается.

После некоторых исследований я нашел какое-то решение, но я не знаю, какое лучше для безопасности и производительности.

Одна из них может быть моей целью:

  1. Не создавайте таблицу и каждый раз выполняйте сложный запрос из php, чтобы получить желаемый результат
  2. Создайте скрипт php, который повторяется циклически, и обновите таблицу db, возможно, используя Cron Job.
  3. Обновление таблицы с использованием события sql

Я думаю, что первое решение может быть дорогостоящим, так как запрос сложный и может быть много запросов каждую секунду, но результат всегда обновляется. У меня нет опыта работы с Cron Job, поэтому я не знаю, может ли это быть хорошей идеей или нет. Что касается третьего решения, у меня все еще нет привилегий базы данных для запуска событий, но я хотел бы знать, может ли это быть правильным решением.

Все другие решения приветствуются, спасибо.

2

Решение

Не используйте 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.
0

Другие решения

Я бы выбрал Cron Job.

  1. Он не засоряет какой-либо запрос, так как выполняется из операционной системы.
  2. Вы можете определить, какой пользователь выполняет скрипт (cron -u apache -e).
  3. Легко определить интервал. (то есть каждые 5 минут */5 * * * * php /path/to/script.php).
  4. Это регистрируемый.

Дополнительные примечания

У меня была работа cron под корень и это работало просто отлично. Моя проблема была в том, что у проекта был частный механизм каротажа что каждый файл журнала будет создан апаш пользователь. Запустив его из корень, иногда файл будет создан корень и после этого сценарии выполняются апаш не сможет APPEND в журнал.

У меня также был скрипт электронной почты, который запускался раз в 2 минуты и который зависал на 1 час. Оказывается, из-за ошибки в приложении в базу данных был вставлен неверный адрес электронной почты (somethingwithoutatsign.com), из-за чего библиотека PHPMailer выдает ошибки. После этого я добавил ловить блок, который будет отправлять мне электронное письмо всякий раз, когда возникнет исключение. Теперь, если скрипт перестает работать из-за плохого исполнения, я сразу узнаю.

0

По вопросам рекламы [email protected]