上周接了个需求,需要统计爬虫的一些数据,众所周知scrapy提供了一些统计数据的生成,如任务数:scheduler/dequeued,记录错误数:log_count/ERROR……,这不包括数据处理的数据,当然你其实可以在pipeline魔改加数据统计(只是我的一个思路,不知道能否实行).
然而,早在今年初期,我就对公司的爬虫系统做了拆分,将数据处理部分,拆分出来,作为一个独立的模块运行,这样既降了耦合,又提高了爬虫的速度.那么我需要在数据处理模块来进行一些数据统计,标记哪些数据做了处理,哪些没有变化.
思路:刚开始,我的想法是想使用flink做一个实时统计加计算,后来我转念一想,杀鸡焉用牛刀,flink应该用来处理更高难度的任务. MYSQL只适合做阶段性的结果存储,所以我把目光投向了Redis,众所周知,Redis这类Memcached应用,是特别适合做实时读取这样的操作的。
确定好使用Redis之后,就是选取合适的数据类型,熟悉Redis的朋友都知道,Redis提供了五种数据类型:string,hash,list,set及zset(sorted set). 一般爬虫过滤会用到hash类型.如果我想做一个实时统计的话,自由的添加数据,最好Redis本身的语法就能选一些有条件的数据,那无疑是ZSET了.
相比SET,ZSET加了一个SCORES,也就是分数字段,利用它可以对集合中的数据进行排序,Amzing,这正是我想要的,通过开发API,我可以知道哪些数据做了改动,哪些数据的某些特征明显.
在熟悉ZSET的一些操作之后,就可以着手开发了.
最后确定在数据处理模块加入redis的操作,进行实时统计,再开发API对接redis,然后,将阶段性成果存入mysql.
以上只是个人拙见,如果你有好的想法,欢迎在评论中留言告知我.