1

我有一个使用 Heroku 的 ruby​​ on rails 应用程序。我需要在我们的数据库上运行诸如导入/导出任务之类的东西,这些任务会锁定整个系统,因为它们对数据库来说太重了。有没有办法告诉系统只在那一秒不使用数据库时才运行这些任务?

4

2 回答 2

1

没有内置的方法来安排这样的工作。不过,您可以做一些事情。

  • 安排作业在一天中最不忙的时间运行。这将取决于您的业务、客户群等,但希望有一个比其他窗口更合适的窗口。

  • 您可以编写批处理作业以运行更长时间,执行小单元工作。在每个工作单元之间,睡眠几秒钟,或者查看当前的平均负载,并据此决定要做什么。这应该会降低批处理作业的影响。

  • 让网站在某个地方更新“锁”,无论是在数据库中还是在 memcached 中或其他地方。如果您的正常网站使用更新了数据库,您可以查看现有的updated_at. 然后只在一段时间没有任何活动时才进行批处理。当然,这并不能保证新用户不会在批处理作业运行的同时弹出,但这可能是一种查找站点使用较少的窗口的方法。

于 2010-02-15T07:17:26.873 回答
0

您是否考虑过在 Heroku 上使用后台作业/工人?Heroku 的延迟作业排队系统也值得一读

于 2010-02-15T13:50:48.110 回答