Sal*_*ali 12 analytics counter mongodb
所以基本上我想实现与stackoverflow相同的功能:
viewed 59344 times
Run Code Online (Sandbox Code Playgroud)
所以这里有一些背景信息:
我知道计算唯一访问次数的最佳方法是通过注册,但事实是,很大一部分用户将只是被动读者,他们不需要创建帐户来从应用程序中读取信息.据我了解,最方便的方法是保存阅读帖子的每个用户的IP地址.我也明白IP地址不会提供唯一性(一些不同的用户将具有相同的IP,因为它们位于同一ISP后面,一个用户可以拥有不同的IP,通过使用代理,等等)
Mongo的使用并不是绝对必要的,只是因为现在所有东西都是用Mongo编写的,所以只有当它更快/更方便时才会切换.
Ste*_*nie 17
您确定需要跟踪"独特"视图吗?
我实际上不希望热门网站尝试保持视图计数的独特性 - 更大更好,重新访问新评论仍然是显示新内容/评论/广告意义上的额外"观点"."正确性"还有其他可能的微妙之处,可能对您的用例很重要,也可能不重要,例如排除爬虫或您自己公司的用户/ IP.
我没有花时间跟踪唯一视图(这不是过于有意义),而是考虑计算页面上的独特用户交互,例如投票/喜欢/评论.然后,您可以根据这些指标确定页面的"受欢迎程度".在Drupal的放射性模块中有一个有趣的例子,其中"热度"度量是基于基于用户交互的新近度的活动计算的.
1)对于MongoDB中的简单视图计数器,我只是用来$inc在页面加载时提高视图计数.您可以根据需要按角色排除日志记录用户(例如管理员用户).
2)对于更准确的视图计数器,我会将问题传递给网站分析平台(无论如何,您应该将其与您的网站一起使用以进行更详细的分析).例如,您可以使用Google AnalyticsAPI或Piwik等开源应用程序.Web分析系统已经有了用于确定唯一用户/视图的解决方案,并且这些API调用可以通过JavaScript异步进行.
3)如果实现您自己的唯一视图跟踪一个明确的要求,我会使用一个单独的集合来跟踪视图和upsert根据您的唯一性标准(user,article注册用户的每对唯一视图或session_id,article匿名用户配对).如果upsert导致插入,我会通过递增文章视图的计数器将其与方法#1(为文章视图递增视图计数器)结合起来.