2

我在数据库中有很多数据,我想从中进行统计。大量数据 = 表中的数千行,我想获得每日、每周、每月(每个月)的统计数据......只是详细的统计数据。

问题是,获取这些数据需要时间(而且不少)。

所以,我认为最快、最清晰、最有效的方法是什么……

我的第一个想法- 当用户来到我的应用程序时,在ApplicationController我将从数据库统计信息中获取的方法中,将我得到的对象保存到会话的变量中,然后我将使用这些变量作为源。然后,当我需要在应用程序的某个地方打印出统计数据时,我只使用这个加载的数据。

问题是:这是个好主意吗?或者,还有更好的方式吗?

4

2 回答 2

3

而不是将数据库统计信息存储在会话变量中。您可以存储在 memcached

Rails 具有出色的内置缓存支持

http://memcached.org/

https://github.com/mperham/dalli

于 2012-04-17T11:19:12.437 回答
0

另一种方法。您可以通过这种方式在每个用户的基础上缓存部分页面:

- cache [@user, :stat] do # or [@user, :stat, :daily] 
  statistic for the user @user

如果某些用户的关联记录影响他的统计,则使用:

# SomeModel.rb
belongs_to :user, touch: true

这样updated_at,当相关模型的对象发生更改时,您的用户将被更新,并且用户的缓存将被自动视为已过期,并且- cache ... do将执行内部块。确保在此块之外没有(或最少)数据库命中发生(例如:不要在控制器中使用 Model1.where(conditions) .all ——这样你就不会发出 db 请求,只是构造它们)。

要在开发模式下启用缓存,请转到您的config/environments/development.rb并更改true参数config.action_controller.perform_caching并重新启动您的应用程序。

于 2012-04-17T11:21:39.003 回答