@27182

Как выполнять Ruby-метод проверки данных БД каждую секунду?

Пользователи сохраняют в базу данных информацию и выбирают срок её действия в секундах (может быть 10 секунд, а может и 1800). По прошествии этого времени с момента создания необходимо запускать определённый триггер. Cron-таски можно выполнять минимум раз в минуту.

Используемое решение

loop do
 Foo.check
 sleep 1
end


1. Какие есть способы сделать это правильнее?
2. Как оптимизировать подобный механизм, учитывая, что данных много, и проверка может выполняться дольше 1 секунды?
  • Вопрос задан
  • 481 просмотр
Пригласить эксперта
Ответы на вопрос 3
MAXOPKA
@MAXOPKA
Можно использовать гем Sidekiq - аналог крона для Rails.
Когда пользователь добавляет запись - добавлять задание в Sidekiq, с задержкой, которую указал пользователь.
Подробнее здесь - Sidekiq
Ответ написан
viktorvsk
@viktorvsk
Очередь задач (delayed job, sidekiq, resque) + планировщик (https://github.com/tomykaira/clockwork)
Ответ написан
maximw
@maximw
Запускать в кроне, в каждом запуске обрабатывать несколько записей. Главное не забывать про блокировки, чтоб хорошо работало, если вдруг сразу два процесса окажутся запущены - и в плане быстродействия и в плане целостности данных. Я обычно использую блокировки на уровне БД (MySQL GET_LOCK)
Ответ написан
Ваш ответ на вопрос

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

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