sql查询是否会阻塞node.js事件循环?

时间:2018-08-31 12:07:00

标签: sql-server node.js event-loop

我将使用纯node.js创建一个Web API,该API在SQL Server上执行CRUD操作并将结果返回给客户端。查询几乎要长时间运行(大约3秒),每秒请求量很高(大约30 rps)。我将mssql包与回调函数一起使用,以在准备好后返回结果。 我已经阅读了很多有关节点的信息,我知道它非常适合于IO密集型而不是CPU密集型应用程序,并且不应阻塞事件循环,因为它是单线程的...

我的问题:Node.js是否适合这种(SQL密集型)方案?在这种情况下使用Node.js是否存在任何性能问题? 谢谢

1 个答案:

答案 0 :(得分:0)

Node.js全面采用了非阻塞代码,以至于Node.js API中阻塞的几乎所有函数都将被标记为Sync

我见过的每个数据库驱动程序都遵循要求使用Promises或in some cases both进行回调的模型。

作为Node.js开发人员,您必须仔细阅读文档以查找可能阻塞的调用,并且需要采用正确的并发方法来处理异步操作。通常,您无需过于担心任何给定操作的时间长短的细节,但是在执行缓慢的操作时仍应小心。以较小的块(例如,逐行)处理数据,而不是一次处理所有数据。

即使它只是单线程的,Node.js在负载下也可以很好地执行,因为在异步操作之间进行切换非常快。您还可以通过轻松地并行处理多个Node.js进程来进行扩展,尤其是当您通过负载平衡器使用消息总线或HTTP类型的扇出时。