2012-07-26 2 views
1

Lorsque j'utilise le pilote mongo.db natif pour le noeud, dois-je ouvrir 1 connexion par application, par page "servir", ou l'ouvrir et le fermer quand j'en ai besoin?mongodb dans les connexions node.js aujourd'hui

J'ai vu quelques older answers mais je sais que le projet est toujours en développement, donc je veux savoir quel est le statut aujourd'hui.

Répondre

2

Ce n'est pas une situation qui va changer; l'ouverture d'une nouvelle connexion à un serveur sera moins performante que l'utilisation d'une connexion établie.

Remarque: c'est le cas général pour les applications serveur, et pas spécifique à MongoDB.

tête typique comprend:

  • résolution des noms des serveurs en adresses IP
  • établissant une connexion réseau vers le serveur
  • par mémoire de connexion alloué sur le serveur

Pour MongoDB notamment:

  • ouverture d'un nouveau moyen de connexion d'une nouvelle connexion de socket et le fil sur le serveur
  • chaque connexion (au MongoDB 2.0) alloue 1 Mo de RAM sur le serveur (voir également: Checking Memory Usage)
  • il y a une limite par procédé à l'ouverture fichiers/connexions (voir aussi: Too Many Open Files)

Pour le pilote MongoDB Node.js vous pouvez profiter de la mise en commun de connexion en définissant le poolSize dans le constructeur. Un article de blog avec un exemple d'utilisation: Node.js: Connection Pools and MongoDB.

+0

ce n'est pas le cas pour tous les serveurs. Certains serveurs ne traitent qu'une requête simultanée par connexion (par exemple, postgres), vous devrez donc en ouvrir une autre. Parfois, si vous avez une longue connexion inutilisée, vous détenez une ressource pour d'autres clients facultatifs. –

+0

@YaronNaveh: le problème de performance général lié à la configuration de la connexion et à l'utilisation des ressources associées est toujours vrai dans [Postgres] (http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling#Connection_Pooling_and_Acceleration). Un autre problème concerne la manière dont votre application ou pilote gère la réutilisation/la fermeture des connexions ainsi que la concurrence. Le concept de pilote de base de données typique pour minimiser l'utilisation des ressources utilise un [pool de connexions] (http://en.wikipedia.org/wiki/Connection_pool) qui maintient un ensemble de connexions actives disponibles pour la réutilisation. – Stennie

+0

la piscine vous permet d'ouvrir la connexion à chaque fois que vous voulez (et si vous êtes chanceux, vous en aurez un ouvert de la piscine). ce qui m'a surpris chez mongo, c'est que vous gardez une connexion globale pour l'ensemble de l'application. ce qui est spécial dans Mongo qui permet de faire cela? Est-ce que b/c mongo n'a pas de transactions (qui nécessitent des connexions différentes)? Est-ce que b/c mongo est plus efficace pour faire des requêtes simultanées sur la même connexion? –

Questions connexes