У меня есть таблица MYSQL
, содержащая информацию о событиях. Мне нужен механизм, который обновляет статус каждого события в соответствии с его датой ( "более", если это минута).
Каков лучший способ сделать такое? Обновить статус события, когда любой пользователь входит в систему (бесполезная процедура для большинства пользователей), создать какую-то внутреннюю задачу (например, задание cron?) Или любым другим способом.
Прямо сейчас статус события обновляется только тогда, когда автор регистрируется. Это работает, но другой пользователь увидит событие как "запланированное" до тех пор, пока автор не войдет в систему, даже если дата прошла. Я использую PHP
кстати. Благодаря
Я бы рекомендовал обновить статус в любое время, когда запрашивается статус. Или еще лучше, даже не сохраняйте статус в базе данных вообще, а просто вычисляйте его каждый раз, когда он запрашивается на основе других переменных. Таким образом, всякий раз, когда у вас есть список таблиц, статус или кто-то запрашивает статус, просто введите дату события, сравните его с сегодняшней датой и отправьте им "не запущено", "текущее" или "за".
Если вам, конечно, не нужны более возможные статусы ( "планирование", "подготовка", "настройка" и т.д.). Затем вам понадобятся либо запланированные даты/время для каждого из этих статусов, либо вам нужно будет сохранить переменную статуса. В любом случае, вы могли бы обновить статус (согласно сегодняшней дате и любой другой соответствующей информации) в то время, которое оно запросило.
Каждый ответ принимает вашу причину для ОБНОВЛЕНИЯ. Однако позвольте мне подвергнуть сомнению это решение с расширением предложения Col.Srapnel от комментариев.
Обновление можно рассматривать как пустую трату ресурсов, так как вы можете рассчитать ее на ходу с сопоставлением даты памяти (что на несколько порядков быстрее, чем ввод-вывод для хранения).
Существует два подхода к этому:
Конечно, могут быть веские причины игнорировать эти решения, но я считаю, что производительность сама по себе недостаточна (большинство БД связаны с I/O).
Я бы пошел с полуночной работой cron, если вам не придется иметь дело с большим количеством часовых поясов. Перекомпоновка кажется довольно расточительной, и вычисление по требованию может быть довольно беспорядочным с точки зрения обслуживания, поскольку оно оставляет базу данных в частично неправильном состоянии.
Обновление при входе пользователя в систему - это не очень хорошая идея, поскольку она добавляет слишком много давления (если есть много пользователей). Лучший способ сделать это - запустить cronjob каждую ночь после 12 часов утра или в начале дня. Если вы все еще хотите сохранить свой старый код, а затем оберните его кодом даты. псевдо будет выглядеть так:
$updated_last = last modification time of the file "updated";
if($updated_last is more than 1 day) {
update db; (your old code)
touch file "updated";
}
Используйте это,
UPDATE events SET status = 'over' WHERE DATE(event_date) > NOW();
Запускайте его каждый день, один раз в день, cron.