页面视图计数器 - 数据库设置和技术/策略

时间:2008-11-03 19:03:37

标签: asp.net sql-server database

我正在开发一个页面查看计数器,用于跟踪页面在我们网站上的浏览量并将其显示给用户。 (我之前问过一个介绍性问题:Page View Counter like on StackOverFlow)。

使用这些建议,我开发了一个httpHandler,只要它被解雇,它就会处理请求:

<link rel="stylesheet" href="cn.axd?t=1&id=232" type="text/css" />
  1. 只是想知道最终用户是否愿意 需要等待请求 在他们可以之前完成处理 查看/与页面互动。

  2. 更好的选择是实现异步队列,其中信息记录到MS队列并最终通过(例外策略)登录数据库

  3. 检查某条记录是否存在(PageID)并增加计数器或将记录插入数据库并在以后需要时聚合会更慢吗?我们只需要在本周末运行聚合,以查看特定页面在一周内的总浏览量。

  4. 谢谢大家。

4 个答案:

答案 0 :(得分:2)

在我的旧公司,我们还维护了一个页面查看计数器,随着点击次数的增加,数据库表也随之下降,使网站瘫痪。

无论您采用何种方法,我都建议如下:

  1. 一直插入(它们比更新更快)。
  2. 它们是异步的,因此它不会阻塞主线程,也不会阻止将来的请求。
  3. 进行夜间流程,使数据更新并清除第1点中的表格。
  4. 根据汇总数据进行选择。
  5. 我们发现这是最有效和可扩展的解决方案,尽管您没有实时数据。

答案 1 :(得分:1)

有趣的问题!像许多其他性能调优问题一样,还有一些权衡。

  1. 可能。在IMG href =“”中加载此处理程序可能是一个更好的主意,将大小设置为0,以便用户看不到它。

  2. 在负载较重的情况下,这将是更可取的,这样您的处理程序可以在排队操作后立即返回。但是,对于大多数负载,运行简单的T-SQL查询来增加计数器的速度可能同样快。

  3. 直接在T-SQL查询中为值添加+1可能是最好的,“count = count + 1”等。这样可以快速运行并导致后续检索数据聚合

  4. 希望这有帮助!

    亚当

答案 2 :(得分:0)

我会使用其他页面中引用的日志记录方法,除非您需要跟踪视图的特定时间/日期。我的理由仅仅是因为当应用程序开始按比例扩大时,您可能会收到大量的项目。

将处理程序作为CSS样式链接,不应该真正停止加载时间,但它可能会产生一些影响。

使用简单的插入/更新脚本,我无法想象执行该语句的性能开销值得尝试执行队列样式系统...

答案 3 :(得分:0)

为跟踪网页浏览/点击而开发MQ听起来有点复杂。

如果您担心用户的任何感知延迟,为什么不直接在您的URL中启动JavaScript中的XmlHttpRequest?这将被异步处理。