Аз съм автор на node-postgres. Първо, извинявам се, че документацията не успя да изясни правилната опция:това е моя грешка. Ще се опитам да го подобря. Току-що написах Gist, за да обясня това, защото разговорът стана твърде дълъг за Twitter.
Използване на
pg.connectеначинът в уеб среда.PostgreSQL сървърът може да обработва само 1 заявка в даден момент на връзка. Това означава, че ако имате 1 глобален
new pg.Client()свързано с вашия бекенд, цялото ви приложение е затруднено въз основа на това колко бързо postgrescan отговаря на заявки. Той буквално ще подреди всичко, поставяйки на опашка всяка заявка. Да, асинхронно е и това е наред... но няма ли да умножи пропускателната способност по 10x? Използвайтеpg.connectзадайтеpg.defaults.poolSizeкъм нещо разумно (правим 25-100, все още не сме сигурни в правилния брой).
new pg.Clientе за когато знаеш какво правиш. Когато имате нужда от един дълготраен клиент по някаква причина или трябва много внимателно да контролирате жизнения цикъл. Добър пример за това е, когато използватеLISTEN/NOTIFY. Слушащият клиент трябва да е наоколо и свързан и да не се споделя, за да може правилно да обработваNOTIFYmessages. Друг пример би бил при отваряне на 1-off клиент, за да се убият някакви неща или в скриптове на командния ред.
Едно много полезно нещо е да централизирате целия достъп до вашата база данни във вашето приложение в един файл. Не хвърляйте отпадъци pg.connect обаждания или нови клиенти навсякъде. Имате файл като db.js това изглежда нещо подобно:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
По този начин можете да промените своята реализация от pg.connect към персонализиран пул от клиенти или каквото и да е и трябва да променяте нещата само на едно място.
Разгледайте модула node-pg-query, който прави точно това.