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.
c6eb7066-672c-4cab-91f2-f415a2dcedf0|6|4.0
Tagy: db, praxe
Praxe