ruby-on-rails - 将昂贵的查询放在后台线程上会有助于网站性能吗?

标签 ruby-on-rails postgresql heroku memcached

我们是一个在 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/

相关文章:

javascript - 存储完成操作后要执行的任意操作

ruby-on-rails - 猴子修补时将代码放在哪里

javascript - 在函数中返回 postgresql 查询结果

mysql - [ ruby /PostgreSQL] : How to host my first Ruby website?

python - Postgres View 的 Django 模型

git - 如何在 heroku 上创建 git 工作流?

ruby-on-rails - 在Rails 3 View 中,如何检测显示字符串中的URL并将其格式化为指向该URL的链接?

ruby-on-rails - 在 jsonb 字段上添加索引

python - 由于 pip/distribute 错误,Heroku 推送被拒绝。解决方法是什么?

java - Heroku Spring Boot 不构建 Jar