PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Qual é a maneira correta de usar o módulo postgresql node.js?


Eu sou o autor de node-postgres. Primeiro, peço desculpas, a documentação não conseguiu esclarecer a opção certa:a culpa é minha. Vou tentar melhorá-lo. Eu escrevi um Gist agora para explicar isso porque a conversa ficou muito longa para o Twitter.

Usando pg.connect é o caminho a seguir em um ambiente web.

O servidor PostgreSQL só pode lidar com 1 consulta por vez por conexão. Isso significa que se você tiver 1 new pg.Client() global conectado ao seu back-end, todo o seu aplicativo tem gargalos com base na rapidez com que o postgrescan responde às consultas. Ele literalmente alinhará tudo, enfileirando cada consulta. Sim, é assíncrono e tudo bem... mas você não multiplicaria sua taxa de transferência por 10x? Use pg.connect defina opg.defaults.poolSize para algo são (nós fazemos 25-100, não temos certeza do número certo ainda).

new pg.Client é para quando você sabe o que está fazendo. Quando você precisa de um único cliente de longa duração por algum motivo ou precisa controlar com muito cuidado o ciclo de vida. Um bom exemplo disso é ao usar LISTEN/NOTIFY . O cliente de escuta precisa estar por perto e conectado e não compartilhado para que possa lidar adequadamente com NOTIFY messages.Outro exemplo seria ao abrir um cliente 1-off para matar alguma coisa pendurada ou em scripts de linha de comando.

Uma coisa muito útil é centralizar todo o acesso ao seu banco de dados em seu aplicativo em um arquivo. Não jogue lixo no pg.connect chamadas ou novos clientes por toda parte. Tenha um arquivo como db.js que se parece com isso:
module.exports = {
   query: function(text, values, cb) {
      pg.connect(function(err, client, done) {
        client.query(text, values, function(err, result) {
          done();
          cb(err, result);
        })
      });
   }
}

Dessa forma, você pode alterar sua implementação de pg.connect para um pool personalizado de clientes ou qualquer outra coisa e só precisa mudar as coisas em um lugar.

Dê uma olhada no módulo node-pg-query que faz exatamente isso.