爬虫查重复,数据库占 cpu 超高,怎么解决呢?

2020-06-11 18:49:04 +08:00
 llsquaer

之前写一个爬虫,爬好数据直接就存进 MongoDB 了.存入代码如下

'''

def save(dic):
    if table.find_one(dic):
        print('已经有数据 ,跳过',dic['info_title'])
        return
    table.insert(dic)
    print('保存成功', dic['info_title'])

'''

运行都是正常的..但是我看 cpu 占用的时候 MongoDB 进程已经 80%上下了..有时候还是 100%

刚开始学,,以前一直没想到怎么解决这个问题..基本都是按照上面方法写的.感觉方便.但是随着数据扩大,估计扛不住了.

请问大神是怎么做的呢?提高效率,减少占用.

861 次点击
所在节点    问与答
6 条回复
itskingname
2020-06-11 18:56:09 +08:00
不要用太多的字段去查下。如果一个字段就能查到,那么只用这一个字段。

并且给重复的字段加个索引。
gabon
2020-06-11 19:03:29 +08:00
布隆过滤器了解一下
njshiyanhz
2020-06-12 11:13:50 +08:00
看上去像是用所有字段来去重的;
建议只用 url 或者标题等,能标识该数据唯一的字段进行查询,并把该字段加上索引;
如果还是要用所有字段去重,那就把所有字段的值 md5 一下,拿 md5 查询,索引别忘
sadfQED2
2020-06-12 17:08:07 +08:00
你没加索引吧,另外,只是查重的话考虑布隆过滤器
llsquaer
2020-06-13 10:57:54 +08:00
@njshiyanhz 总共 6 个字段,分析了 6 个字段必须要同时查,,不然会出现某个字段是重复,其他不重复的情况,,会跳过一部分内容,,MongoDB 用的默认的配置,,没研究过怎么建立索引..我去研究下...谢谢..
llsquaer
2020-06-13 10:58:47 +08:00
@sadfQED2 用默认的,还不知道怎么建立索引, 我先去研究下...还有布隆过滤器 ..谢谢.

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

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

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

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

© 2021 V2EX