众所周知, 某b是懒人, 当然这个前提与本文无关.
某b搭建的nba视频站虽然和NBA官方的版权声明冲突不小, 不过每天的PV还是能有大概17k,
不过这个统计的方法很可怕, php里先建立一个数组, 把每条访问数据push进去,
序列化, 扔到memcached里. 再一个访问来了, 反序列化, 再push, 再序列化…
后来干脆就准备写个实时的日志记录和处理的python程序, 不然序列化都会吃掉大量的脚本运行时间.
先很白痴的准备用FastCGI来做, 做一个webservice, php请求一次, 我就完成一次日志.
后来还是打webserver的主意, 不过FastCGI行不通, 就转而研究管道了.
mkfifo创建named pipeline后, 让nginx把日志输出到管道, 就可以通过python阻塞读取日志了,
不过这里python脚本要先阻塞读取, 再kill -HUP掉nginx, 让配置重新生效.
此后的处理就可以按照需要的配置来进行了,
处理后的日志数据存放在sqlite3数据库里, 方便进行查询和索引.
每条进来的日志先写在内存的数据库里, 达到一定数目时再用事务写到硬盘的实体表里.
昨天晚上大概写了个DEMO出来, 在本地调试管道,
发现一切都正常, 唯有打开事务后插入要出错,
后来Google了下, 发现也有人提到这个.
按照方法修正了, 就ok了.
继续完善了准备拿到209生产环境实践下, 然后扔到svn repoistory上去.