2012-07-26 45 views
1

当为节点使用本地mongo.db驱动程序时,是否应该为每个应用程序打开1个连接,每页“serve”,还是每当需要时打开并关闭它?今天在node.js连接中使用mongodb

我见过几个older answers但我知道这个项目一直在发展,所以我想知道它今天是什么状态。

回答

2

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

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

典型的开销包括:

  • 解析服务器名称到IP地址
  • 建立每特别分配的服务器

对MongoDB的连接存储网络连接到服务器

    • 打开一个新的连接装置的服务器上的新的套接字连接和螺纹
    • 每个连接(如MongoDB的2.0的)服务器上分配的RAM的1Mb(也参见:Checking Memory Usage
    • 有一个每进程限制在开放文件/连接(参见:Too Many Open Files

    因为你可以通过在构造函数中设置poolSize利用连接池的MongoDB的Node.js的驱动程序。以使用此示例为例的博客文章:Node.js: Connection Pools and MongoDB

  • +0

    这不是每个服务器的情况。有些服务器每个连接只处理一个并发查询(例如postgres),因此您可能需要打开另一个连接。有时候,如果你有一个长期未使用的连接,你为其他可选客户端持有资源。 – 2012-07-27 01:36:53

    +0

    @YaronNaveh:[Postgres](http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling#Connection_Pooling_and_Acceleration)中连接设置和相关资源使用的一般性能问题仍然存在。另一个问题是您的应用程序或驱动程序如何管理重用/关闭连接以及并发性。最小化资源使用的典型数据库驱动程序概念是使用[连接池](http://en.wikipedia.org/wiki/Connection_pool),它维护一组可用的活动连接。 – Stennie 2012-07-27 03:20:58

    +0

    游泳池允许你每次打开连接都打开连接(如果你幸运的话,你会从游泳池打开一个连接)。 mongo令我惊讶的是,您为整个应用程序保留了一个全局连接。 mongo中允许这样做的特殊功能是什么?是否b/c mongo没有交易(需要不同的连接)?它是否是b/c mongo在同一个连接上执行并发请求更高效? – 2012-07-27 10:05:59