PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist die richtige Art und Weise, das postgresql-Modul von node.js zu verwenden?

Ich bin der Autor von node-postgres. Zunächst entschuldige ich mich dafür, dass die Dokumentation nicht die richtige Option deutlich gemacht hat:Das ist meine Schuld. Ich werde versuchen, es zu verbessern. Ich habe gerade einen Gist geschrieben, um dies zu erklären, weil die Konversation für Twitter zu lang geworden ist.

Verwenden von pg.connect ist der richtige Weg in einer Webumgebung.

Der PostgreSQL-Server kann nur jeweils 1 Abfrage pro Verbindung verarbeiten. Das heißt, wenn Sie 1 globalen new pg.Client() haben Wenn Sie mit Ihrem Backend verbunden sind, ist Ihre gesamte App abhängig davon, wie schnell Postgrescan auf Abfragen antwortet. Es wird buchstäblich alles aneinanderreihen und jede Abfrage in eine Warteschlange stellen. Ja, es ist asynchron und das ist in Ordnung ... aber würde Ihr Vater Ihren Durchsatz nicht mit dem 10-fachen multiplizieren? Verwenden Sie pg.connect Legen Sie die pg.defaults.poolSize fest zu etwas Vernünftigem (wir machen 25-100, sind uns noch nicht sicher, welche Zahl richtig ist).

new pg.Client ist für, wenn Sie wissen, was Sie tun. Wenn Sie aus irgendeinem Grund einen einzigen langlebigen Client benötigen oder den Lebenszyklus sehr sorgfältig kontrollieren müssen. Ein gutes Beispiel hierfür ist die Verwendung von LISTEN/NOTIFY . Der lauschende Client muss in der Nähe und verbunden und nicht freigegeben sein, damit er NOTIFY ordnungsgemäß verarbeiten kann Nachrichten. Ein anderes Beispiel wäre das Öffnen eines einmaligen Clients, um irgendetwas zu beenden, oder in Befehlszeilenskripten.

Eine sehr hilfreiche Sache ist es, den gesamten Zugriff auf Ihre Datenbank in Ihrer App in einer Datei zu zentralisieren. Verunreinigen Sie pg.connect nicht Anrufe oder neue Kunden im gesamten. Haben Sie eine Datei wie db.js das sieht in etwa so aus:

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

Auf diese Weise können Sie Ihre Implementierung von pg.connect ändern zu einem benutzerdefinierten Kundenpool oder was auch immer hinzufügen und nur an einer Stelle etwas ändern müssen.

Sehen Sie sich das Modul node-pg-query an, das genau das tut.