存储主题“视图”的最佳方式

时间:2009-06-25 07:26:49

标签: sql statistics

我使用此代码更新主题的视图。

UPDATE topics 
SET views = views + 1 
WHERE id = $id

问题是用户喜欢F5的垃圾邮件以获取大量的观看次数。

如何获得独特的点击?创建一个我存储IP的新表? 不想将其存储在cookie中。清除你的cookie太容易了。

5 个答案:

答案 0 :(得分:2)

我会创建一个单独的表来存储这些信息。然后,您可以捕获更多数据,而不需要更新可能最多读取的表。

你总是会使用INSERT INTO tblTopicViews ...

你想要尽可能多地捕获信息,IP地址,命中日期和时间,也许还有关于浏览器版本,操作系统等的一些信息 - 无论你能得到什么。这样,您可以微调过滤掉刷新请求的方式。

值得注意的是,许多用户可以共享IP - 例如,整个办公室可能通过同一台路由器。

答案 1 :(得分:1)

我会创建一个存储唯一视图的表:

CREATE TABLE unique_views(
    page_id number,
    user_agent varchar2(500),
    ip_address varchar2(16),
    access_time date,
    PRIMARY KEY (page_id, user_agent, ip_address, access_time)
)

现在,如果有人访问该页面,并且您希望每个用户每天允许一个视图,则可以执行

INSERT INTO unique_views (:page_id, :user_agent, :ip_address, trunc(SYSDATE, 'day'))

在一天内不允许同一用户的重复观看次数。然后,您可以使用简单的GROUP BY(今天的视图示例)计算每个页面的视图:

SELECT page_id, count(*) page_views
FROM unique_views
WHERE access_time = trunc(SYSDATE, 'day')
GROUP BY page_id

答案 2 :(得分:0)

好吧,您可以将单个页面匹配写入日志表,包括识别烹饪或IP地址等信息。你可以悠闲地分析那张桌子。

但是Web服务器可能有这个功能。我知道IIS和Apache都可以创建详细的使用日志。对于两者而言,有各种图形和分析工具可以考虑IP地址等因素。

因此,您可以使用Web服务器,而不是滚动自己的日志记录。

答案 3 :(得分:0)

您可以使用session_id()来区分不同的用户,您需要一个单独的表来跟踪每次访问。

更新:我刚注意到你不想依赖cookies,所以这可能不适合你。

答案 4 :(得分:0)

请注意,由于各种问题(例如缓存服务器的未知行为),这种情况总是不准确并且在各种因素之间取得平衡。然而,对于一个粗略模糊安全的计数器,使用Karl Bartel和其他人建议的单独表格是一个不错的解决方案。

但是,根据你对这个问题的重视程度,你可能想要省略“user_agent” - 这很容易伪造,所以如果我真的想给我的点击计数器充气,我可以用脚本来点击命中使用user-agent =“bot1”调用我的页面,然后再使用“bot2”等来自相同的IP。

但是,一个IP后面的2个用户只会被计为1次,所以你会失去准确性 - 看看我的意思是各种因素之间的平衡?