sql >> Database >  >> RDS >> PostgreSQL

Wat is de juiste manier om de node.js postgresql-module te gebruiken?

Ik ben de auteur van node-postgres. Allereerst mijn excuses dat de documentatie de juiste optie niet duidelijk heeft gemaakt:dat is mijn fout. Ik zal proberen het te verbeteren. Ik heb zojuist een Gist geschreven om dit uit te leggen omdat het gesprek te lang werd voor Twitter.

pg.connect gebruiken is de weg te gaan in een webomgeving.

PostgreSQL-server kan slechts 1 query tegelijk per verbinding verwerken. Dat betekent dat als u 1 globale new pg.Client() hebt verbonden met uw backend heeft uw hele app een bottlekneck op basis van hoe snel postgrescan reageert op vragen. Het zal letterlijk alles op een rij zetten, elke vraag in de wachtrij plaatsen. Ja, het is asynchroon en dus dat is goed... maar zou je je doorvoer niet met 10x vermenigvuldigen? Gebruik pg.connect stel depg.defaults.poolSize . in tot iets zinnigs (we doen 25-100, we weten nog niet het juiste aantal).

new pg.Client is voor als je weet wat je doet. Wanneer u om de een of andere reden één enkele cliënt nodig heeft of de levenscyclus zeer zorgvuldig moet controleren. Een goed voorbeeld hiervan is bij het gebruik vanLISTEN/NOTIFY . De luisterende client moet in de buurt zijn en verbonden zijn en niet worden gedeeld, zodat deze NOTIFY goed kan verwerken berichten. Een ander voorbeeld is het openen van een 1-off-client om iets opgehangen dingen te doden of in opdrachtregelscripts.

Een heel handig ding is om alle toegang tot uw database in uw app te centraliseren in één bestand. Maak geen rommel pg.connect telefoontjes of nieuwe klanten overal. Heb een bestand zoals db.js dat ziet er ongeveer zo uit:

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

Op deze manier kunt u uw implementatie wijzigen van pg.connect naar een aangepaste pool van klanten of wat dan ook en hoef je maar op één plek dingen te veranderen.

Kijk eens naar de node-pg-query module die precies dit doet.



  1. MariaDB POWER() uitgelegd

  2. Hoe twee kolommen in MySQL te vergelijken

  3. LOAD DATA LOCAL INFILE geeft de fout De gebruikte opdracht is niet toegestaan ​​met deze MySQL-versie

  4. 2 manieren om alleen de numerieke waarden uit een SQLite-databasekolom te retourneren