PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quelle est la bonne façon d'utiliser le module node.js postgresql ?

Je suis l'auteur de node-postgres. Tout d'abord, je m'excuse si la documentation n'a pas clarifié la bonne option :c'est de ma faute. Je vais essayer de l'améliorer. J'ai écrit un Gist tout à l'heure pour expliquer cela parce que la conversation est devenue trop longue pour Twitter.

Utilisation de pg.connect est la voie à suivre dans un environnement Web.

Le serveur PostgreSQL ne peut gérer qu'une seule requête à la fois par connexion. Cela signifie que si vous avez 1 new pg.Client() global connectée à votre backend, toute votre application est engorgée en fonction de la rapidité avec laquelle postgrescan répond aux requêtes. Il alignera littéralement tout, mettant en file d'attente chaque requête. Ouais, c'est asynchrone et donc ça va... mais ne multiplieriez-vous pas votre débit par 10 x ? Utilisez pg.connect définir lepg.defaults.poolSize à quelque chose de sain (nous faisons 25-100, pas encore sûr du bon nombre).

new pg.Client est pour quand vous savez ce que vous faites. Lorsque vous avez besoin d'un seul client de longue durée pour une raison quelconque ou que vous devez contrôler très soigneusement le cycle de vie. Un bon exemple de ceci est lors de l'utilisation de LISTEN/NOTIFY . Le client à l'écoute doit être présent et connecté et non partagé afin qu'il puisse gérer correctement NOTIFY messages. Un autre exemple serait lors de l'ouverture d'un client unique pour tuer des trucs bloqués ou dans des scripts de ligne de commande.

Une chose très utile est de centraliser tous les accès à votre base de données dans votre application dans un seul fichier. Ne jetez pas pg.connect appels ou de nouveaux clients tout au long. Avoir un fichier comme db.js qui ressemble à ceci :

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 cette façon, vous pouvez modifier votre implémentation depuis pg.connect à un pool personnalisé de clients ou autre et n'ont qu'à changer les choses en un seul endroit.

Jetez un œil au module node-pg-query qui fait exactement cela.