zhangslob/zhangslob.github.io

MongoDB保存数据的优化方法 | 小歪的博客

Opened this issue · 7 comments

https://zhangslob.github.io/2018/12/18/MongoDB%E4%BF%9D%E5%AD%98%E6%95%B0%E6%8D%AE%E7%9A%84%E4%BC%98%E5%8C%96%E6%96%B9%E6%B3%95/

这是崔斯特的第七十九篇原创文章
MongoDB保存数据的优化方法 (๑• . •๑)

请问博主,您在《Scrapy中如何提高数据的插入速度》这篇博文中的MongoDB 索引部分为什么添加索引放在了open_spider()方法里面而不是在process_item()方法里?

@dta0502
请问博主,您在《Scrapy中如何提高数据的插入速度》这篇博文中的MongoDB 索引部分为什么添加索引放在了open_spider()方法里面而不是在process_item()方法里?

process_item()每次插入数据时就会创建一次索引,open_spider()只会创建一次

@zhangslob
感谢博主解答!
意思就是说open_spider()方法是只会调用一次,那么如果我用了process_item()方法创建索引,会有什么后果呢,频繁调用性能下降?

@dta0502
@zhangslob
感谢博主解答!
意思就是说open_spider()方法是只会调用一次,那么如果我用了process_item()方法创建索引,会有什么后果呢,频繁调用性能下降?

每插入一次数据就会调用一次process_item(),数据量大会造成数据库压力大,甚至挂掉

@zhangslob

@dta0502
@zhangslob
感谢博主解答!
意思就是说open_spider()方法是只会调用一次,那么如果我用了process_item()方法创建索引,会有什么后果呢,频繁调用性能下降?

每插入一次数据就会调用一次process_item(),数据量大会造成数据库压力大,甚至挂掉

这是《精通scrapy网络爬虫》书中的一个实例:

     def process_item(self, item, spider):
        collection = self.db[spider.name]
        post = dict(item) if isinstance(item, Item) else item
        collection.insert_one(post)
        return item

这样的写法合理吗, collection = self.db[spider.name]写在process_item()方法里面。

@dta0502

@zhangslob

@dta0502
@zhangslob
感谢博主解答!
意思就是说open_spider()方法是只会调用一次,那么如果我用了process_item()方法创建索引,会有什么后果呢,频繁调用性能下降?

每插入一次数据就会调用一次process_item(),数据量大会造成数据库压力大,甚至挂掉

这是《精通scrapy网络爬虫》书中的一个实例:

     def process_item(self, item, spider):
        collection = self.db[spider.name]
        post = dict(item) if isinstance(item, Item) else item
        collection.insert_one(post)
        return item

这样的写法合理吗, collection = self.db[spider.name]写在process_item()方法里面。

没事啊,这又不是创建索引的操作

@zhangslob

@dta0502

@zhangslob

@dta0502
@zhangslob
感谢博主解答!
意思就是说open_spider()方法是只会调用一次,那么如果我用了process_item()方法创建索引,会有什么后果呢,频繁调用性能下降?

每插入一次数据就会调用一次process_item(),数据量大会造成数据库压力大,甚至挂掉

这是《精通scrapy网络爬虫》书中的一个实例:

     def process_item(self, item, spider):
        collection = self.db[spider.name]
        post = dict(item) if isinstance(item, Item) else item
        collection.insert_one(post)
        return item

这样的写法合理吗, collection = self.db[spider.name]写在process_item()方法里面。

没事啊,这又不是创建索引的操作

好,谢谢博主!