python – 插入数百万个文档 – mongopymongo – insert_many

python – 插入数百万个文档 – mongopymongo – insert_many,第1张

概述mongo / pymongo新手. 目前使用最新的–v3.2.2 看起来insert_many没有按预期执行?我注意到即使在向db.col.insert_many提供生成器时,内存使用率仍然高峰(这使得插入数百万个文档变得困难 – 尽管我确实知道sys.mem应该是>集合大小以获得最佳性能,所以在现实也许这不是我应该担心的事情? 我的印象是,如果你将生成器传递给insert_many,pymon 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 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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存