Аз съм автор на 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
. Слушащият клиент трябва да е наоколо и свързан и да не се споделя, за да може правилно да обработваNOTIFY
messages. Друг пример би бил при отваряне на 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, който прави точно това.