2012-01-04 2 views
0

Моя проблема не кажется уникальной. В принципе у меня довольно дорогостоящий процесс, который нужно запускать регулярно, но только если пользователь запускает определенное состояние.Как реализовать триггеры в Rails?

Например, у меня есть «анкета», и я анализирую результаты и даю рекомендации из анализа. Анализ и составление рекомендаций - это дорогостоящий процесс, иногда 10-20 с и может увеличиваться по мере увеличения набора данных. Кстати, я сейчас ищу способы улучшить производительность этого алгоритма.

Мои мысли по этому поводу состоят в том, чтобы реализовать состояние для этого пользователя, в котором говорится, что анализ/рекомендации истекли, опрос этого состояния, и если он истек, запустите дорогостоящий процесс. Я бы установил это состояние истек, когда пользователь заполнил анкету.

Моя текущая система - это рельсы 3.0, ruby ​​1.9.2 и MySQL, работающие на серверах EC2. В настоящее время я использую DelayedJob для перевода этого процесса в фоновое задание, но я не реализовал состояние/триггер.

Итак, в заключение мой вопрос: 1) Это даже правильная архитектура с учетом сценария? и 2) Есть ли какой-либо камень или реализация этого, который я могу использовать, который работает с Rails?

ответ

1

Вы можете построить быструю задачу рейка, чтобы проверить вопросники, которые нуждаются в анализе и задании очереди для обработки с DJ. Затем вы можете запустить задачу рейка с заранее определенными интервалами с Clockwork.

Поскольку вы находитесь на EC2, вам не нужно будет ничего оплачивать, чтобы запустить легкий процесс Clockwork, и ваша задача рейка может легко наследовать ту же среду, что и ваше приложение, без какого-либо риска быть вызванным HTTP-запросом ,

+0

Я определенно собираюсь проверить часовой механизм, выглядит полезным для выполнения обычных задач. Я не думаю, что это поможет в этом сценарии, хотя, как я думаю, каждый раз, когда я устанавливаю состояние для запуска задания, я могу также поставить его в очередь. Я почти нуждаюсь в ответе в реальном времени, поэтому я стараюсь думать об этом творчески. –

+0

Вы можете выполнить задание в очереди в действии контроллера, отвечающем запросу, чтобы сохранить вопросник, и пока доступен работник ди-джея, он вытащит задачу из очереди и запустит ее в течение нескольких секунд , – coreyward

Смежные вопросы