Node.js 处理cpu限制的操作
我们知道Node.JS以异步单线程方式工作。 我已经和MongoDB合作了几个月了,老实说,我发现查询语言没有那么强大。聚合框架带来了重要的特性,但是像内部查询这样的SQL特性还很遥远(注意,我不是在谈论大规模连接)。 因此,我发现自己多次用糟糕的结果集遍历(foreach)来弥补这一不足,以形成我想要的结果 显然,对于大型数据集来说,这是不可行的。在Node.JS环境中,这些事情是一场真正的灾难,因为我阻塞了整个服务器来服务单个请求Node.js 处理cpu限制的操作,node.js,mongodb,Node.js,Mongodb,我们知道Node.JS以异步单线程方式工作。 我已经和MongoDB合作了几个月了,老实说,我发现查询语言没有那么强大。聚合框架带来了重要的特性,但是像内部查询这样的SQL特性还很遥远(注意,我不是在谈论大规模连接)。 因此,我发现自己多次用糟糕的结果集遍历(foreach)来弥补这一不足,以形成我想要的结果 显然,对于大型数据集来说,这是不可行的。在Node.JS环境中,这些事情是一场真正的灾难,因为我阻塞了整个服务器来服务单个请求 如何处理这些cpu受限的任务?理想情况下,您不需要重新生成结
如何处理这些cpu受限的任务?理想情况下,您不需要重新生成结果。您设计了一个MongoDB可以处理的查询,以获得您想要的结果。。。也许最好是提出一个与特定问题相关的问题,因为你可能遗漏了一些东西
但假设您确实发现了一个异常(这是不可能的),您需要构建一个庞大的数据集来解决瓶颈问题。这个操作很有可能被优化,所以再次…你应该提出一个与这个问题相关的问题,看看可以做些什么改进
假设你确实是一个非常罕见的例外,所有这些都不适合你。您有几个(更复杂的)选项可供选择:
请注意,上面的选项1和2还允许您与更适合处理大型数据集的其他语言进行交互。实际上,整个Node.js体系结构基于单线程事件循环,因此任何CPU限制的函数都将阻塞整个服务器,直到函数完成其操作 可能的解决办法包括
- 将您的服务划分为几个并行node.js应用程序李>
- 使用多个核,并在不同的核上执行并行工作
GROUP BY
,除了docBs从引用的docA继承标记之外。我用一个疯狂的async.series解决了这个问题,在最后一步中有3个步骤和3个嵌套的foreach