如何跟踪最受欢迎的产品

时间:2009-01-04 23:09:04

标签: ruby-on-rails

我正在尝试实施“热门产品”功能。基本上,每次查看产品时,我都希望将该产品的视图数记录到数据库。我在哪里挂钩这样的东西?我已经看到了基于构建某种流量分析的东西,但我正在寻找能够使这个功能更多地与RoR应用程序耦合的想法。

6 个答案:

答案 0 :(得分:4)

我假设控制器中有一个'view'方法,做类似

的操作
@product = Product.find(params[:id])

如果产品有“观看次数”字段,您可以执行类似

的操作
@product.views = @product.views + 1
@product.save

答案 1 :(得分:3)

写一个像@ eelco.lempsink.nl这样的@product.views计数器说可能是一个完美的基本解决方案,但恕我直言会出现重大的可扩展性问题,如:

  • 对读取执行DB写入将是非常重要的过载
  • 如果它是一个很棒的应用程序,那么很有可能视图会受到服务器缓存的影响

可能更具可扩展性(但非常非RoR)的解决方案是获取服务器日志并运行批处理以运行流行度计算(如每个IP等唯一),然后将此信息更新为RoR模型。

答案 2 :(得分:1)

像eelco.lempsink.nl建议的视图字段应该可行。要获得最受欢迎的商品,请添加以下内容:

:sort => "views DESC",

但要确保只计算人类对物品的看法。如果每次在热门项目列表中显示项目时计数增加,您将获得一个反馈循环,搞乱流行度系统。还要确保不允许webcrawler更改视图状态。

另外,你真的应该考虑你想要衡量的东西,对产品感兴趣的人数,或者误导的缩略图以及点击产品的高人气排名所欺骗的金额。

如果这是一个网上商店或类似网站,你最好不要计算买家数量而不是观看数量。这样可以更准确地衡量产品的实际利益(因为他们实际上对它有足够的兴趣花钱),而且我认为到数据库看一个视图听起来有些不明智(还有更多的东西)观点而不是购买)。无论如何,您将获得比可能遭受反馈问题的views字段更好的数据,因为您可以通过选择具有特定时间范围内的时间戳的产品的order行数来获得流行度历史记录。从上周左右获得订单可能不会那么昂贵(对于非常长的时间段,结果可能应该被缓存)。

答案 3 :(得分:0)

根据您呈现内容的方式以及您对视图的真正想法,您可能希望完全依赖于此并使用Google / Microsoft分析等内容。他们在产品上投入了大量时间,让您随时了解各种有关流量的信息。

答案 4 :(得分:0)

我想说在一个单独的表中跟踪一些统计数据。例如:

products_views

-

PRODUCT_ID 用户身份 IP地址 created_at 的updated_at

这样,如果两个人同时查看,您不必担心锁定更新数据库中的视图字段。然后,您可以在后台处理此表以汇总统计信息。

答案 5 :(得分:0)

对于这种事情,我喜欢google analitics,然后使用API​​将图形提取到您的应用中。

这会否定所有“假”读取操作,还有大量其他信息可以跟踪和记录。