Запуск заданий, когда DB свободна на Ruby on Rails Heroku - PullRequest
1 голос
/ 15 февраля 2010

У меня есть приложение ruby ​​on rails, которое использует Heroku. Мне нужно запускать такие вещи, как задачи импорта / экспорта на нашей базе данных, которые блокируют всю систему, так как они слишком тяжелы для БД. Есть ли способ указать системе запускать эти задачи только тогда, когда база данных не используется в эту секунду?

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Нет встроенного способа запланировать такую ​​работу. Однако есть несколько вещей, которые вы можете сделать.

  • Запланируйте выполнение заданий в часы наименьшей загруженности дня. Это будет зависеть от вашего бизнеса, клиентской базы и так далее, но, надеюсь, есть окно, которое будет более подходящим, чем другие.

  • Вы можете написать свое пакетное задание для выполнения в течение более длительного времени, выполняя небольшие работы. Между каждой единицей работы поспите несколько секунд или посмотрите на текущую среднюю нагрузку и решите, что делать на основании этого. Это должно снизить влияние пакетных заданий.

  • Пусть веб-сайт обновит «блокировку» где-нибудь, либо в базе данных, либо в memcached, либо как-то еще. Если ваш обычный веб-сайт обновляет базу данных, вы можете посмотреть на существующий updated_at. Тогда выполняйте пакетную работу только тогда, когда какое-то время не было никаких действий. Это, конечно, не гарантирует, что новый пользователь не появится одновременно с выполнением вашего пакетного задания, но может быть способом найти окно, где сайт используется меньше.

...