我将使用纯node.js创建一个web-api,它在SQL Server上执行CRUD操作并将结果返回给客户端。查询几乎长时间运行(大约3秒),每秒请求很高(大约30 rps)。我正在使用带有回调函数的mssql包,一旦准备好就返回结果。我已经阅读了很多关于节点的知识,我知道它非常适合IO密集型而不是CPU密集型应用程序,并且不应该阻止事件循环,因为它是单线程的......
我的问题:Node.js是否适合这种(SQL密集型)场景?在这种情况下使用Node.js有任何性能问题吗?谢谢
Node.js已经全部使用非阻塞代码到几乎所有在Node.js API中阻塞的函数都被标记为Sync
的程度。
我见过的每个数据库驱动程序都遵循需要回调的模型,使用Promises或in some cases both。
作为Node.js开发人员,您必须仔细阅读文档以查找任何可能阻塞的调用,并且需要使用正确的并发方法来处理异步操作。通常情况下,您不需要过多地关注任何给定操作的详细信息,但在做慢速操作时您应该仍然要小心。以较小的块(例如,逐行)处理数据,而不是一次处理所有数据。
即使它只是单线程,Node.js在负载下也可以很好地执行,因为它可以非常快速地在异步操作之间切换。您还可以通过让多个Node.js进程非常容易并行工作来扩展,特别是如果您通过负载均衡器使用消息总线或HTTP类型扇出。