node.js - 通过 Node.js 从 MongoDB 返回大量项目

标签 node.js mongodb bigdata

我从 Node.js 中的 MongoDB 集合返回大量(500k+)文档。它不是为了在网站上显示,而是为了对数据进行一些数字运算。如果我获取所有这些文档,系统就会卡住。有没有更好的方法来获取所有内容?

我认为分页可能有效?

编辑:这已经在主 Node.js 服务器事件循环之外,因此“系统卡住”并不意味着“传入请求未被处理”

最佳答案

详细了解您的情况后,我有一些想法:

  1. Map/Reduce function in Mongo中尽你所能。 - 也许如果你在 Node 上抛出更少的数据,这可能是解决方案。

  2. 也许这么多的数据正在耗尽您系统上的所有内存。您的“卡住”可能是 V8 停止系统进行垃圾收集 (see this SO question) 。您可以使用 V8 标志 --trace-gc 来记录 GC 并证明这个假设。 (感谢 another SO answer about V8 and Garbage collection

  3. 分页,就像您建议的那样可能会有所帮助。也许甚至可以将数据进一步拆分到工作队列中(创建一个引用记录 1-10 的工作任务,创建另一个引用记录 11-20 的工作任务,等等)。取决于你的计算

  4. 也许会预处理您的数据 - 即:以某种方式为每条记录返回小得多的数据。或者,如果您现在正在使用 ORM,则不使用 ORM 进行此特定计算。确保每条记录中仅包含您需要的数据意味着要传输的数据更少,应用程序所需的内存也更少。

关于node.js - 通过 Node.js 从 MongoDB 返回大量项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8298259/

相关文章:

javascript - 在 Puppeteer 中从 page.evaluate 获取元素?

javascript - Node.js 需要回调函数,但得到了一个 [object Object]

javascript - MongoDB 中的日期和时间错误

hadoop - 如果添加到 zookeeper 的 master 之一关闭,则事件 master 不接受新申请

PERL:跳转到巨大文本文件中的行

node.js - Common.js 和 Node.js 的工厂模式

node.js - 如何在 ubuntu 重启时永久登录运行 node.js 进程?

node.js - Heroku 连接 MONGODB 图集

php - Upsert - php mongodb- 无法插入新记录

hadoop - 在hadoop中,有什么方法可以获取hdfs block 的底层文件系统文件名吗?