目前使用最新的–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 itertoolsfrom itertools import chain,isliceimport pymongoclIEnt = 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(例如,长文档生成) – 您可以使用简单插入.
>如果您有大量适合RAM的文档 – 您可以发送批量插入(insert_many).
>在其他情况下 – 只需将最大的块分开即可发送到MongoDB.
这是数据库的正常行为.
总结以上是内存溢出为你收集整理的python – 插入数百万个文档 – mongo / pymongo – insert_many全部内容,希望文章能够帮你解决python – 插入数百万个文档 – mongo / pymongo – insert_many所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)