Обновление записей в базе данных на основе времени

У меня есть модель под названием «ticket», которая имеет время начала и время окончания. Я хотел бы иметь возможность сортировать / делить билеты по времени на фронте. Будет 3 категории: прошлое (сейчас > end_time), настоящее (start_time >< сейчас < end_time), будущее (сейчас Где теперь представляет Реальное время UTC. Я думаю о том, чтобы иметь поле » состояние «в модели билета, которое будет содержать значение» прошлое»,» текущий «или»будущее». Мне нужен способ обновить состояние билетов на основе времени.

Будет ли работа cron, выполняемая каждую минуту, подходящим решением для этого? Он будет повторять все записи и делать проверку, если состояние должно быть обновлено, а затем выполнить обновление при необходимости. Является ли это решение масштабируемым? Есть ли лучшее решение?

Если это необходимая информация, я думаю об использовании Firebase для базы данных и Google App Engine для работы cron.

1 ответ

  1. В большинстве случаев это неправильный подход к сохранению данных в БД, который становится недействительным по времени, но может быть вычислен из тех же данных записи. Существует также риск несогласованности, если даты обновляются, но cronjob еще не запущен или когда даты близки к Сейчас.

    Я бы посоветовал вам всегда рассчитывать эту информацию в ваших запросах БД с помощью полей даты. В MySQL это будет работать подобно этому:

    SELECT 
        (IF (end_time < NOW()) THEN 'past' ELSE IF (start_time < NOW()) THEN 'current' ELSE 'future') AS state
    FROM table
    

    В качестве альтернативы можно просто выбрать start_timeполя end_timeand и обработать состояние в приложении. Если требуется запросить записи по статусу, можно также использовать столбцы date в предложениях фильтрации.

    При этом отпадает необходимость обновления статуса задания cron.