现在的位置: 首页 > 综合 > 正文

PHP处理日志的一点思考

2013年06月04日 ⁄ 综合 ⁄ 共 697字 ⁄ 字号 评论关闭

刚到新的公司,分配了一个处理rmilog日志的事情。事情整体来说是比较简单,就是要把rmilog里没有记录的IP加入,就是数据量有点大,IP日志记录是按天按时分割。日志文件是Sqlite库保存,一天的数据量大约接近700000。

 

基本思路是从rmilog里的获取每条记录的访问时间与唯一标识到IP记录日志里查找到对应的IP,然后分解处理添加到rmilog记录后。

 

思路比较清楚了,那不开始编码。

第一步:先给rmilog添加四个字段分别记录IP的四个段。

第二步:编码,

  a) 从rmilog里读取访问记录的时间,记录的ID,记录的标识。

  b) 根据时间得到IP记录保存的路径。

  c) 读取IP记录文件,循环查找到IP的记录。

  d) 分解 ip更新到rmilog日志里。

这一系列下来一条记录就搞循环rmilog里的所有记录,这样就把rmilog的记录IP全更新了。

 

但这有很大的问题就是每一条记录都在打开关闭一次日志文件,而且每个日志文件都不小。初步的一个估计每100条记录大约在12秒左右的处理时间,当然这么系统与硬件都有一定的关系。

 

分析了一下,连续的一段记录差不多都是在同一段时间内的,这样相应的IP记录应该也是在一个文件里的,应该在记录有效期内把文件缓存处理,我的处理方式是把文件先数组化,当记录不在数组内时失效,重新生成。同时分二分查找提高查找的速度,这样最差的情况是记录在中间时,为了提高查找的效率我再用二分查找从中间开始查找。

 

经过以上的处理效率大约提高 75%,之前处理100条记录大约12秒,现在大约是3秒。还有个问题是在linux下的速度明示比Windows下的速度快好多。

 

 

 

 

抱歉!评论已关闭.