首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免经常使用Rails重新计算汇总数据?

问如何避免经常使用Rails重新计算汇总数据?
EN

Stack Overflow用户
提问于 2011-09-11 05:08:19
回答 2查看 608关注 0票数 1

我有一个用户配置文件页面,其中有一个侧栏的用户统计像不像堆栈溢出配置文件页面(例如,总访问量,徽章的数量)。

问题是,目前我正在访问数据库,并计算每个请求的统计数据。我可以实现片段缓存来减少这一点,但是有没有更好的方法来处理这种事情呢?

将汇总的汇总数据存储在数据库中似乎会导致问题(即不一致)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-11 05:24:02

您可以使用以下命令将此信息存储在数据库中,而不是重新计算它:

  1. 计数器缓存
  2. 自定义回调

计数器缓存

例如,如果测量徽章的数量,您可以在User中创建一个名为badges_count的数据库字段,然后在徽章模型中创建belongs_to :user, :counter_cache => true。现在,每当徽章的数量发生变化时,您都可以访问计数,而无需在@user.badges_count上进行任何新的计算。

一个基本的实现:http://asciicasts.com/episodes/23-counter-cache-column

自定义回调

假设您有一个字段,它测量比简单计数更复杂的行为。在这种情况下,只需使用before_save、after_save、before_create等实现回调,每当某个操作发生时都会更新字段。

对不一致的担忧

只有在错误的情况下,才会在数据库中存储数据是不一致的。任何统计信息都可以通过有限数量的路径进行更新,您应该确保在更新所使用的任何字段时覆盖所有路径。Rails用counter_caching为你做了这件事,如果你使用自定义回调或者你有一些不寻常的情况,你必须自己去做。

票数 6
EN

Stack Overflow用户

发布于 2011-09-11 06:12:22

你可以使用一个隐藏的div,就像这个问题(Caching data by using hidden divs)。根据您希望缓存多少数据,这可能是一个很好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7374722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档