2012-07-26 123 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