@vlaabra

MySQL. Как обновлять данные по расписанию?

Здравствуйте!

Упрощенная таблица:
id INT
bonus INT
date_reg TIMESTAMP

Записей много. Каждый день нужно прибавлять +1 к bonus. В идеале не в определенное время всем, а каждому по прошествии суток.

Не нравятся следующие решения: cron и MySQL EVENT, потому что надо в один момент менять записи или ежеминутно делать выборку записей, которые нужно обновить.

Что посоветуете?
  • Вопрос задан
  • 2987 просмотров
Решения вопроса 1
Не знаю, что конкретно хранится в date_reg, поэтому будем предполагать, что есть поле date, хранящее время последнего прибавления (возможно, можно получить это из date_reg).
При любом обращении к некой записи в БД смотрите значение date, прибавляете к bonus число полных дней, прошедших с date, и к date тоже прибавляете число полных дней.

Допустим, некая запись имеет в bonus значение 10, а в date — 11.08.2014 16:20. При обращении к ней где-то отрабатывается описанный выше алгоритм. Если обращение произошло 14.08.2014 21:50, то bonus меняется на 13, а date — на 14.08.2014 16:20. И работа ведется с уже измененными данными.

Где будет производиться описанная обработка — решать вам. На мой взгляд, разумно было бы реализовать это на триггерах в БД.

Прочие варианты будут подразумевать cron или демонов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
cron
Ответ написан
Комментировать
Как вариант, выгрузить задачи в очередь и при разборе оной, смотреть время выдачи "бонуса".
Выгрузили из базы -> положили в очередь <- берем головной элемент, время наступило - даем бонус. Нет - обратно в очередь.
В очереди должна быть уже рассчитанное время выдачи, либо время когда начали отсчитывать время бонуса + через какое время отдаем бонус.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы