我从 Node.js 中的 MongoDB 集合返回大量(500k+)文档。它不是为了在网站上显示,而是为了对数据进行一些数字运算。如果我获取所有这些文档,系统就会卡住。有没有更好的方法来获取所有内容?
我认为分页可能有效?
编辑:这已经在主 Node.js 服务器事件循环之外,因此“系统卡住”并不意味着“传入请求未被处理”
最佳答案
详细了解您的情况后,我有一些想法:
在Map/Reduce function in Mongo中尽你所能。 - 也许如果你在 Node 上抛出更少的数据,这可能是解决方案。
也许这么多的数据正在耗尽您系统上的所有内存。您的“卡住”可能是 V8 停止系统进行垃圾收集 (see this SO question) 。您可以使用 V8 标志 --trace-gc 来记录 GC 并证明这个假设。 (感谢 another SO answer about V8 and Garbage collection
分页,就像您建议的那样可能会有所帮助。也许甚至可以将数据进一步拆分到工作队列中(创建一个引用记录 1-10 的工作任务,创建另一个引用记录 11-20 的工作任务,等等)。取决于你的计算
也许会预处理您的数据 - 即:以某种方式为每条记录返回小得多的数据。或者,如果您现在正在使用 ORM,则不使用 ORM 进行此特定计算。确保每条记录中仅包含您需要的数据意味着要传输的数据更少,应用程序所需的内存也更少。
关于node.js - 通过 Node.js 从 MongoDB 返回大量项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298259/