本帖最后由 nipusa999 于 2012-11-06 11:33:03 编辑

解决方案 »

  1.   

    可以分开处理,spider只负责抓取页面,不管重复与否,因为判断重复的工作跟抓取无关,抓取产生临时表来存放结果。
    判断是否重复发工作应该交给数据库本身,用proc来处理,在抓取工作结束后由proc去处理。以谁为主键不重要,重要的是只对比url,形同的直接update,不同的由临时表写入物理表,然后删除临时表。为了加快处理速度,你可以规定临时表存放数据的条数。
      

  2.   

    分开处理
    无法这样做。比如我发现了一条网址,不可能入到某个对列。等单独线程或函数去判断,因为爬虫须要等这条网址是否重复判断完成。比如这条网址还未判断是否重复的情况下另一页面有链接到此网址。此时就会重复。
    谁为主键不重要
    很重要。
    临时表
    不太明白有何意义。  网址初步估计会上百亿条。我从未处理过如此大数据量。如果以id数字为主键到会快一些。但问题是这个检测重复得须要url_md5。不然存为原始url会更加慢
      

  3.   


    不至于复杂到百度google那样。目前其它问题解决 。只有这上网址问题。
      

  4.   

    如果只是检查主键是否存在,可以考虑把主键单放一个NOSQL中,这样判断重复可以更快
      

  5.   

    MD5不是顺序值,用它作主键,会引起大量的IO操作。因为主键是物理结构顺序的。每次添加都得重新排序,不累死才怪。
      

  6.   

    我指的是网址处理这步慢。其它地方不慢。
    我明白2楼的意思
    2楼: 抓取,入临时表,判决是否有重复。入对列表,从对列表取网址。抓取
    现在:抓取,判决是否有重复。入对列表,从对列表取网址。抓取实际是还是要判断,我指的是如何优化一下。主要就慢在判断上。也就是10楼说的问题。另外一个proc来判断没有意义。一样是慢。相对来说我现在的模式还少一步工作。能找到的资料就是布隆过滤器,8楼与10楼说的比较重点。