sql >> Databáze >  >> RDS >> PostgreSQL

Jaký je správný způsob použití modulu node.js postgresql?

Jsem autorem node-postgres. Nejprve se omlouvám, že dokumentace nedokázala objasnit správnou možnost:je to moje chyba. Pokusím se to vylepšit. Právě jsem napsal Shrnutí, abych to vysvětlil, protože konverzace na Twitteru byla příliš dlouhá.

Pomocí pg.connect je cesta, jak jít ve webovém prostředí.

PostgreSQL server dokáže zpracovat pouze 1 dotaz najednou na připojení. To znamená, že máte 1 globální new pg.Client() připojená k vašemu backendu je celá vaše aplikace omezená na základě toho, jak rychle postgrescan reaguje na dotazy. Doslova vše seřadí, zařadí každý dotaz do fronty. Jo, je to asynchronní a tak to je v pořádku...ale neznásobil by váš propustnost 10x? Použijte pg.connect nastavte pg.defaults.poolSize k něčemu rozumnému (děláme 25-100, ještě si nejsme jisti správným číslem).

new pg.Client je, když víte, co děláte. Když z nějakého důvodu potřebujete jediného dlouhodobého klienta nebo potřebujete velmi pečlivě kontrolovat životní cyklus. Dobrým příkladem toho je použití LISTEN/NOTIFY . Naslouchající klient musí být poblíž a musí být připojen, nikoli sdílen, aby mohl správně zpracovat NOTIFY Zprávy. Dalším příkladem může být otevření jednorázového klienta pro zabití něčeho nebo ve skriptech příkazového řádku.

Jedna velmi užitečná věc je centralizovat veškerý přístup k vaší databázi ve vaší aplikaci do jednoho souboru. Nevyhazujte odpadky pg.connect hovory nebo nové klienty po celou dobu. Vytvořte soubor jako db.js vypadá to nějak takto:

module.exports = {
   query: function(text, values, cb) {
      pg.connect(function(err, client, done) {
        client.query(text, values, function(err, result) {
          done();
          cb(err, result);
        })
      });
   }
}

Tímto způsobem můžete změnit svou implementaci z pg.connect na vlastní skupinu klientů nebo cokoli jiného a stačí věci změnit na jednom místě.

Podívejte se na modul node-pg-query, který dělá právě toto.



  1. Příklady DAYOFYEAR() – MySQL

  2. Jak mohu uzamknout tabulku při čtení pomocí Entity Framework?

  3. Příklady CONVERT_TZ() – MySQL

  4. Jak obnovit jednu tabulku MySQL pomocí mysqldump?