爬虫程序的优化

来源:互联网 发布:xml与java 编辑:程序博客网 时间:2024/04/30 08:53

维护人员近期反应我写的爬取某网站数据的程序执行比较慢,看了一下运行爬虫的机器的状态,磁盘IO 100%了,于是想优化一下,减少磁盘IO,关于减少磁盘IO的最容易想到的方法就是内存缓冲区,我原来的程序设计的是每抓一条数据都会插入数据库或者更新数据库对应的数据,由于资源有限,数据库和爬虫程序都放在了一台机器上(更坑爹的是机器还很烂),多个城市的爬虫程序一起执行的话,磁盘的IO明显就捉急了。具体的方案:

用一个LIST数组用来缓冲爬取的数据,暂定缓冲1000条数据(具体应该缓冲多少再一次提交能达到最佳性能这个就需要测试了),缓冲区满了就一次性提交给数据库去处理(拷贝该LIST单独开一个线程去提交数据库同时清除缓冲LIST重新接受新数据?还是在当前线程中提交缓冲LIST给数据库处理等处理完后再清除缓冲LIST继续接受后续数据?前者占用更多的内存但提高了效率,后者则反之,先用后者把。),待数据库处理完后,list.clear()清楚掉缓冲区的数据,准备接受后面的数据。这样1000条数据就出发一次磁盘IO,比原来的每一条数据触发一次磁盘IO的效率应该会高不少。

总结:以前总是会去考虑内存的不足,以后也应该考虑考虑磁盘IO资源的紧张了。

0 0
原创粉丝点击