2010-07-20 2 views
0

У меня есть модель под названием «Голосование», которая очень часто меняется (люди голосуют по материалам). Я делаю другую аналитику после того, как голосование сохраняется, например, интерполяция, если избиратель является мужчиной/женщиной, какой возраст и т. Д. Это приводит к обновлению счетчиков (голосов для взрослых, голосов женщин и т. Д.) Той же модели.фоновая работа против обратного вызова after_save

Интересно, как лучше всего это сделать после сохранения, если это будет фоновая работа (я использую плагин delayed_job), или это лучше всего оставить в качестве обратного вызова after_save? Что лучше и с точки зрения производительности?

Мне не нужно показывать до последних последних данных пользователю (даже если обратный вызов after_save так и не выполнит).

Благодаря

+0

Я бы предположил, что это будет зависеть от механики вашего анализа? Это процесс, когда он анализирует весь пул, таким образом, что было бы дешевле делать массово, чем одна запись за раз? – jasonpgignac

ответ

1

Моего правила заключается в том, что, если она занимает больше времени, чем вторая (в среднем), чтобы закончить - я засунуть его в качестве фонового задания, в противном случае я буду держать в синхронном. Я использую delayed job, он работает хорошо, и у меня не было причин оставлять его. У меня был один случай, когда мне не нужно было ударять базу данных в фоновом задании, и я использовал пользовательскую задачу rake, она была очень эффективной и мне удалось реализовать фоновый процессор задания.

+0

Во-вторых, этот подход с дополнительной точкой: Если задача не является критичной для использования приложения, или пользователь не требует, чтобы эта обновленная информация немедленно задерживала его. например, обновление сторонних систем (возможно, выставление счетов-фактур) изменения имени пользователя не влияет на способность пользователей использовать ваше приложение, поэтому используйте delayed_job –