Задать вопрос
AlexanderMint
@AlexanderMint
Web Developer

Как лучше хранить crontime в базе данных?

Есть таблица, допустим Emails, которая хранит email адреса.
В интерфейсе сайта есть форма в которой указывается "интервал" для каждого email адреса в crontime формате.:
Пример
email            | timeline
admin@example.ru | */5 * * * *

*/5 * * * * - указывает на то что данная запись в базе должна находится каждый раз, когда текущее время/минуты кратны 5

Вопрос: как хранить данный интервал, с учетом того что воркер, по крону, каждую минуту, должен максимально быстро находить задачи которые необходимо выполнить в данную минуту? Как Вам подход который используется сейчас?

Если есть другие варианты реализации то с удовольствием выслушаю.

P.S. Как работает на текущий момент
Храню в базе интервал в crontime формате, за исключение того что записи в духе */5 конвертирую в 5,10,15....
Далее Postgres, запрос по регулярке (timeline ~* regxp):
  • Время: Mon, 19 Jun 2017 13:15:37
  • Регулярка: ^([\d,]*15[\d,]*|\*|15) ([\d,]*13[\d,]*|\*|13) ([\d,]*19[\d,]*|\*|19) ([\d,]*6[\d,]*|\*|6) ([\d,]*1[\d,]*|\*|1)$

Находит, отнасительно шустро, но мне сам подход не очень нравится
  • Вопрос задан
  • 481 просмотр
Подписаться 2 Сложный 3 комментария
Пригласить эксперта
Ответы на вопрос 1
vistoyn
@vistoyn
программист
Используйте библиотеку mtdowling/cron-expression.
Она умеет анализировать интервалы в стиле крон.

Идея такая:
1. Нужно вытащить из базы все записи.
2. Для каждой записи узнать следующее время запуска.
3. Если оно совпадает с текущей минутой, то выполнить задачу.
Ответ написан
Ваш ответ на вопрос

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

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