С правильным индексом у задачи cron не должно быть серьезных проблем. У вас может быть частичный / отфильтрованный индекс, например
create index on jobs (id) where status <> 'done'.
Чтобы размер индекса был небольшим. Запрос должен соответствовать индексу где предложение.
Я использовал (id)
только потому, что пустой список не разрешен, и поэтому что-то должно быть там. Исходя из вашего комментария, schedule_dt
может быть лучшим выбором. Если вы включите все выбранные столбцы, вы можете получить сканирование только по индексу. Но если вы этого не сделаете, он все равно будет использовать индекс, ему просто нужно посетить таблицу, чтобы выбрать столбцы для этих указанных c строк. Я подозреваю, что попытка сканирования только по индексу не будет вам того стоить, поскольку нужные вам страницы, вероятно, не будут помечены как видимые, поскольку изменения были внесены в соседние кортежи всего за одну минуту go.
Тем не менее, кажется немного странным отмечать работу как выполненную, когда она только запланирована, а не выполнена.
Существует API, который позволяет другим службам проверять, было ли запланированное действие уже выполнено.
Таблица, размер которой увеличивается без ограничений, вероятно, представит управление проблемы помимо работы cron. Конечно, сервисам не придется оглядываться на месяцы, чтобы сделать это, не так ли? Не могли бы вы удалить готовые работы через несколько дней? Что если служба пытается найти работу и вместо того, чтобы найти ее «выполненной», просто не находит ее вообще?
Я не думаю, что работа cron по своей сути является проблемой, но она было бы чище не иметь его. Почему тот, кто вставляет задание, просто не вызывает SQS в режиме реального времени?