DomuS3D Client Server utilizza una cache distribuita per ridurre al minimo il traffico di rete tra i singoli client e il server
Lettura
Quando un client ha bisogno di un file F presente sul database del server, questa è la procedura seguita:
Td: Istante in cui il file è stato scaricato
Now: Istante attuale
Δ(F): Timeout della cache per il file F
Tm: Istante di ultima modifica del file nella cache
Tms: Istante di ultima modifica del file sul server
____: Accesso alla rete
Scrittura
Quando un client ha bisogno di modificare (o inserire) un file F presente sul database del server vengono aggiornate sempre sia la copia remota sul server sia la copia locale in cache secondo la politica write-through.
Ottimizzazione del traffico di rete
Configurazione del timeout della cache
La cache può essere ottimizzata agendo sul parametro Δ(F) che rappresenta il timeout della cache per il file F; tale parametro può essere impostato agendo sulla chiave di registro CSCacheTimeoutMin che deve essere una stringa costruita in questo modo:
<path1>| Δ(<path1>);<path2>| Δ(<path2>);…;*| Δ(*).
Ad esempio impostando CSCacheTimeoutMin=”Bitmap|60;Projects|-1;*|3” abbiamo che tutti i file che contengono “Bitmap” nel loro path hanno un timeout di 60 minuti, tutti quelli che contengono “Projects” nel loro path hanno un timeout pari a -1 minuti (-> controllo del timeout disabilitato, si accede sempre alla rete) e tutti i restanti hanno un timeout di 3 minuti.
In generale tanto più Δ(F) è alto tanto più è basso il traffico di rete e tanto più è alto il rischio di ottenere un file non aggiornato e viceversa; agli estremi ponendo Δ(F)=0 si ha il massimo traffico (si accede sempre alla rete), ma è certo che il file è sempre corretto e ponendo Δ(F)=∞ si ha il minimo traffico (si accede alla rete solo la prima volta), ma se il file viene cambiato sul server il client non si accorge della modifica.
Conoscendo a priori la frequenza di aggiornamento di un file, il valore ottimale di Δ(F) risulta essere pari al suo inverso; in particolare se F non viene mai cambiato una volta creato, il valore ottimale sarà Δ(F)=∞. Non conoscendo a priori la frequenza di aggiornamento di un file, si tenderà ad utilizzare valori alti di Δ(F) in caso di reti lente e valori bassi in caso di reti veloci.
Precaricamento e svuotamento della cache
E’ possibile effettuare un precaricamento (prefetch) della cache utilizzando l’apposito comando presente nel menu Server->Cache->Precarica. In questo modo è possibile precaricare i dati nella cache in momenti in cui la rete è scarica oppure un’attesa non comporta problemi, così da avere la massima velocità nel periodo successivo.
E’ inoltre possibile svuotare la cache utilizzando il comando Server->Cache->Svuota, in maniera da recuperare spazio su disco ed forzare il download dei file presenti sul server al successivo accesso.
Durante il precaricamento della cache di assume Δ(F)=0 per qualsiasi file F indipendentemente dal valore impostato in configurazione. In questo modo impostando in configurazione Δ(F)=∞ e sfruttando il precaricamento/svuotamento si riesce ad avere una gestione sostanzialmente manuale della cache, utile in condizioni di rete estremamente lenta.
Esempi
Rete veloce: in questo caso si può impostare Δ(F)=∞ per i file che non cambiano mai e Δ(F)=0 per tutti gli altri. Ad esempio se sappiamo che il catalogo del produttore “xxxxx” una volta caricato non viene mai modificato imposteremo CSCacheTimeoutMin=”Bitmap\xxxxx|999999;*|0”.
Rete lenta: in questo caso si può impostare Δ(F)=∞ per i file che non cambiano mai e Δ(F) uguale a circa l’inverso della frequenza con cui si stima possano cambiare tutti gli altri; se un utente si accorge di non avere un file aggiornato, dovrà effettuare un aggiornamento della cache con il comando "Aggiorna"