Я автор node-postgres . Во-первых, я извиняюсь, документация не смогла сделать правильный выбор ясным: это моя вина. Я постараюсь улучшить это. Я написал Суть только сейчас, чтобы объяснить это, потому что разговор стал слишком длинным для Твиттера.
Использование pg.connect
- это способ пойти в веб-среде.
Сервер PostgreSQL может обрабатывать только 1 запрос за одно соединение.
Это означает, что если у вас есть 1 глобальный new pg.Client()
, подключенный к вашему
Бэкэнд всего вашего приложения ограничен в зависимости от того, насколько быстро Postgres
может отвечать на запросы. Это буквально выстроит все в очередь
каждый запрос. Да, это асинхронно и все в порядке ... но не так ли
а умножить свою пропускную способность в 10 раз? Используйте pg.connect
установить
pg.defaults.poolSize
к чему-то вменяемому (мы делаем 25-100, не уверен
правильный номер еще).
new pg.Client
для тех случаев, когда вы знаете, что делаете. Когда ты нуждаешься
один долгоживущий клиент по какой-то причине или нужно очень осторожно
контролировать жизненный цикл. Хороший пример этого при использовании
LISTEN/NOTIFY
. Слушающий клиент должен быть рядом и
подключен и не используется, поэтому он может правильно обрабатывать NOTIFY
сообщения.
Другой пример был бы при открытии 1-офф клиента, чтобы убить некоторых
зависание или в сценариях командной строки.
Одна очень полезная вещь - это централизовать весь доступ к вашей базе данных в вашем приложении к одному файлу. Не засоряйте 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 , который делает именно это.