mongo批量插入数据和长链接问题

1.大批量数据插入:
当爬虫获取的数据量较大时,一条一条的写入MongoDB会过于消耗资源。
这时候就需要用到insert_many()方法,把数据放入列表中并批量插入,但是如果你为了数据不被重复建立了MongoDB的唯一索引,就可能会导致部分数据无法写入。
因为insert_many()默认是按序写入,一条数据写入失败,后面的数据就无法写入了。所以需要修改默认参数ordered。
当ordered=False时,数据就会被乱序并行插入,所以每个字典的插入操作互不影响

data_list = client.find({},{"_id":0})
client.insert_many(data_list,ordered=False)

2.关于 pymongo.errors.CursorNotFound: Cursor not found 错误的解决方法:

datas = db[‘demo’].find({},{"_id": 0})
for data in datas:
do_something(data)

该问题出现的原因是do_something函数耗时过长,在cursor上长时间没有进行操作,引发cursor在mongodb服务端超时。
解决方案:
设置no_cursor_timeout = True,永不超时,游标连接不会主动关闭,需要手动关闭
datas = db[‘demo’].find({},{"_id": 0},no_cursor_timeout = True)
for data in datas:
do_something(data)
datas.close()

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值