[Db] Cachare una query

Domenico L. domenico.lorusso a pleiade.it
Gio 29 Mar 2007 09:09:03 CEST


Davide Michel 'ZioBudda' Morelli ha scritto:
> Ciao all. Per una applicazione che sto realizzando devo estrarre dei 
> dati da un db MYSQL. Questi dati sono per la maggiorparte delle volte, 
> sempre gli stessi, cosi' mi sono domandato se non mi convenisse fare 
> la cache di queste "estrazioni" (o estrapolazioni se non mi ricordo 
> male). Ma la domanda è : come farlo per bene ? Vi dico che come 
> linguaggio di programmazione uso PHP5.2 e come DBMS uso MYSQL 5.x. E 
> anche vero che MYSQL > 4 ha un suo gestore interno di cache, ma io 
> vorrei creare un qualche cosa che stia al di sopra di questo sistema. 
> Sempre che sia consigliabile.

Uhm... un dbms dovrebbe cachare gli sql per non ricalcolare i piani di 
esecuzione (che dovrebbero essere la cosa più pesante). Ammesso che 
Mysql abbia una gestione di cache effettiva (ma le materialized 
view/snapshot allora a cosa dovrebbero servire) il tuo collo di 
bottiglia è sempre la rete.

Detto questo ha senso fare un caching.
Puoi fare in modo che se passi ad una tua funzione uno statement sql la 
funzione gli calcola l'md5 (o altra hash function), in un file di 
paramentri metti le hash delle query, il tempo di retention e il nome 
del file in cui memorizzi i dati.

A questo punto se la tua funzione trova i l'hash nel file dei parametri 
recupera i dati da disco altrimenti effettua la query.

Solo che a questo punto ti serve anche un iterator, quindi mi sa che 
dovresti farti una classe (forse su pear c'è qualcosa..)

Ciao
> PS: nelle store procedure di MYSQL è possibile pasasre un parametro e 
> farlo eseguire come se fosse una query ? Tipo: call miaStore("select * 
> from pippo");
non lo so, sorry.... cmq molto dipende se esistono i tipi tabella e 
recordset credo..

-- 
Domenico L.                             icq: 645 44 861

per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]



Maggiori informazioni sulla lista Db