最近公司爬虫出现性能瓶颈,大概问题如下:
爬虫采用分布式框架Celeyr作为分布式任务调度,同时开启了48个并发,去下载48个页面,每个页面本身能够解析出10条记录。以MySQL作为持久存储,在初始阶段通过unique索引作为数据去重。当单表数据达到200W左右的时候发现爬虫速度降下来了。
通过对整个流程分析,最终发现问题在数据插入阶段。这里导致数据插入阶段速度很慢的原因是使用MySQL unique索引作为去重键,当数据量上去之后,维护整个索引的成本不断增加,MySQL索引使用B-Tree,B树(B-Tree)是一种自平衡的树,能够保证数据有序.同时它还保证了在查找、插入、删除等操作时性能都能保持在O(logn)O(logn).需要注意的一点是,并不是一棵自平衡的二叉查找树,它拥有多个分叉,且为大块数据的读写操作做了优化,同时它也可以用来描述外部存储(支持对保存在磁盘或者网络上的符号表进行外部查找)。所以在插入的时候成本太高,因此此处将该索引删除,在后期通过SQL语句去重这种方式大大提升了爬虫性能。
领取专属 10元无门槛券
私享最新 技术干货