【问题标题】:How can SQL Server be used to efficiently store website page views?如何使用 SQL Server 有效地存储网站页面浏览量?
【发布时间】:2014-07-14 17:59:42
【问题描述】:

我目前正在使用单列记录网站上的基本页面浏览量,每次页面加载时递增一。

这提供了访问量最大的页面的有限、非常一般的视图,而不考虑访问者重复加载的页面或搜索机器人访问的页面等。

不用担心这些,我想有效地跟踪网页访问,以允许查询更多详细信息,例如今天最流行的页面,或本周最流行的页面。

将每个视图存储为单独的记录肯定会很快降低效率,并且所需的数据不需要那种详细程度。

【问题讨论】:

  • 什么是网络环境? ASP.Net/IIS?
  • 如果我理解您的要求,我会说一个包含所有页面名称的基表,然后是一个包含以下列的子表。参考 Page、visited-datetime、useragent-nvarchar(100)、username-nvarchar(100) [不确定你是否有这个]、Referrer-nvarchar(200)。为每个访问添加一个新行。
  • @DMason 环境是 IIS 中的 ASP.NET 和 MSSQL。
  • 我曾经编写过按会话跟踪页面浏览量/点击量的分析代码。它涉及使用母版页、会话开始/结束事件和会话变量。当会话结束事件触发时,相关数据(包括用户代理)将被保存到数据库中。你提到了机器人——我很难处理这个问题。我尝试使用 AJAX 无机器人控件等按用户代理字符串进行过滤。我最终放弃了,选择了 Google Analytics。
  • @Dbloch 这是我会采用的那种方法,但这不会很快变得低效吗?记录用户代理和推荐人将是一个奖励,但不是必需的,特别是由于需要存储。

标签: sql sql-server database database-design


【解决方案1】:

为了回答您的问题,您必须提供您的存储要求和限制,以及您想要存储以识别页面浏览量的信息。

就纯粹的存储效率而言,我会说,您现有的日志记录是存储页面浏览量的最有效方式,但实际上,如果没有其他可以让您更好地了解情况的信息,这些数据的相关性并不高,正如您所提到的,跟踪用户、IP 地址和其他非敏感信息可以让您更好地了解您网站中的活动。

我建议采用以下形式为您提供有意义的信息和分析能力的方法:

  • 在一个表中保存所有页面视图的日志,该表将存储以下信息:
    • IP
    • 页面(地址,或者如果您使用 MVC,则为控制器和操作)
    • 用户代理
    • 是移动请求吗? (可选,在 MVC 中,您可以通过 Request.Browser.IsMobileDevice 属性访问它)
    • 时间戳

此外,您可以拥有另一个表,用于存储给定期间(例如,按月)的所有页面访问摘要,每月使用 SQL Server 作业进行更新,从上一个表中检索记录,过滤它们,在每月汇总表中创建汇总记录,并将它们从 PageViews 日志表中删除。此表看起来与您已有的表相似,可能还有一些额外的列包含不同的 IP 计数、最流行的浏览器、移动访问量以及平均访问时间范围等数据(所有这些都由工作计算使用日志表)。

通过这种方式,您可以随时获得有关上个月网页访问的信息和网站每月活动的统计摘要,从而有效地利用您的可用存储空间,并为您提供关于您网站用户的更丰富的分析来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多