@ld0687

Как правильно спроектировать таблицу MYSQL?

Добрый день!
Прошу подсказки.

Имеется некое действие, которое по настройкам пользователей запускается на сервере.
Пользователь может настроить время начала выполнения, время конца выполнения и интервал. Время устанавливается для удобства кратным 10 минутам.
Например -
Время начала 08:20
Время конца 14:00
Интервал 30 минут

На сервере КРОНом запускается каждые 10 минут скрипт, который должен выбрать поля подходящие под настройки пользователей и выполнить некое действие. В нашем примере, скрипт запускается в
08:20, 08:50, 09:20, 09:50 и т.д.

Не пойму как правильно организовать хранение и быструю выборку нужных записей.. Перебирать возможные варианты - не серьезно..
  • Вопрос задан
  • 68 просмотров
Решения вопроса 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
id int unsigned,
createdAt timestamp,
startedAt timestamp,
finishedAt timestamp,
interval int unsigned -- Я не очень понимаю, что у вас такое интервал, храните лучше в секундах.

По крону каждую минуту (можно и 10 мин, это не особо важно) вытягиваете записи, у которых startedAt >= CURRENT_TIMESTAMP() и finishedAt < CURRENT_TIMESTAMP(). Интервал и вот это вот все уже на части пыхи обрабатываете. Не забудьте комплексный ключ для startedAt+finishedAt добавить.

При выборке обязательно добавляйте погрешность, хотя бы секунд 5-10, либо вместо CURRENT_TIMESTAMP подставляйте округленное время, например для времени 10:20:01 используйте 10:20:00
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
`id` INT
`startAt` DATETIME,
`finishAt` DATETIME`,
`nextStart` DATETIME,
`interval` INT,
`active` TINYINT(1)

Выборка SELECT FOR UPDATE ... WHERE `nextStart` <= NOW() AND `active` = 1
После выполнения удаление/блокировка завершённых заданий, для остальных UPDATE ... SET `nextStart` = `nexStart` + INTERVAL `interval` MINUTE
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы