Jsem autorem node-postgres. Nejprve se omlouvám, že dokumentace nedokázala objasnit správnou možnost:je to moje chyba. Pokusím se to vylepšit. Právě jsem napsal Shrnutí, abych to vysvětlil, protože konverzace na Twitteru byla příliš dlouhá.
Pomocí
pg.connect
je cesta, jak jít ve webovém prostředí.PostgreSQL server dokáže zpracovat pouze 1 dotaz najednou na připojení. To znamená, že máte 1 globální
new pg.Client()
připojená k vašemu backendu je celá vaše aplikace omezená na základě toho, jak rychle postgrescan reaguje na dotazy. Doslova vše seřadí, zařadí každý dotaz do fronty. Jo, je to asynchronní a tak to je v pořádku...ale neznásobil by váš propustnost 10x? Použijtepg.connect
nastavtepg.defaults.poolSize
k něčemu rozumnému (děláme 25-100, ještě si nejsme jisti správným číslem).
new pg.Client
je, když víte, co děláte. Když z nějakého důvodu potřebujete jediného dlouhodobého klienta nebo potřebujete velmi pečlivě kontrolovat životní cyklus. Dobrým příkladem toho je použitíLISTEN/NOTIFY
. Naslouchající klient musí být poblíž a musí být připojen, nikoli sdílen, aby mohl správně zpracovatNOTIFY
Zprávy. Dalším příkladem může být otevření jednorázového klienta pro zabití něčeho nebo ve skriptech příkazového řádku.
Jedna velmi užitečná věc je centralizovat veškerý přístup k vaší databázi ve vaší aplikaci do jednoho souboru. Nevyhazujte odpadky pg.connect
hovory nebo nové klienty po celou dobu. Vytvořte soubor jako db.js
vypadá to nějak takto:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
Tímto způsobem můžete změnit svou implementaci z pg.connect
na vlastní skupinu klientů nebo cokoli jiného a stačí věci změnit na jednom místě.
Podívejte se na modul node-pg-query, který dělá právě toto.