Connection Pool

vložil Igor Gottwald 1. září 2012 21:56

Implementace Connection Pool v Delphi.

Výhody:

  • různá vlákna mohou používat připojení (např. TIBDatabase), aniž by se musela starat o mechanismy autorizace a správy těchto připojení,
  • omezení počtu zbytečných vytváření a uvolňování připojení k databázi, která mají zpravidla značnou režii,
  • omezení maximálního počtu současně aktivních připojení jednoho uživatele a
  • nakonec to nejdůležitější: je to cool :-)))

Jak to celé funguje.

Nejprve si musíte vytvořit vlastní implementaci, jak naznačuje např. IBConnectionPool.pas pro databáze InterBase a Firebird. Implementace spočívá v definování mechanismu vytvoření instance objektu připojení a nastavení parametrů, autorizace a aktivace připojení.

To lze realizovat několika málo řádky a lepší než sáhodlouhý popis je prohlédnout si přiložený příklad.

Vlastní údržba connection pool pak pracuje na principu udržování seznamu aktivních připojení, jejich přidělování dle přicházejících požadavků a uvolňování delší dobu neaktivních připojení.

Maximální počet aktivních připojení hlídá semafor, který zajistí, že při překročení počtu dojde k počkání na uvolnění jiného připojení, případně vyvolání chyby, pokud vyprší zadaný interval.

Samostatné vlákno pak v pravidelných intervalech hlídá, jestli některé aktivní připojení není příliš dlouho nečinné a v takovém případě jej ukončí.

Vlastní připojení jsou implementována prostřednictvím interface, takže jedno připojení může sdílet více objektů v rámci jednoho vlákna, aniž by došlo k jeho předčasnému přidělení jinému vláknu. Celý postup je založen na principu počítání referencí a připojení lze přidělit až tehdy, když je uvolněna poslední reference mimo connection pool. Ještě je důležité zmínit, že tento princip zajistí funkční připojení i v případě, že omylem předčasně uvolníte connection pool a tím pádem i „vlastníka“.

V souvislosti s použitím connection pool je důležité zmínit, že není vhodný pro použití jako datový zdroj v případě, že jsou používání tzv. „živá data“ vyžadující permanentní připojení. Naopak je ideální pro rychlé získání připojení např. pro získání nebo aktualizaci dat na pozadí.

Stáhnout: ConnectionPool.pas a IBConnectionPool.pas.

Tagy: ,

Praxe

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců