python爬虫数据库压力测试_论Python爬虫与MySQL数据库交互的坑

1.爬虫和关系数据库的交互次数能减少就减少。

之前由于爬虫出了bug,导致错误日志持续膨胀耗尽服务器空间,导致MySQL数据库无法添加数据,于是乎想把爬虫中间过程的所有数据(图片url等待队列)放进数据库。爬虫的爬取速度明显下降,并且数据库操作过程出错(经常发生事务锁定时间过长强退这种情况)。之前也有想到连接次数时间过长这种情况,把数据库操作能合并的合并了,删除和添加都是批量操作。结果只解决了爬取时间过长的问题,事务锁定过久的问题还有。

之后改回使用文件储存图片url队列(定时清除文件),速度回到了以前的水平,并且MySQL的事务问题不再出现。

MySQL数据库类型是innoDB,而innoDB对每条语句都包装成事务,没有索引的情况下还会使用表锁,严重影响并发量和每次操作的锁定时间。

解决方法有以下几个∶

0.不要过于依赖MySQL数据库,实在需要搭分布式调度队列,最好使用redis或者rabbitMQ之类的中间件。redis没有硬性的事务锁定,只有SETNX命令显式指定悲观锁。爬虫的业务一般只用到查询、删除和添加这三种,更新很少用,悲观锁可以不用。

1.使用mongoDB这种非关系型数据库,或者使用MyISAM的MySQL数据库。非关系型的mongoDB数据库对高并发输入友好,并且同样支持索引和结构化查找。这点就非常适合爬虫数据存储。

2.做好数据索引。程序每天都要做过期数据删除操作,可以根据数据的过期时间做个索引,每次操作可以排除某个时间点之前的数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值