2009-09-28 153 views
2

跟踪页面浏览量的最佳方法是什么?跟踪唯一的页面浏览量

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

目前,我正在只是一个简单的“意见”对每行我想计数的意见栏的方式,但是我知道这是不是最有效的方式。

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

回答

1

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

在另一方面: 对于您需要记录自己的IP地址匿名用户,并且你可以使用COUNT()SQL函数来获得独特的访客这样的数字,但即使和IP地址不是“唯一“本身。

1

首先,当你有存储用户ID-quesitonid对表,这意味着你可以数得过来,加入意见栏是对标准化的,我想规则。

其他的事情是,我可以F5像我想,如果你不执行一个cookie的解决方案,如果没有则添加行到表中。

,当涉及到IP地址的解决方案,这是远远形式是一个解决方案的话,那将块,旋转路由器背后的人。

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

0

如果您正在使用ASP.NET成员和匿名提供者为匿名用户,则每个匿名用户,只要你说的Profile.Save()获取aspnet_Users表格内创建一行。在这种情况下,您可以跟踪查看特定页面的匿名用户和注册用户。所有你需要做的就是记录aspnet_user的UserID和QuestionID。

但是,我强烈建议不要在数据库级别这样做,因为它会炸毁数据库。如果您有10,000个问题,1,000个注册用户和100,000个匿名用户,并且假设每个用户平均访问10个问题,那么您最终会在跟踪表中拥有1M行。相当一些负载。

此外,在跟踪表上执行一个SELECT COUNT()在数据库上的工作量相当大,特别是你几乎在你的论坛上的每个页面视图上执行此操作。最好的办法是在每个问题的问题表上保留一个总计数器。每当你看到一个独特的用户页面,你只需增加计数器。

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

这是回答您的问题吗?

+0

这个答案对您有帮助吗? – oazabir 2011-05-18 10:52:23

相关问题