Sono l'autore di node-postgres . Innanzitutto, mi scuso per il fatto che la documentazione non è riuscita a rendere chiara l'opzione giusta: è colpa mia. Proverò a migliorarlo. Ho scritto un Gist proprio ora per spiegare questo perché la conversazione è diventata troppo lunga per Twitter.
L'utilizzo pg.connect
è la strada da percorrere in un ambiente web.
Il server PostgreSQL può gestire solo 1 query alla volta per connessione. Ciò significa che se hai 1 globale new pg.Client()
connesso al tuo back-end, l'intera app è colma di bottiglia in base alla velocità con cui postgres può rispondere alle domande. Letteralmente allineerà tutto, accodando ogni query. Sì, è asincrono e quindi va bene ... ma non preferiresti moltiplicare il tuo throughput per 10 volte? Usa pg.connect
set the
pg.defaults.poolSize
su qualcosa di sano (facciamo 25-100, non siamo ancora sicuri del numero giusto).
new pg.Client
è per quando sai cosa stai facendo. Quando hai bisogno di un singolo cliente di lunga durata per qualche motivo o devi controllare molto attentamente il ciclo di vita. Un buon esempio di ciò è quando si utilizza
LISTEN/NOTIFY
. Il client in ascolto deve essere presente, connesso e non condiviso in modo da poter gestire correttamente i NOTIFY
messaggi. Un altro esempio potrebbe essere l'apertura di un client singolo per eliminare alcune cose sospese o negli script della riga di comando.
Una cosa molto utile è centralizzare tutti gli accessi al tuo database nella tua app in un unico file. Non sporcare pg.connect
chiamate o nuovi clienti dappertutto. Avere un file del genere db.js
assomiglia a questo:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
In questo modo puoi cambiare la tua implementazione da pg.connect
a un pool personalizzato di client o qualsiasi altra cosa e devi solo cambiare le cose in un posto.
Dai un'occhiata al modulo node-pg-query che fa proprio questo.