python – 插入数百万个文档 – mongo / pymongo – insert_many
发布时间:2020-12-20 13:12:13 所属栏目:Python 来源:网络整理
导读:mongo / pymongo新手. 目前使用最新的–v3.2.2 看起来insert_many没有按预期执行?我注意到即使在向db.col.insert_many提供生成器时,内存使用率仍然高峰(这使得插入数百万个文档变得困难 – 尽管我确实知道sys.mem应该是集合大小以获得最佳性能,所以在现实也
mongo / pymongo新手.
目前使用最新的–v3.2.2 看起来insert_many没有按预期执行?我注意到即使在向db.col.insert_many提供生成器时,内存使用率仍然高峰(这使得插入数百万个文档变得困难 – 尽管我确实知道sys.mem应该是>集合大小以获得最佳性能,所以在现实也许这不是我应该担心的事情? 我的印象是,如果你将生成器传递给insert_many,pymongo会将插件“缓冲”到16或32mb’块’中? 手动执行此缓冲/分块可解决问题…… 见下文: Example1 =直插入_many(高内存使用 – 2.625 GB) Example2 =’buffered’insert_many(预计[低]内存使用量 – 约300 MB) import itertools from itertools import chain,islice import pymongo client = pymongo.MongoClient() db=client['test'] def generate_kv(N): for i in range(N): yield {'x': i} print "example 1" db.testcol.drop() db.testcol.insert_many(generate_kv(5000000)) def chunks(iterable,size=10000): iterator = iter(iterable) for first in iterator: yield chain([first],islice(iterator,size - 1)) print "example 2" db.testcol.drop() for c in chunks(generate_kv(5000000)): db.testcol.insert_many(c) 有任何想法吗?错误?我用错了吗? 解决方法
我认为这是因为insert_many pymongo需要有一个完整的操作列表,而不是可迭代的.此列表将被发送到MongoDB之后,它将被处理.
>如果您想/需要使用iterable(例如,长文档生成) – 您可以使用简单插入. 这是数据库的正常行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |