爬虫抓取数据,每次都要去数据库匹配有没有更新,有什么优化思路吗?

2018-08-15 09:44:15 +08:00
 nyse

写了个爬虫,不定时运行抓取某列表,循环列表每一条目,再读取数据库数据库对应条目,判断是否存在,不存在则插入,存在则判断哪些字段有更新,再更新上去。

虽然数据库服务器专门给这爬虫用,也没有什么性能问题,但是感觉这样比较死板,请问大家也没有遇到过类似的需求,是怎么处理的?

1993 次点击
所在节点    问与答
4 条回复
liuweisj
2018-08-15 09:59:17 +08:00
把所有需要更新的内容拼接在一起做 hash,用 BloomFilter 判断是否更新
jookr
2018-08-15 10:05:09 +08:00
采集的那个 URL 或者文件名肯定不是重复的吧?设置成唯一
```
INSERT INTO `log` (`target_id`,`mobile`,`content,`ctime`) VALUES ('13','13888888888','不确定的内容',unix_timestamp(now())) ON DUPLICATE KEY UPDATE `content`='不确定的内容',`utime`=unix_timestamp(now());
```
就可以不存在则插入,存在则更新了。
nyse
2018-08-15 10:12:47 +08:00
@jookr #2 你这样只能解决判断是否存在的问题,但存在的话每次都更新,而没有判断是否有更新。
jookr
2018-08-15 10:33:55 +08:00
结合 1 楼的方法 有更新了就更新 utime

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/479895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX