ruby-on-rails - 在 Rails 3 中,跟踪给定 RESTful 资源的访问次数的最有效方法是什么?

标签 ruby-on-rails database postgresql optimization model

我搜索了这个,但很惊讶没有找到答案,所以我可能把它复杂化了。但是,基本上我的 Rails 3 应用程序中有几个 RESTful 模型,我想以一种非常简单的方式跟踪它们,只是为了随时间推移进行流行度跟踪。就我而言,我只对跟踪 GET/show 方法的点击感兴趣——用户登录并查看这两个资源,他们的访问次数随着每次查看/页面加载而增加。

因此,我在 Books 模型上放置了一个“访问”列:

==  AddVisitsToBooks: migrating ===============================================
-- add_column(:books, :visits, :integer)
-> 0.0008s
==  AddVisitsToBooks: migrated (0.0009s) ======================================

该列初始化为零,然后,基本上,在 books_controller 中,

def show
  unless @book.owner == current_user      #hypothetically, we won't let an owner 
                                          "cheat" their way to being popular
  @book.visits = @book.visits + 1
  @book.save
end

这工作正常,除了现在每次调用 show 方法时,您不仅有对象记录的读取操作,还有写入操作。也许这就是我问题的核心;在中小型生产应用程序中插入单个整数更改所需的总开销是否很大?或者这只是一笔小交易,或者基本上什么都没有?

有没有更聪明的方法呢?每次查看给定页面时,我想到的其他所有内容仍然涉及写入记录。索引该字段是否有帮助,即使我很少搜索它?

顺便说一下,数据库是 PostgreSQL 9(在 Heroku 上运行)。

谢谢!

最佳答案

你上面描述的有一个明显的缺点:一旦进程更新数据库(增加访问计数器),该行就会被阻塞,如果有任何其他进程,它必须等待。出于这个原因,我建议使用数据库序列:http://www.postgresql.org/docs/8.1/static/sql-createsequence.html但是,您需要在代码中维护序列自定义:Ruby on Rails+PostgreSQL: usage of custom sequences

关于ruby-on-rails - 在 Rails 3 中,跟踪给定 RESTful 资源的访问次数的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678640/

相关文章:

.net - 运送我的软件中使用的 1GB 结构化文本数据的最佳方式?

mysql - 如何在 ubuntu 中使用脚本添加带有连字符的数据库名称

sql - 两个表加入具有不同行的网格

ruby-on-rails - rake 中止!您已经激活了 rake 10.0.2,但是您的 Gemfile 需要 rake 0.9.2.2

ruby-on-rails - 在 Heroku 上的 Rails 应用程序中使用 Bootstrap 时出现 Sass::SyntaxError

ruby-on-rails - Prawn 网格布局: Dynamic content colliding with subsequent rows

mysql - 是否可以将 MySQL 数据库置于单用户模式?

postgresql - 在 Postgres 中组合 row_number() 和字符串列

arrays - 如果数组包含给定范围内的值,则过滤行

ruby-on-rails - 找不到 Controller 的操作。但它确实存在