首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongodb cursor.toArray()已成为瓶颈

Mongodb cursor.toArray()已成为瓶颈
EN

Stack Overflow用户
提问于 2014-12-26 01:33:19
回答 1查看 2.3K关注 0票数 2

Mongodb cursor.toArray()已经成为瓶颈。我需要处理200万个文档并输出到一个文件中。我一次处理10,000次,使用跳过和限制选项,但它没有完全工作。所以我在找一个内存效率更高的司机。我还试着一次处理10个文档,这需要花费很长时间,所以我不确定.each()是否能解决这个问题?而且,每次我们检索单个文档时,.nextObject是否都会进行网络调用?

Node.js的内存也有1.5GB的内部限制,所以我不确定如何处理这些文档。我确实相信,只要在应用程序级别正确地使用mongo游标,而不进行任何数据库级别的聚合,就可以解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2014-12-26 14:35:33

不需要保存所有文档,因为您可以将每个文档写入文件,因为它是从服务器接收的。如果将游标与.eachbatchSize一起使用,则可以将每个文档写入文件,在客户端仅保存batchSize文档:

代码语言:javascript
运行
复制
db.collection.find(query, { "batchSize" : 100 }).each(writeToFile)

来自Node.js驱动程序API文档

如果指定批处理大小,游标将仅在任何给定时间保存批处理大小元素的最大值。

使用跳过和限制来打破结果是个坏主意。具有跳过n和限制m的查询通常必须扫描至少n + m文档或索引条目。如果使用跳过和限制进行分页,则最终使查询必须在(结果/限制总数)的大小上进行二次运算,例如,对于1000个文档和100个限制,扫描的文档总数将为

代码语言:javascript
运行
复制
100 + 200 + 300 + 400 + ... + 1000 = 100 (1 + 2 + 3 + 4 + ... + 10)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27652063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档