当前位置:Gxlcms > PHP教程 > mysql设计,统计脚本执行的间隔时间。

mysql设计,统计脚本执行的间隔时间。

时间:2021-07-01 10:21:17 帮助过:6人阅读

我有一个RSS程序,想统计一下:是其他网站的服务器订阅了我的RSS,还是普通客户通过浏览器打开执行。
现在的思路是:统计每个IP地址的访问频率用以区分。如果是其他网站的服务器订阅了我的RSS,那么一定是用自动程序定时执行,每次执行间隔时间是一个定数,比如每60分钟,每90分钟访问一次。

$ip=$_SERVER['REMOTE_ADDR'];

这样的情况,怎样设计mysql数据库呢? 本次访问时间-上次访问时间;上次访问时间-前次访问时间;再前次访问时间-前次访问时间(应该还须考虑一个每次脚本打开完成时间的误差可能正负几秒)... 这样的情况统计5次,大概可以确定该IP是自动程序,下次无需再统计。


回复讨论(解决方案)

两个字段:ip, time(unix时间戳)
判定条件:对于同一ip (max(time) - min(time)) / count(*) = avg(time) - min(time)
算法依据:等差数列的性质

其实你还可以判断User-Agent信息。

两个字段:ip, time(unix时间戳)
判定条件:对于同一ip (max(time) - min(time)) / count(*) = avg(time) - min(time)
算法依据:等差数列的性质



2个自段,可行吗?能不能给一段代码吗?

我水平不高,初想要5个字段,“ip;上次访问时间(本次访问时间-上次访问时间,用以计算);2次访问时间差;平均访问时间差;is_sever(默认值为0,是服务器的话升级为1,然后下次同样IP访问,就不需要再计算了)”

确定是server的,应该放在另一个表(例serverlist)中记录。
首先,版主讲的是每一次有访问且未确定是否服务器,都将ip与访问时间写入一个表(例accesslog)。每次写入后,判断是否服务器访问。(通常要几次才可以确定)
如果是,在serverlist插入一条记录,并把accesslog对应ip的记录删除。
当这个服务器再访问时,先判断serverlist有没有这个ip,如果有,则不写入accesslog。

另外,可以用user-agent来判断是否server访问。

什么是服务器访问呢?
什么服务器会订阅你的 rss ?
或是说什么网站会把你的 rss 存储于自己的数据库中?

另外,可以用user-agent来判断是否server访问。


什么是服务器访问呢?
什么服务器会订阅你的 rss ?
或是说什么网站会把你的 rss 存储于自己的数据库中?





什么是服务器访问呢? 说白了就是别人用自动程序抓取我的RSS,而不是浏览器或者RSS阅读器打开。
什么服务器会订阅你的 rss ? 或是说什么网站会把你的 rss 存储于自己的数据库中?

后两个问题我不再乎,我只想统计有多少不同IP的自动程序来抓取我网站的RSS信息。user-agent可以通过CURL之类的模仿,但是自动程序的唯一通性就是??99%都会通过cron程序,定时访问抓取,所以我想做个程序,通过分析不同IP的每次间隔访问时间,来分辨是否自动程序?当然最好不要用log,用数据库的话方便管理以及数据分析。

谢谢。


怎么说?到底什么用什么方法?2个字段可以吗?

所以说 2 个字段就可以满足记流水账的需要了
至于分析的结果是否也保存在同一个表中,那是由你决定的。如果是,当然还需要增加些字段

所以说 2 个字段就可以满足记流水账的需要了
至于分析的结果是否也保存在同一个表中,那是由你决定的。如果是,当然还需要增加些字段



当然不是流水账?问题是认真的。思路也说明白了,只是自己写代码信心不大,而且数据库怎么样设计最合理?大虾给个建议。

登记访问信息,当然是流水账
只需 insert 即可,分析计算一般也只需一条 update
弄的好的话,还可以用 view

如果你不把登记当做流水账则需先 select 定位,然后 update 修改
最后再分析计算

登记访问信息,当然是流水账
只需 insert 即可,分析计算一般也只需一条 update
弄的好的话,还可以用 view

如果你不把登记当做流水账则需先 select 定位,然后 update 修改
最后再分析计算


术语太专业了,能不能分享一下数据库结构,已经相关的insert,update和select的代码?谢谢.

结贴了。想的差不多了。

人气教程排行