gpt4 book ai didi

node.js - Nodejs mongodb 连接/断开模式

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:57 25 4
gpt4 key购买 nike

我使用 sails.js 和 mongodb 作为我的后端。我听说为每个请求连接到数据库可能非常昂贵,这就是为什么其他非单线程编程语言为数据库保留一个连接池,对吧?所以我想知道

  1. Nodejs 是否使用数据库连接池?(我想我已经有了一个答案:“否”,只是为了确定一下)
  2. 由于我使用 sails-mongo 作为 mongodb 驱动程序,每次我对 mongodb 执行一些指令时,它是否都会建立与 mongodb 的新连接?或者它只是保留一个连接并每次都重复使用它?
  3. 假设 sails-mongo 每次都连接到 mongodb,然后在完成后断开连接,如果无法建立连接怎么办?这会堵塞 Node 线程,从而导致所有后续请求都无法处理吗?我很担心...

最佳答案

你的假设在 1 处就站不住脚了,因为我知道的每个 Nodejs 驱动程序(包括 sails 中的常见驱动程序)都实现了 node-native-driver这当然会初始化 connection pool (默认 5 个连接)。

对于第 2 点,连接实际上是在应用程序启动时建立的,并且模型定义利用底层的“Collection”对象。

对于 3,除了通常被“揭穿”之外,nodejs 的整体概念一般是它在事件引擎上运行,因此实际上所有“长时间运行的 IO”都在回调上工作,以便在这些 IO 调用“花时间”响应时其他代码可以执行。如果有的话,如果连接因任何原因“消失”,您会收到错误消息。

我通常建议“搜索”“nodejs 如何工作?”向您补充一些您似乎不太理解的概念。

因此,不仅仅是 MongoDB 的情况,由于创建连接的固有成本,所有优秀的数据库驱动程序几乎总是实现连接池,并且异步环境经过专门“工具化”,因此它们在执行外部 IO 等操作时不会“阻塞”。

关于node.js - Nodejs mongodb 连接/断开模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com