V jakém okamžiku by měl být uzel vytvoření připojení k databázi?

hlasů
1

Mám aplikaci Node.js PostgreSQL přes uzlů Postgres. Začal jsem příjem chyba „Omlouváme se, ale už příliš mnoho klientů“, a to mě zajímalo, jestli tvořím příliš mnoho klientských objektů, nebo jestli bych měl být ručně odpojením. V současné době jsem vytvořit nový klientský objekt s každém volání funkce, která přistupuje k databázi. Například:

var db {
  checkDetails : function() {
    var client = new pg.Client(conString);
    ...
  },

  amendDetails : function() {
    var client = new pg.Client(conString);
    ...
  },
...
}

Je to pravda, nebo bych měl vytvořit jeden objekt klienta jinde? Nebo bych měl volat client.end()? Jako příklady stylu callback I am using nezahrnovaly to, předpokládal jsem, že to bylo zbytečné.

Položena 01/05/2013 v 13:41
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Existuje značný počet platných možností zde, včetně pokračování stávající přístup, přidá něco podobného PgBouncer použitím singleton. Ty mají různé úvahy, a tak výběr, který je lepší, může záviset na konkrétní situaci. Nicméně zmíním kompromisy mezi těmito dvěma možnostmi zde.

Prvních několik základy

PostgreSQL, stejně jako všechny ostatní RDBMS let musí koordinovat přístup k údajům mezi různými procesy. Obecně čím více paralelismus máte na straně přístup k datům, tím více se čeká na zámky. Jedním z klíčů je tedy řídit paralelismu.

Na jedné straně, jeden připojení k PostgreSQL se nikdy měřítko za jediné jádro databázového serveru a jeden pevný disk vřeteno. Ve skutečnosti to nikdy nebude škálovat dokonce až k tomu. Na druhou stranu, pokud máte 50 jader a velmi rychlé pevné disky, 100 spoje skončí tráví většinu času čeká na jiné procesy, takže je třeba pochopit, že kompromis, než jak začít.

Možnost 1: Singleton

připojení k ojedinělým databáze je nejjednodušší postup. Všimněte si, že PostgreSQL připojení lze spustit pouze jeden dotaz v době, takže se v podstatě děje serializovat všechny přístup k databázím prostřednictvím jediného rozhraní. To nefunguje dobře s transakcemi, a to klade tvrdé limity na to, co můžete očekávat od svého správce databáze však na nižší end server, budete mít mnohem lepší výkon, než budete pokud dovolíte, řekněme, 100 souběžných připojení.

Možnost 2: Připojení sdružování, snad s PGBouncer

Druhou možností je, můžete se připojit k připojení Pooler namísto databáze a hanve připojení Pooler spravovat připojení. To je nejvíce flexibilní přístup, protože poskytuje soubor nástrojů pro řešení věci, jako je operace, pokud je to nutné, a umožňuje lepší kontrolu nad paralelismu, než se dostanete z singleton. S připojovacím Pooler můžete určit, kolik připojení k použití, zda se bazén transakce, nebo ne, a podobně. Obecně platí, že pokud hledáte pro škálovatelnost to je pravděpodobně místo, kde začít.

Hlavní nevýhodou je, že to vám dává ještě jeden kus softwaru pro správu, a proto trochu nákladů složitosti. Nicméně to také vám dává vrstvu abstrakce kolem své připojení databáze můžete použít pro správu výkonu.

Odpovězeno 02/06/2013 v 03:54
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more