我们是一个在 Heroku 上运行的 Ruby on Rails 应用程序,我们正在为我们的数据库使用 Heroku 的 Postgres 解决方案。
我们有一个非常昂贵的数据库查询。大约需要 45 秒。我们使用 memcache 来缓存此查询……但是当有人第一次访问在缓存中 24 小时后运行此查询的页面时,该站点基本上会因为此查询运行而崩溃。
我们正在考虑将查询放在后台线程上。这会与 memcache 一起很好地工作吗?这会有助于网站性能吗?数据库仍在处理大型查询这一事实是否会影响其他页面加载?
最佳答案
如果问题不是 dyno 上的资源密集型或锁定数据库,这可能会有所帮助。
如果这两种情况都不成立,您可以简单地向发起客户端返回一些东西(以前的版本,可能在缓存失效之前启动进程)并旋转一个新线程。
如果强度在测功机上而不是数据库上,您可以尝试启动 worker 测功机或 scheduled job .
如果您的数据库被锁定,那么您又回到了绘图板。
哦,如果您的应用程序只使用一个数据库连接,请务必为线程打开另一个(dyno 会自行处理)。
关于ruby-on-rails - 将昂贵的查询放在后台线程上会有助于网站性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373668/