Jestem autorem node-postgres . Po pierwsze, przepraszam, że dokumentacja nie wyjaśniła właściwej opcji: to moja wina. Postaram się to poprawić. Napisałem teraz streszczenie, aby to wyjaśnić, ponieważ rozmowa wydłużyła się zbyt długo dla Twittera.
Używanie pg.connect
to sposób na poruszanie się w środowisku sieciowym.
Serwer PostgreSQL może obsłużyć tylko 1 zapytanie na raz na połączenie. Oznacza to, że jeśli masz 1 new pg.Client()
połączenie globalne z backendem, cała aplikacja jest ograniczona w zależności od tego, jak szybko postgres może odpowiadać na zapytania. Dosłownie wyrówna wszystko, ustawiając w kolejce każde zapytanie. Tak, jest asynchroniczny, więc w porządku ... ale czy nie wolałbyś raczej pomnożyć przepustowości 10x? Użyj pg.connect
set the
pg.defaults.poolSize
na coś rozsądnego (robimy 25-100, nie jesteśmy jeszcze pewni właściwej liczby).
new pg.Client
jest przeznaczony dla osób, które wiesz, co robisz. Gdy z jakiegoś powodu potrzebujesz jednego, długowiecznego klienta lub potrzebujesz bardzo uważnej kontroli cyklu życia. Dobrym tego przykładem jest użycie
LISTEN/NOTIFY
. Klient nasłuchujący musi być w pobliżu i być połączony i nie udostępniony, aby mógł prawidłowo obsługiwać NOTIFY
wiadomości. Innym przykładem może być otwarcie klienta jednorazowego, aby zabić zawieszone rzeczy lub w skryptach wiersza poleceń.
Bardzo pomocną rzeczą jest scentralizowanie całego dostępu do bazy danych w aplikacji do jednego pliku. Nie zaśmiecaj pg.connect
telefonów ani nowych klientów przez cały czas. Miej taki plik, db.js
który wygląda mniej więcej tak:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
W ten sposób możesz zmienić swoją implementację z pg.connect
niestandardowej puli klientów lub cokolwiek innego i zmienić tylko rzeczy w jednym miejscu.
Przyjrzyj się modułowi node-pg-query , który właśnie to robi.