Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 处理cpu限制的操作_Node.js_Mongodb - Fatal编程技术网

Node.js 处理cpu限制的操作

Node.js 处理cpu限制的操作,node.js,mongodb,Node.js,Mongodb,我们知道Node.JS以异步单线程方式工作。 我已经和MongoDB合作了几个月了,老实说,我发现查询语言没有那么强大。聚合框架带来了重要的特性,但是像内部查询这样的SQL特性还很遥远(注意,我不是在谈论大规模连接)。 因此,我发现自己多次用糟糕的结果集遍历(foreach)来弥补这一不足,以形成我想要的结果 显然,对于大型数据集来说,这是不可行的。在Node.JS环境中,这些事情是一场真正的灾难,因为我阻塞了整个服务器来服务单个请求 如何处理这些cpu受限的任务?理想情况下,您不需要重新生成结

我们知道Node.JS以异步单线程方式工作。 我已经和MongoDB合作了几个月了,老实说,我发现查询语言没有那么强大。聚合框架带来了重要的特性,但是像内部查询这样的SQL特性还很遥远(注意,我不是在谈论大规模连接)。 因此,我发现自己多次用糟糕的结果集遍历(foreach)来弥补这一不足,以形成我想要的结果

显然,对于大型数据集来说,这是不可行的。在Node.JS环境中,这些事情是一场真正的灾难,因为我阻塞了整个服务器来服务单个请求


如何处理这些cpu受限的任务?

理想情况下,您不需要重新生成结果。您设计了一个MongoDB可以处理的查询,以获得您想要的结果。。。也许最好是提出一个与特定问题相关的问题,因为你可能遗漏了一些东西


但假设您确实发现了一个异常(这是不可能的),您需要构建一个庞大的数据集来解决瓶颈问题。这个操作很有可能被优化,所以再次…你应该提出一个与这个问题相关的问题,看看可以做些什么改进


假设你确实是一个非常罕见的例外,所有这些都不适合你。您有几个(更复杂的)选项可供选择:

  • 或者-允许您将独立进程作为并发的一种形式
  • 或者-消息队列是允许并发的另一个工具,请注意,还有其他库可用
  • 或者-如果您对SQL更在行,请迁移回SQL。编写一个脚本,从MongoDB读取数据并将其插入到新数据库中,然后编写所需的查询


  • 请注意,上面的选项1和2还允许您与更适合处理大型数据集的其他语言进行交互。

    实际上,整个Node.js体系结构基于单线程事件循环,因此任何CPU限制的函数都将阻塞整个服务器,直到函数完成其操作

    可能的解决办法包括

    • 将您的服务划分为几个并行node.js应用程序
    • 使用多个核,并在不同的核上执行并行工作
    看看这篇文章:。

    这就是一个例子。最终目的(问题中未解释)是获取与每个标签相关的所有文档。基本上是一个SQL
    GROUP BY
    ,除了docBs从引用的docA继承标记之外。我用一个疯狂的async.series解决了这个问题,在最后一步中有3个步骤和3个嵌套的foreach