跟踪唯一页面视图

时间:2009-09-28 05:41:00

标签: visitor-statistic

为特定网页跟踪网页浏览量(特殊情况)的最佳方法是什么?

示例:论坛中的主题,视频网站中的视频,Q / A脚本中的问题(SO)。

目前,我正在采用一个简单的“视图”列的方法来处理我想要计算视图的每一行,但是,我知道这不是最有效的方法。

对于唯一视图,我有一个单独的表,其中包含一行“QuestionID”和“UserID”。当用户访问问题/页面时,我的代码尝试在视图表中使用“UserID”和“QuestionID”查找一行,如果不能,则添加一行,然后在“问题”中增加“问题”的“视图”值。 “问题”表。

3 个答案:

答案 0 :(得分:1)

您的存储解决方案似乎是跟踪用户的最佳方式。这些表没有冗余数据,您的多对多关系由其自己的表表示。

另一方面说明: 对于匿名用户,您需要记录他们的IP地址,并且您可以使用COUNT()sql函数来获取这种方式的唯一访问者数量,但即使IP地址本身也不是“唯一”。

答案 1 :(得分:1)

首先,当你有一个存储userid-quesitonid对的表时,这意味着你可以对它们进行计数,添加一个视图列是违反我想的规范化规则。

其他的是我可以根据需要随意使用F5,如果你没有实现cookie解决方案,如果没有,那么在表中添加一行。

当谈到ip地址解决方案时,它远远不是一个解决方案,它会让人们看到路由器背后的人。

我想(现在也正在实施)一个为注册用户检查cookie,sessionIds,DB表的解决方案,如果没有找到,则在表中添加一行。无论如何,Itr还会记录SessionID和IP地址,但并不真正依赖它们。

答案 2 :(得分:0)

如果您正在为匿名用户使用ASP.NET MEmbership和匿名提供程序,那么只要您说Profile.Save(),每个匿名用户就会获得在aspnet_Users表中创建的行。在这种情况下,您可以跟踪查看某个页面的匿名用户和注册用户。您需要做的就是记录aspnet_user的UserID和QuestionID。

但是,我强烈反对在数据库级别执行此操作,因为它会炸毁您的数据库。如果您有10,000个问题,1,000个注册用户和100,000个匿名用户,并假设每个用户平均访问10个问题,那么您最终会在跟踪表中拥有1M行。相当一些负荷。

此外,在跟踪表上执行SELECT COUNT()对数据库来说是相当大的负担,尤其是您在论坛上几乎每个页面视图都这样做。最好是针对每个问题在问题表中保留一个总计数器。每当您获得一个查看页面的唯一用户时,您只需增加计数器即可。

此外,请勿从跟踪表中创建与用户表的FK关系。您将需要清理aspnet_users表,因为它会随着时间的推移堆积许多匿名用户,这些用户很可能永远不会回来。因此,跟踪页面只需要有userID字段,而不是FK。此外,您将不得不随着时间的推移清理跟踪表,并且它将继续获得数百万行。这就是为什么TotalView计数器需要在Question表中,并且在显示页面时从不使用SELECT COUNT()来计算视图的数量。

这会回答你的问题吗?