Blocco ottimista e pessimistico nella cache
La necessità del blocco sorge ogni volta che sono presenti risorse condivise nel proprio ambiente. Le risorse condivise da più di un utente possono causare incoerenze nei dati. Problemi come questi possono essere gestiti al meglio tramite Locking. Utilizzando il meccanismo di blocco, il set di dati critici diventa tollerante agli errori fornendo all'utente atomicità, coerenza e isolamento.
Note:
Questa funzionalità è disponibile anche in NCache Professional.
NCache fornisce un efficiente meccanismo di blocco per la sincronizzazione e l'integrità dei dati all'interno dell'archivio cache aggiornato da diversi client paralleli. NCache il blocco interno garantisce la coerenza dei dati nell'intero cluster di cache per ogni aggiornamento degli stessi dati. Inoltre, NCache fornisce API per bloccare dati cache specifici, in modo che solo un singolo thread o applicazione possa aggiornarli o leggerli.
Quando utilizzare il blocco
Dichiarazione problema
Considera uno scenario in cui esiste un conto bancario unico utilizzato da due titolari di conto. Il conto contiene un saldo di $ 5000. L'utente 1 desidera prelevare $ 2000 dal conto e l'utente 2 desidera depositare $ 1000 sul conto. Considerando le condizioni date, il saldo del conto dopo aver eseguito queste operazioni deve essere pari a $ 4000 (5000-2000 = 3000 e 3000+1000 = 4000).
Consideriamo ora che entrambi gli utenti desiderano eseguire questa operazione sull'account contemporaneamente e poiché non esiste una gestione adeguata dello scenario, si verificano le seguenti cose:
L'utente 1 controlla il saldo del conto e mostra $ 5000. Preleva $ 2000 e il saldo totale diventa $ 3000.
L'utente 2 controlla il saldo del conto e mostra $ 5000. Deposita $ 1000 e il saldo totale diventa $ 6000.
Il diagramma seguente illustra visivamente lo scenario.
Soluzione
Per risolvere questo problema di risorse condivise è possibile utilizzare due approcci.
Il primo approccio è bloccare il conto bancario per qualsiasi ulteriore operazione su di esso quando un utente sta già eseguendo qualsiasi tipo di operazione su di esso.
Il secondo approccio utilizza un meccanismo in cui un conto bancario è aperto per l'utilizzo da parte di entrambi gli utenti, ma la versione del conto bancario viene aggiornata riguardo all'ora corrente per ogni operazione eseguita. In questo modo la nuova versione sarà disponibile per le operazioni dell'utente.
NCache fornisce entrambi i meccanismi di blocco noti come blocco pessimistico e ottimistico. Essi vengono ulteriormente spiegati nei capitoli successivi.
Tipi: blocco ottimistico e pessimistico
Sono disponibili due tipi di blocco NCache:
Blocco pessimistico (blocco esclusivo)
Il blocco pessimistico è un meccanismo in cui un oggetto viene bloccato esclusivamente utilizzando aLockHandle
a causa della quale l'elemento rimane inaccessibile ad altri utenti mentre è bloccato.Blocco ottimistico (versioning dell'elemento cache)
Il blocco ottimistico è un meccanismo in cui il controllo delle versioni degli elementi viene utilizzato per bloccare un elemento. Utilizzando questo meccanismo, un elemento è aperto per l'utilizzo da parte di un altro utente, ma ad ogni operazione eseguita su un elemento, la versione dell'elemento si aggiorna automaticamente.
Vedere anche
.NETTO: Alachisoft.NCache.Memorizzazione.della.cache spazio dei nomi.
Giava: com.alachisoft.ncache.cache.di.runtime spazio dei nomi.
Node.js: Cache classe.
Pitone: ncache.cache.di.runtime classe.