V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
llsquaer
V2EX  ›  问与答

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

  •  
  •   llsquaer · 2020-06-11 18:49:04 +08:00 · 856 次点击
    这是一个创建于 1436 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前写一个爬虫,爬好数据直接就存进 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%

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

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

    6 条回复    2020-06-13 10:58:47 +08:00
    itskingname
        1
    itskingname  
       2020-06-11 18:56:09 +08:00
    不要用太多的字段去查下。如果一个字段就能查到,那么只用这一个字段。

    并且给重复的字段加个索引。
    gabon
        2
    gabon  
       2020-06-11 19:03:29 +08:00 via Android
    布隆过滤器了解一下
    njshiyanhz
        3
    njshiyanhz  
       2020-06-12 11:13:50 +08:00
    看上去像是用所有字段来去重的;
    建议只用 url 或者标题等,能标识该数据唯一的字段进行查询,并把该字段加上索引;
    如果还是要用所有字段去重,那就把所有字段的值 md5 一下,拿 md5 查询,索引别忘
    sadfQED2
        4
    sadfQED2  
       2020-06-12 17:08:07 +08:00 via Android
    你没加索引吧,另外,只是查重的话考虑布隆过滤器
    llsquaer
        5
    llsquaer  
    OP
       2020-06-13 10:57:54 +08:00
    @njshiyanhz 总共 6 个字段,分析了 6 个字段必须要同时查,,不然会出现某个字段是重复,其他不重复的情况,,会跳过一部分内容,,MongoDB 用的默认的配置,,没研究过怎么建立索引..我去研究下...谢谢..
    llsquaer
        6
    llsquaer  
    OP
       2020-06-13 10:58:47 +08:00
    @sadfQED2 用默认的,还不知道怎么建立索引, 我先去研究下...还有布隆过滤器 ..谢谢.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1937 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:45 · PVG 08:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.