node.js连接中的mongodb

node.js连接中的mongodb,node.js,mongodb,Node.js,Mongodb,在为节点使用本机mongo.db驱动程序时,我应该为每个应用程序、每个“服务”页面打开1个连接,还是在需要时打开并关闭它 我见过一些,但我知道项目一直在发展中,所以我想知道它现在的状态如何。这不是一个会改变的情况;与使用已建立的连接相比,打开与服务器的新连接的性能要差一些 注意:这是服务器应用程序的一般情况,并不特定于MongoDB 典型的间接费用包括: 将服务器名称解析为IP 建立到服务器的网络连接 服务器上分配的每连接内存 特别是对于MongoDB: 打开一个新连接意味着服务器上有一个

在为节点使用本机mongo.db驱动程序时,我应该为每个应用程序、每个“服务”页面打开1个连接,还是在需要时打开并关闭它


我见过一些,但我知道项目一直在发展中,所以我想知道它现在的状态如何。

这不是一个会改变的情况;与使用已建立的连接相比,打开与服务器的新连接的性能要差一些

注意:这是服务器应用程序的一般情况,并不特定于MongoDB

典型的间接费用包括:

  • 将服务器名称解析为IP
  • 建立到服务器的网络连接
  • 服务器上分配的每连接内存
特别是对于MongoDB:

  • 打开一个新连接意味着服务器上有一个新的套接字连接和线程
  • 每个连接(从MongoDB 2.0开始)在服务器上分配1Mb的RAM(另请参见:)
  • 对打开的文件/连接有每个进程的限制(另请参见:)

对于MongoDB Node.js驱动程序,您可以通过在构造函数中设置来利用连接池。一篇博客文章,举了一个例子:。

并非每台服务器都是这样。有些服务器在每个连接中只处理一个并发查询(例如postgres),因此您可能需要打开另一个查询。有时,如果您有一个长期未使用的连接,您会为其他可选客户端保留一个资源。@YaronNaveh:连接设置和相关资源使用的一般性能问题在中仍然存在。另一个问题是应用程序或驱动程序如何管理重用/关闭连接以及并发性。将资源使用降至最低的典型DB驱动程序概念是使用维护一组可供重用的活动连接的。池允许您在每次需要时打开连接(如果幸运的话,您可以从池中打开一个连接)。mongo让我惊讶的是,你为整个应用程序保留了一个全局连接。mongo中有什么特别的地方允许这样做?b/c mongo是否没有需要不同连接的交易记录?是否b/c mongo在同一连接上执行并发请求更高效?