2011-07-07 15 views
9

Encontré un módulo muy bueno (node-mysql) para conectarme a la base de datos Mysql.¿Cuándo abrir la conexión utilizando el módulo node-mysql?

El módulo es muy bueno, solo tengo una pregunta sobre "CUANDO" para abrir la conexión a Mysql.

Siempre he usado php-mysql antes de comenzar con el nodo, para cada solicitud abrí una conexión ... luego consultar .... luego cerrar.

¿Es lo mismo con el nodo? para cada solicitud, ¿tengo que abrir una conexión y luego cerrarla? o puedo usar una conexión persistente?

que

Respuesta

6

El patrón de consulta de apertura-cierre se basa generalmente Gracias agrupación de conexiones para un buen desempeño. Node-mysql no tiene ninguna agrupación de conexiones integrada, por lo que si utiliza este patrón, pagará el costo de establecer una nueva conexión cada vez que ejecute una consulta (que puede no estar bien en su caso).

Como el nodo tiene una sola hebra, puede salirse con una sola conexión persistente (especialmente dado que node-mysql intentará reconectarse si la conexión se muere), pero hay posibles problemas con ese enfoque si tiene la intención de usar transacciones (ya que todos los usuarios del cliente nodo comparten la misma conexión y el mismo estado de transacción). Además, una sola conexión puede ser un límite en el rendimiento, ya que solo se puede ejecutar un comando sql a la vez.

Por lo tanto, para seguridad transaccional y rendimiento, lo mejor es utilizar algún tipo de agrupamiento. Puede crear un grupo simple en su aplicación o investigar qué otros paquetes existen para proporcionar esa capacidad. Pero los enfoques de conexión de consulta abierta o persistente también pueden funcionar en su caso.

3

felixge/node-MySQL tiene ahora la agrupación de conexiones

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

Aquí hay un código de ejemplo desde el enlace anterior (en el momento de escribir estas líneas.):

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. 
    }); 
}); 

Así que para responder su pregunta (y lo mismo que la respuesta de @Geoff Chappell): el mejor caso sería utilizar la agrupación para administrar las conexiones.

Cuestiones relacionadas