lixiang0 / WEB_KG

爬取百度百科中文页面,抽取三元组信息,构建中文知识图谱
http://kg.rubenxiao.com
928 stars 189 forks source link

如何提高性能,爬取一段时间后节点增加速度变慢 #21

Open Youarerare opened 4 years ago

Youarerare commented 4 years ago

如题,neo4j数据库中大概花了3个小时达到9w个节点,然后节点增加得就非常缓慢了,该如何优化呢?

速率曲线大概是这样 image

因为部署在阿里云主机上内存有限,用bloomfilter替代了代码中的set去重,并-s JOBDIR= 在磁盘上

lixiang0 commented 4 years ago

set的方式去重是存在性能问题。 可以改成字典树,比如前缀树的方式。

Youarerare commented 4 years ago

set的方式去重是存在性能问题。 可以改成字典树,比如前缀树的方式。

这个set对item_name去重可不可以直接去掉呢,因为 url那里已经去过一次重了,而url貌似正是'https://baike.baidu.com/item/'+item_name这种形式的

Youarerare commented 4 years ago

还有对value的replace("/n",'') ,有些节点最后还留有一个空格去不掉,这样在neo4j看起来一样,但是按name找不到,因为name后面实际上还有个空格,换成strip() 比较好。

lixiang0 commented 4 years ago

set的方式去重是存在性能问题。 可以改成字典树,比如前缀树的方式。

这个set对item_name去重可不可以直接去掉呢,因为 url那里已经去过一次重了,而url貌似正是'https://baike.baidu.com/item/'+item_name这种形式的

不可以的,因为有重名现象,所以必须使用完整的URL作为去重

Youarerare commented 4 years ago

set的方式去重是存在性能问题。 可以改成字典树,比如前缀树的方式。

这个set对item_name去重可不可以直接去掉呢,因为 url那里已经去过一次重了,而url貌似正是'https://baike.baidu.com/item/'+item_name这种形式的

不可以的,因为有重名现象,所以必须使用完整的URL作为去重

scrapy好像默认使用 scrapy.dupefilter.RFPDupeFilter 对 url进行去重了呀,应该不需要再自己去重了吧

lixiang0 commented 4 years ago

set的方式去重是存在性能问题。 可以改成字典树,比如前缀树的方式。

这个set对item_name去重可不可以直接去掉呢,因为 url那里已经去过一次重了,而url貌似正是'https://baike.baidu.com/item/'+item_name这种形式的

不可以的,因为有重名现象,所以必须使用完整的URL作为去重

scrapy好像默认使用 scrapy.dupefilter.RFPDupeFilter 对 url进行去重了呀,应该不需要再自己去重了吧

重名不是URL重复,而是item/1和item/2这样的重复,这两个item重名,但是ID不一样。所以单纯靠item或者url是不行的。