Pergunta

Eu tenho um aplicativo Ruby on Rails que usa Heroku. Eu tenho a necessidade de executar coisas como tarefas de importação/exportação em nosso banco de dados que travam todo o sistema, pois são muito pesadas no banco de dados. Existe uma maneira de dizer ao sistema para executar apenas essas tarefas quando o banco de dados não está sendo usado nesse segundo?

Foi útil?

Solução

Não há uma maneira interna de agendar um trabalho como esse. Existem algumas coisas que você pode fazer.

  • Programe os empregos para funcionar durante as horas menos ocupadas do dia. Isso dependerá do seu negócio, base de clientes e assim por diante, mas espero que haja uma janela mais adequada que outros.

  • Você pode escrever seu trabalho em lote para correr por mais tempo, fazendo pequenas unidades de trabalho. Entre cada unidade de trabalho, durma por alguns segundos ou dê uma olhada na média de carga atual e decida o que fazer com base nisso. Isso deve diminuir o impacto dos trabalhos em lote.

  • Peça ao site que atualize um "bloqueio" em algum lugar, no banco de dados ou em um memcached ou algo assim. Se o seu site normal atualizar o banco de dados, você poderá olhar para o existente updated_at. Em seguida, apenas o trabalho em lote quando não houver atividade há algum tempo. Isso não garante que um novo usuário não apareça ao mesmo tempo que seu trabalho em lote é executado, é claro, mas pode ser uma maneira de encontrar uma janela onde o site seja menos usado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top