Cache distribuita sta diventando molto popolare perché è un modo efficace per aumentare le prestazioni e la scalabilità delle applicazioni e gestire il carico di transazioni estremo senza rallentamenti. Sia le applicazioni .NET che Java lo utilizzano ogni giorno di più.
Ma una sfida che le persone devono affrontare con la cache distribuita è come mappare e archiviare dati relazionali in una memoria di associazione HashTable (chiave, valore) che è una cache distribuita. La maggior parte delle cache oggi non fornisce alcun meccanismo per gestirlo. Oggi parlerò della dipendenza dai dati fornita da ASP.NET Cache e altro NCache incorporato dal primo giorno.
Proprio come ASP.NET Cache, in NCache, Dipendenza dai dati consente di specificare una dipendenza nella cache distribuita tra due elementi memorizzati nella cache. L'elemento memorizzato nella cache A dipende dall'elemento memorizzato nella cache B. E, se B viene aggiornato o rimosso dalla cache distribuita, A viene automaticamente rimosso. Ciò garantisce che se esiste un vincolo di integrità referenziale tra A e B nel database, esso venga rispettato anche nella cache distribuita. Puoi anche specificare la dipendenza dei dati a cascata dove A dipende da B e B dipende da C. Quindi, se aggiorni o rimuovi C, A e B vengono entrambi rimossi. Ecco un breve esempio di dipendenza dai dati:
NCache Dettagli Gestione dei dati relazionali Documenti sulla dipendenza dai dati
La dipendenza dai dati consente di creare relazioni uno-a-uno, uno-a-molti e molti-a-molti nella cache distribuita. Ecco come gestiresti diversi scenari:
Rapporto uno a uno
A ha tra due persone con B. Aggiungi B senza alcuna dipendenza dai dati. Quindi, aggiungi A e specifica una dipendenza dai dati per B. Se A e B hanno entrambi una dipendenza reciproca, quando aggiorna B in seguito e specifica una dipendenza da A.
Relazione uno a molti
A ha uno-a-molti con B. Aggiungi prima A senza alcuna dipendenza dai dati. Quindi, aggiungi uno o più elementi B e specifica una dipendenza dai dati per il dato A per tutti loro. In questo modo, se A viene aggiornato o rimosso, tutte le B verranno rimosse automaticamente da NCache.
Relazione molti-a-molti
A e B hanno molti a molti tra loro. Aggiungi una o più A. Quindi, aggiungi una o più B e specifica la dipendenza dai dati per le A appropriate. Quindi, torna indietro e aggiorna A per specificare la dipendenza dai dati sulle B appropriate.
Ecco un semplice esempio di creazione di una dipendenza uno-a-uno nella cache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public static void CreateDependencies(ICache _cache) { try { string keyB = "objectB-1000"; Object objB = new Object(); string keyA = "objectA-1000"; Object objA = new Object(); // Initializing cacheItems var itemOne = new CacheItem(objA); var itemTwo = new CacheItem(objB); // Adding objA dependent on ObjB itemOne.Dependency = new KeyDependency(keyB); //Adding items to cache _cache.Add(keyB, itemTwo); _cache.Add(keyA, itemOne); // Removing "objB" automatically removes “objA” as well _cache.Remove(keyB); _cache.Dispose(); } catch (Exception e) { throw; } } |
Così, NCache consente di sfruttare la dipendenza dai dati e specificare le relazioni tra i dati nella cache distribuita. Scarica una versione di prova di 60 giorni completamente funzionante di NCache Enterprise e provalo tu stesso.
Grazie per aver condiviso il blog, è stato ben spiegato sulla dipendenza dai dati, valeva la pena investire tempo nella lettura di questo blog.
Ciao Iqbal, grazie per aver condiviso l'articolo di iairnftove. Puoi spiegare la cache distribuita? Significa che la cache è mantenuta su diversi server frontend (fisici) e server DB? Ho uno scenario Frontend Server (FS) 1 che mantiene la cache locale C1. FS2 mantiene la propria cache locale C2. FS3 sta mantenendo la propria cache C3 locale. C'è un server DB che ha una cache globale GC. Tutta la cache locale C1, C2, C3 deve dipendere da GC. Se GC viene aggiornato, tutta la cache locale viene invalidata. Non so come funzionerà perché a mio parere non possiamo controllare la memoria sull'altro sistema? Per favore, getta un po' di luce su questo. Grazie Khusi
NCache è una cache distribuita in memoria fuori processo. Può formare un cluster di nodi cache in fase di esecuzione e può essere distribuito su più applicazioni.
Ecco come NCache gestirà il tuo scenario:
È possibile creare una cache cluster globale (ad esempio con 2 nodi nel cluster) sui server DB o sui server cache dedicati e quindi utilizzare la funzione "Client Cache" su ciascun server front-end FS1, FS2 e FS3. NCache La cache del client è una cache locale in esecuzione NCache caselle client (i server Web/App sono NCache client) e conserva una copia dei dati in locale sulla casella client a cui si accede più frequentemente dalla cache del cluster.
Le chiamate successive per gli stessi dati verranno servite direttamente dalla cache del client locale, offrendo maggiori prestazioni salvando i viaggi di rete, le cache dei client possono anche essere di natura in-proc.
La sincronizzazione dei dati è gestita automaticamente da NCache. In caso di aggiornamenti sulla cache cluster globale, le cache client invalideranno/rimuoveranno automaticamente gli elementi e porteranno una copia aggiornata dalla cache cluster al successivo accesso.
Ciao Iqbal,
Grazie per aver condiviso l'articolo informativo. Puoi spiegare la cache distribuita? Significa Cache mantenuta su diversi server frontend (fisici) e DB Server?
Ho uno scenario: Frontend Server (FS)1 mantiene la cache locale C1. FS2 mantiene la propria cache locale C2. FS3 sta mantenendo la propria cache C3 locale. C'è un server DB che ha una cache globale GC. Tutta la cache locale C1, C2, C3 deve dipendere da GC. Se GC viene aggiornato, tutta la cache locale viene invalidata. Non so come funzionerà perché a mio parere non possiamo controllare la memoria sull'altro sistema?
Per favore, fai un po' di luce su questo.
Grazie
Husi
È davvero un'informazione carina e utile. Sono contento che tu abbia condiviso queste informazioni utili con noi. Per favore, tienici informati in questo modo. Grazie per la condivisione.