PHP处理日志的一点思考

刚到新的公司,分配了一个处理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下的速度快好多。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值