Gestione dei Pool di Connessioni (Parte I)
Pagina 1 di 2
Durante lo sviluppo di applicazioni che accedono ad una basedi dati, vi sarà capitato di notare che stabilire laconnessione verso il database può richiedere anchequalche secondo.
Si tratta di un problema rilevante quando si ha a che farecon la progettazione di un sito web, le cui pagine sonocostruite dinamicamente accedendo ai dati contenuti in undatabase.
In questo articolo vedremo come superare l'ostacolo.
Problemi di performance durante l'accesso aidatabase
Stabilire una connessione con una base di dati èun'operazione molto complessa. Infatti, ènecessario caricare il driver del database, stabilire unacomunicazione bidirezionale sicura fra l'applicazione chedeve accedere ai dati e il database stesso, eseguire unaprocedura di autenticazione e allocare le risorse necessarieper gestire le query successive.
Queste operazioni sono spesso nascoste all'occhio dellosviluppatore che stabilisce la connessione con una o duechiamate di funzione. L'esecuzione di questa proceduraè molto onerosa e richiede alcuni secondi per essereportata a termine.
Questo tempo è del tutto trascurabile nel caso diun'applicazione stand-alone che spesso viene mantenuta inesecuzione per tempi molto lunghi. Nel caso diun'applicazione web le cose cambiano: lo scopo infattiè quello di gestire una singola richiesta, accedere aldatabase e dare la risposta nel tempo minore possibile. Seper ogni richiesta non fosse necessario stabilire una nuovaconnessione verso il database, i tempi di risposta nerisulterebbero significativamente migliorati; inoltre ilserver sarebbe meno sottoposto a problemi di sovraccarico,potendo così gestire un maggior numero di visitatori.
La soluzione? Un pool di connessioni!
Esiste una soluzione elegante per ridurre i tempi diconnessione al database nel contesto che è statodescritto precedentemente: è sufficiente che il clientinserisca la connessione in una cache invece di chiuderlaquando siano terminata l'esecuzione di tutte le query.
Un altro processo che debba accedere alla base di datipuò in tal caso prelevare una connessione esistentedalla cache invece di stabilirne una nuova.
Come è fatto un pool di connessioni?
Ora analizziamo una struttura dati ed una serie di funzioniminimali che ci permettano di gestire un pool di connessioni.
Per gestire le connessioni disponibili, la struttura datimigliore è una coda. In tal caso quando un processodeve accedere al database otterrà, prelevandola dallacoda, la connessione più vecchia fra quelle in cache,minimizzando la possibilità di caduta per leconnessioni inutilizzate da troppo tempo.
Se non ci sono connessioni disponibili, il pool deve esserein grado di stabilirne una nuova. Pertanto deve avere a suadisposizione tutte le informazioni per farlo: generalmente sitratta di conoscere il driver, il login, la password diaccesso e il nome del database.
In base a quanto detto sopra, il codice che gestisce un pooldeve contenere almeno tre funzioni: getConnection perottenere una nuova connessione prelevandola dalla coda ocreandone una nuova se necessario; releaseConnection perliberare una connessione già utilizzata e garantirneil riutilizzo da parte di altri processi, inserendola nellacoda delle connessioni disponibili; inoltre poiché segetConnection non trova nessuna connessione disponibile nellacoda deve stabilirne una nuova, è necessarioaggiungere la funzione newConnection che sia in grado difarlo quando richiesto.
- Articolo precedente La security (Parte III)
- Articolo successivo Gestione dei Pool di Connessioni (Parte II)