2010-08-28 196 views
1

我将为文章创建查看计数器。我有一些问题:在ASP.NET MVC中查看计数器

  1. 我应该忽略,当他打开文章文章的作者 ?

  2. 我不想更新数据库中的每个 时间。我可以在 Dictionary<int, int>(articleId,viewCount)中存储 每篇文章的查看次数。 100 命中后,我可以更新数据库。

  3. 我应该只为每个用户和文章数量命中每 小时一次。 (如果 用户在一小时内打开一个文章多次 次,则查看次数 应该只增加一次)。

对于每个问题,我想知道你的建议如何做到这一点。

我特别感兴趣如何做#3。我应该存储用户在Cookie中打开文章的时间吗?这是否意味着我应该为每个页面创建一个新的Cookie?

回答

2

我想我知道了答案 - 他们正在分析的IIS日志为Ope宇宙建议。

隐藏图像的src设置为

http://stackoverflow.com/posts/3590653/ivc/[Random code] 

[随机代码]需要,因为许多人可以共享相同的IP(网络中,例如)和码用于区分用户。

+0

也许我会用同样的方法。 – 2010-08-28 21:30:15

+0

我知道这已经有一段时间了,但是你有没有想到同时这个[随机代码]的目的是什么?我今天在这个主题上开始了一个新的问题:http://stackoverflow.com/questions/5633942/dissecting-stackoverflow-views-counter。也许你可以在那里分享你的见解? – 2011-04-12 12:10:38

2
  1. 当然 - 我认为这是一个好主意

  2. 和3的关系:问题是你会在哪里实际存储这个字典和逻辑。

ASP.NET应用程序或会话范围当然是最简单的选择,但您真的需要了解应用程序池的逻辑。 ASP.NET应用程序会不时被回收:当网站在某段时间或特殊情况下没有任何操作时 - 例如,如果进程开始占用太多内存,则应用程序将关闭,并在下一个请求中启动新应用程序。有会议和应用程序关闭的事件,但至少在几年前,它们并不真正可靠:在许多特殊情况下,它们并不总是开火。也许他们现在更好,但是测试很痛苦。 1小时实际上是很长时间的:通常会话只在最后一次请求后的20分钟内保持活跃状态​​。

一个可靠的方法是将有一个单独的Windows服务(很多工作方案),或者总是存储到数据库双视图分析(对于这样一个小功能相当大量的开销)。

您是否有权访问IIS日志?如何分析IIS日志每30分钟进行一次计时器处理并从那里进行计数?或者,只需将所有匹配数据与用户信息一起存储到数据库中,并使用类似的计时过程计算独特匹配。

最后一个问题:你真的确定没有成千上万的反应用的/在互联网服务不会做足够接近你的要求的工作吗?

祝你好运!

+0

我忘了提 - 字典将存储在一个静态属性。 不,我没有访问IIS日志。我想要一个像StackOverflow一样的视图计数器。 – 2010-08-28 13:12:50

1

这是Firebug中此页面的屏幕截图。您可以看到有一个返回204状态码的请求(无内容)。

这是stackoverflow的查看计数器。他们正在使用一个指向控制器动作的隐藏图像。

我有很多文章。如何跟踪用户已经访问过哪些文章?

P.S.顺便说一句,为什么这个请求做了两次?

alt text

+0

你确定吗?我想你会在你输入问题的详细信息时更新查看计数器,就像这个页面一样。 – goenning 2010-08-28 18:52:34

+0

是的,这种图像只存在于需要多个视图的页面上。 – 2010-08-28 19:02:45