欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-09 21:54:13
...
我有一个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的代码?谢谢.

结贴了。想的差不多了。