sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad är det korrekta sättet att använda node.js postgresql-modulen?

Jag är författare till node-postgres. Först ber jag om ursäkt för att dokumentationen inte har klargjort rätt alternativ:det är mitt fel. Jag ska försöka förbättra det. Jag skrev en sammanfattning just nu för att förklara detta eftersom konversationen blev för lång för Twitter.

Använder pg.connect är vägen att gå i en webbmiljö.

PostgreSQL-servern kan bara hantera en fråga åt gången per anslutning. Det betyder att om du har en global new pg.Client() ansluten till din backend hela din app är flaskhalsad baserat på hur snabbt postgrescan svarar på frågor. Det kommer bokstavligen att rada upp allt, köa varje fråga. Ja, det är asynkront och så det är okej... men skulle du inte multiplicera din genomströmning med 10x? Använd pg.connect ställ in pg.defaults.poolSize till något vettigt (vi gör 25-100, inte säker på rätt nummer än).

new pg.Client är för när du vet vad du gör. När du behöver en enda långlivad klient av någon anledning eller behöver mycket noggrant kontrollera livscykeln. Ett bra exempel på detta är när du använder LISTEN/NOTIFY . Den lyssnande klienten måste vara runt och ansluten och inte delad så att den korrekt kan hantera NOTIFY meddelanden. Ett annat exempel skulle vara när du öppnar en engångsklient för att döda något hängt eller i kommandoradsskript.

En mycket användbar sak är att centralisera all åtkomst till din databas i din app till en fil. Strö inte ned pg.connect samtal eller nya kunder genomgående. Ha en fil som db.js som ser ut ungefär så här:

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

På så sätt kan du ändra din implementering från pg.connect till en anpassad pool av kunder eller vad som helst och behöver bara ändra saker på ett ställe.

Ta en titt på modulen node-pg-query som gör just detta.



  1. MySQL skapa vy, ersätt vy och släpp vy uttalanden med exempel

  2. java - passerar array i oracle lagrad procedur

  3. Databasbackups - Jämför MariaDB Mariabackup och Percona Xtrabackup

  4. Hur kan jag låsa en tabell vid läsning med hjälp av Entity Framework?