Newsgroup: it.comp.lang.visual-basic
Titolo: Oggetto COM per Caching

Ciao a tutti,
sto cercando articoli, risorse, qualsiasi cosa su come realizzare un oggetto
COM per la gestione di una cache, ovvero vorrei realizzare un oggetto Cache
generico.
Sapete indicarmi dove poter creare articoli e risorse su questo problema?
Grazie
Pietro Santoro

Vedi reply su ICPW32...
Ciaotutti,
*

 E, soprattutto, PERCHE' vorresti creare questa "cache"?
Alcuni applicativi fanno frequenti accessi a risorse, poniamo database Per
aumentare l'efficienza di tali sistemi (soprattutto all'aumentare del
carico, delle richieste, degli utenti contenporanei) una soluzione e'
"cachare" le informazioni richieste.
Percio' creare un oggetto che si occupi di gestire una cache "generica" mi
aiuterebbe in questo scopo: dalla mia applicazione istanzierei un'oggetto
del genere, recuperando le informazioni dalla cache qualora sia disponibile,
altrimenti recuperandole dal db e mettendole nella cache.
La cache poi avrebbe un tempo di refresh e la possibilita' di essere
"invalidata" (ad esempio quando viene modificata un'informazione su db e
questa e' gia' presente in cache).
Tutto questo vorrei farlo in memoria (non su disco) definendo chiaramente la
quantita' massima di informazioni da memorizzare, oltre il quale la cache
viene ripulita secondo una certa politica (ad esempio si svuota dell'ultima
informazione usata oppure di quella usata meno frequentemente).
Pietro

> Alcuni applicativi fanno frequenti accessi a risorse, poniamo database
Ecco, poniamo database: come ti proporresti di gestire il caching di un
accesso a database? Implementi un'interfaccia che espone dei recordset e la
usi al posto di ADO per effettuare le query?
E come garantisci che il dato non sia variato sul DB?
Il DB e' il classico esempio in cui il caching va gestito quantomeno in
cooperazione col DB, il che significa progettare la struttura ad hoc per
consentire un caching efficiente.
Per il resto la struttura base potrebbe anche non variare molto, a patto che
tu sappia riconoscere le tabelle origine nella query (che a questo punto
sarebbe l'identificatore univoco della risorsa)...
Ciaotutti,
*

 E come garantisci che il dato non sia variato sul DB?
Pensavo di fare un oggetto Cache contenente un hashtable (classe Collection
in VB).
In questa collection memorizzo oggetti complessi tipo un id di un cliente
(come chiave) e l'oggetto cliente che contiene tutte le informazioni su di
esso.
Per l'accesso al DB utilizzo solo un punto di accesso, tramite una classe
che utilizza l'oggetto cache, appunto.
In questo modo l'oggetto che accede al db prima controlla che nella
collection ci sia l'ID di quell'utente (controlla se sia presente quella
chiave e che quella chiave non sia "scaduta", visto che la cache ). Se la
chiave c'e', recupera l'oggetto gia' completo, altrimenti la recupera dal DB
e la inserisce nella cache.
Essendo l'unico oggetto ci accesso al DB, ci sono i metodi di update, delete
e insert su DB per cui sa quando invalidare la cache.
Tutto cio' funziona se l'oggetto Cache gestito dall'applicazione e' unico,
in modo che unica sia la struttura che mantiene i dati in cache (ovvero la
collection).
Ancora in VB non ho capito come creare piu' istanze dello stesso oggetto che
condividono la stessa proprieta' (cioe' proprio lo stesso dato): questo si
fa in C++ o Java con il costrutto static (che ha un senso diverso in VB). Se
avessi piu' istanze che condividono la stessa proprieta', diversi client
potrebbero referenziare piu' oggetti cache che pero' usano la stessa
struttura dati. Chiaramente l'accesso alla struttura dati dovrebbe essere
serializzata.
Purtroppo ancora non ho trovato esempi di cache di questo tipo fatti in VB.
Pietro


Potresti riuscirci con un ActiveX Exe, che e' out-of-process, e mettendo le
variabili in un modulo (non di classe); non ricordo se sia possibile
definire GlobalMultiuse un oggetto in un exe activex...
Ciaotutti,
*