ruby-on-rails - 提高 24 小时内返回相同结果的 SQL 查询的性能

标签 ruby-on-rails performance postgresql caching ruby-on-rails-4

在我的 Rails 应用程序中,我只执行 10 个唯一的 SQL 查询。然而,每个都需要很长时间(1 - 5 秒)。每个查询的结果仅每 24 小时更改一次。

有哪些解决方案可以提高性能?

我正在使用 Postgres 和 Ruby on Rails。

我应该在某处缓存查询结果吗?我应该使用“存储过程”(还不知道它们是什么)吗?还有什么我应该研究的吗?

最佳答案

我会像这样使用Rails.cache:

def self.some_long_query_that_changes_every_day
  Rails.cache.fetch ['some_cache_key'], expires_in: 12.hours do
    self.where(field: value)
  end
end

fetch 将从未过期的缓存中读取或进行数据库查询并使用该键将其存储在缓存中。

唯一棘手的部分是expires_in部分。根据数据更改的具体时间,您可能需要根据数据的存储时间来计算 expires_in

expire_in = Time.now.utc.end_of_day - Time.now.utc
Rails.cache.fetch ['some_cache_key'], expires_in: expire_in....

或者类似的东西。

关于ruby-on-rails - 提高 24 小时内返回相同结果的 SQL 查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591974/

相关文章:

c++ - 对于大型对象(超过 30 个字段)覆盖 istream 的最佳方法是什么?

java - JPA 错误 : relation does not exist

mysql - Snow Leopard 上的 Ruby MySQL gem "couldn' t 创建数据库“错误

java - 哪些 Java 库适合绘制数学函数(包括 SDE)的图形

ruby-on-rails - PG::UniqueViolation:错误:重复键值违反唯一约束

Android 性能问题 : Many small apps or one big app?

java - Postgres + Hibernate + Java UUID

python - 如果我使用 psycopg2,如何返回字典或 json?

ruby-on-rails - 如何在 rspec 中运行 elasticsearch 服务器

javascript - 使用 Ruby 跟踪更新信息?