sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuál es la forma correcta de usar el módulo postgresql de node.js?

Soy el autor de node-postgres. En primer lugar, pido disculpas porque la documentación no ha aclarado la opción correcta:es mi culpa. Intentaré mejorarlo. Acabo de escribir una Gist para explicar esto porque la conversación se hizo demasiado larga para Twitter.

Usando pg.connect es el camino a seguir en un entorno web.

El servidor PostgreSQL solo puede manejar 1 consulta a la vez por conexión. Eso significa que si tiene 1 new pg.Client() global conectado a su backend, toda su aplicación tiene un cuello de botella en función de la rapidez con la que postgrescan responde a las consultas. Literalmente alineará todo, poniendo en cola cada consulta. Sí, es asíncrono y eso está bien... pero ¿no preferiría multiplicar su rendimiento por 10x? Usa pg.connect establecer el pg.defaults.poolSize a algo cuerdo (hacemos 25-100, aún no estoy seguro del número correcto).

new pg.Client es para cuando sabes lo que estás haciendo. Cuando necesita un solo cliente de larga duración por alguna razón o necesita controlar con mucho cuidado el ciclo de vida. Un buen ejemplo de esto es cuando se usa LISTEN/NOTIFY . El cliente que escucha debe estar cerca y conectado y no compartido para que pueda manejar correctamente NOTIFY mensajes. Otro ejemplo sería al abrir un cliente único para matar cosas colgadas o en secuencias de comandos de línea de comandos.

Una cosa muy útil es centralizar todo el acceso a su base de datos en su aplicación en un solo archivo. No tires basura pg.connect llamadas o nuevos clientes en todo momento. Tener un archivo como db.js que se parece a esto:

module.exports = {
   query: function(text, values, cb) {
      pg.connect(function(err, client, done) {
        client.query(text, values, function(err, result) {
          done();
          cb(err, result);
        })
      });
   }
}

De esta manera, puede cambiar su implementación desde pg.connect a un grupo personalizado de clientes o lo que sea y solo tiene que cambiar las cosas en un lugar.

Eche un vistazo al módulo node-pg-query que hace exactamente esto.