2011-07-07 6 views
9

Je trouve un module très bon (nœud-mysql) pour se connecter à la base de données Mysql.Quand ouvrir la connexion en utilisant le module node-mysql?

Le module est très bon, je ne dispose que d'une question sur « QUAND » pour ouvrir la connexion à Mysql.

J'ai toujours utilisé php-mysql avant de commencer avec le noeud, pour chaque demande j'ai ouvert une connexion ... puis requête .... puis fermez.

est le même avec le noeud? pour chaque demande dois-je ouvrir une connexion et la fermer? ou puis-je utiliser une connexion persistante?

Merci

Répondre

6

Le modèle open-requête proche se fonde généralement sur le regroupement de connexions pour bien fonctionner. Noeud-mysql n'a pas construit la mise en commun de connexion, donc si vous utilisez ce modèle que vous allez payer le coût d'établir une nouvelle connexion à chaque fois que vous exécutez une requête (qui peut ou peut ne pas être bien dans votre cas). Comme le noeud est mono-thread, vous pouvez vous en passer avec une seule connexion persistante (d'autant plus que node-mysql tentera de se reconnecter si la connexion meurt), mais vous risquez d'avoir des problèmes avec cette transaction. puisque tous les utilisateurs du client de noeud partagent la même connexion et donc le même état de transaction). En outre, une seule connexion peut être une limite de débit, car une seule commande sql peut être exécutée à la fois.

Ainsi, pour la sécurité des transactions et la performance, le meilleur des cas est vraiment d'utiliser une sorte de mise en commun. Vous pouvez créer vous-même un pool simple dans votre application ou rechercher les autres packages disponibles pour cette fonctionnalité. Mais les approches de connexion open-query-close ou persistantes peuvent également fonctionner dans votre cas.

3

felixge/node-mysql a la mise en commun connexion maintenant

https://github.com/felixge/node-mysql#pooling-connections

Voici un exemple de code à partir du lien ci-dessus (au moment de cette écriture.):

var mysql = require('mysql'); 
var pool = mysql.createPool(...); 

pool.getConnection(function(err, connection) { 
    // Use the connection 
    connection.query('SELECT something FROM sometable', function(err, rows) { 
    // And done with the connection. 
    connection.end(); 

    // Don't use the connection here, it has been returned to the pool. 
    }); 
}); 

Donc, pour répondre votre question (et la même que celle de @Geoff Chappell): le meilleur des cas serait d'utiliser la mise en commun pour gérer les connexions.

Questions connexes