处理cpu绑定操作

我们知道Node.JS以asynchronous单线程的方式工作。 我已经使用了MongoDB几个月了,老实说,我发现查询语言不是很强大,很好。 聚合框架带来了重要的function,但像内部查询SQLfunction是非常远的(注意我不是说大量的联接)。 所以我发现自己多次提供这个缺乏可怕的结果集遍历(foreach),以塑造我想要的结果。

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

你如何处理这种CPU绑定的任务?

实际上整个Node.js架构都是基于单线程的事件循环,所以任何CPU绑定的函数都会阻塞整个服务器,直到函数完成操作。

可能的解决方法可能是

  • 把你的服务分成几个并行的node.js应用程序;
  • 使用多核并行工作在不同核心上执行。

看看这篇文章: 为什么你应该使用Node.js CPU边界任务 。

理想情况下,你不重build结果。 您devise了一个MongoDB可以处理的查询,以获得您想要的结果…最好打开一个与该特定问题有关的问题,因为可能有些东西是您错过的。


但是让我们假设你实际上已经发现了一个exception(这是不太可能的),你需要build立一个大的数据瓶颈。 有一个很好的机会可以再次优化这个操作…你应该打开一个有关这个问题的问题,看看可以做什么改进。


可以说,你确实是一个非常罕见的例外,所有上述不会为你工作。 你有几个(更复杂的)选项可供select:

  1. 集群或subprocess – 允许您将独立进程作为并发的一种forms。
  2. RabbitMQ或ZeroMQ – 消息队列是允许并发性的另一种工具,请注意还有其他库可用
  3. MySQL或Postgres – 如果你更好的话,迁移回SQL。 编写一个从MongoDB读取的脚本,并执行INSERT到你的新数据库,然后写你想要的查询

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