sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er den rigtige måde at bruge node.js postgresql-modulet på?

Jeg er forfatter til node-postgres. Først undskylder jeg, at dokumentationen ikke har gjort den rigtige mulighed klar:det er min skyld. Jeg vil prøve at forbedre det. Jeg skrev lige nu en Gist for at forklare dette, fordi samtalen blev for lang til Twitter.

Brug af pg.connect er vejen at gå i et webmiljø.

PostgreSQL-serveren kan kun håndtere 1 forespørgsel ad gangen pr. forbindelse. Det betyder, at hvis du har 1 global new pg.Client() forbundet til din backend hele din app er flaskehalsede baseret på hvor hurtigt postgrescan reagerer på forespørgsler. Det vil bogstaveligt talt stille alt op, og stille hver forespørgsel i kø. Ja, det er asynkront, og så det er okay... men ville du ikke gange din gennemstrømning med 10x? Brug pg.connect indstille pg.defaults.poolSize til noget fornuftigt (vi laver 25-100, ikke sikker på det rigtige tal endnu).

new pg.Client er til når du ved hvad du laver. Når du har brug for en enkelt langvarig klient af en eller anden grund eller har brug for meget omhyggeligt at kontrollere livscyklussen. Et godt eksempel på dette er, når du bruger LISTEN/NOTIFY . Den lyttende klient skal være omkring og forbundet og ikke delt, så den korrekt kan håndtere NOTIFY meddelelser. Et andet eksempel ville være, når du åbner en 1-off-klient for at dræbe noget hængende ting eller i kommandolinjescripts.

En meget nyttig ting er at centralisere al adgang til din database i din app til én fil. Affald ikke pg.connect opkald eller nye kunder hele vejen igennem. Har en fil som db.js der ser sådan ud:

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å denne måde kan du ændre din implementering fra pg.connect til en brugerdefineret pulje af kunder eller hvad som helst og kun skal ændre tingene ét sted.

Tag et kig på node-pg-query-modulet, der gør netop dette.



  1. Mysql 1050-fejltabel eksisterer allerede, mens den faktisk ikke gør det

  2. SQL Server 2008:hvordan giver jeg privilegier til et brugernavn?

  3. Forespørgsel tilskud til en tabel i postgres

  4. Brug af avancerede Oracle JDeveloper-funktioner til MySQL-databaser