当前位置:  开发笔记 > 开放平台 > 正文

如何"查看计数"最佳实施?

如何解决《如何"查看计数"最佳实施?》经验,为你挑选了2个好方法。

在任何网站上,例如在StackOverflow上,每个问题都有一个视图计数,用户阅读一个问题但之前已经读过它不会计数两次.

我对如何实现它以及使用哪些表来实现它有一些想法.

您认为实施此方法的最佳方式是什么?



1> Craig Bovis..:

我看到你有几个选择.

饼干

您可以在用户浏览器中为要记录视图的每个页面存储cookie.检查此cookie是否存在,如果cookie已存在,则不记录视图.

缺点是,如果禁用cookie或有人试图游戏系统,它将无法工作.

从好的方面来说,您不必担心存储可能数百万/数十亿行的表数据.

数据库

您为每个视图保留一条记录.以某种方式将该记录与用户相关联,例如MemberID,IP Address; 对用户来说应该是唯一的东西.如果您不要求用户登录,IP并不理想,但足够好.

所以你会有一个包含以下列的表,

ArticleID(外键)

用户ID(外键)

日期

由于几个原因,日期将有用,

报告.一旦知道记录每个视图的时间,就可以构建更好的统计数据.

查看超时.例如,您可能只想每个用户每小时存储一个视图.保持日期列,您可以执行此操作.

如果您的应用程序在这种情况下变得流行,那么您将需要处理存储问题.我运行一个流行的Facebook应用程序,每天会添加超过100,000个视图行.实际上,如果你的应用程序如此受欢迎,以至于它成为一个问题,那么你将面临更大的问题需要处理.



2> Neromancer..:

在我的网站上,我通过使用随机数划分视图数来处理客户视图和"大量数据".

假设我有一个0到1之间分布良好的随机数生成器,我每天在特定页面上获得100,000个视图.如果我在每个视图中调用'logView()'函数,但在其中生成一个新的随机数,并且当随机数<0.001时才真正将视图记录到数据库中,那么对于100,000个视图,我只会大约点击DB 100,000*0.001 = 1000次.

如果我想返回一个视图计数,那么我只需将我的DB编号除以相同的值,例如.1000/0.001 = 100,000.这近似精确到最近的1000个视图.

显然,您可以根据站点的负载选择随机数范围,如果负载发生显着变化,甚至可以更改此值(您只需相应地修改存储的值).

此外,只有1000个视图的页面在视图计数中甚至可能得不到1,但如果您有一个包含100,000个视图的页面,则1000的视图非常无关紧要.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有