Al giorno d'oggi, molte aziende richiedono la potenza di elaborazione per gestire un numero elevato di dati transazionali e di riferimento durante le ore di punta. Ad esempio, le banche che elaborano le transazioni dei clienti durante le vacanze. Tuttavia, una grande sfida consiste nell'elaborare questi dati senza ostacolare le prestazioni dell'applicazione. In genere, i livelli dell'applicazione sono scalabili in modo lineare, ma non i database. Carichi transazionali elevati possono causare un collo di bottiglia del database e sovraccaricare il sistema. Questo collo di bottiglia può essere risolto introducendo una memorizzazione nella cache distribuita in memoria nell'applicazione .NET per un accesso più rapido ai dati.
Una cache distribuita in memoria si estende su più server ma funziona come una singola istanza della cache ed è trasparente per le applicazioni che la utilizzano. Riduce il carico da server e database back-end poiché tutti i dati attivi o temporanei vengono serviti dalla cache.
NCache Dettagli Clustering dinamico Caching distribuito
NCache offre open-source, cache distribuita in memoria per applicazioni basate su .NET e Java. NCache aiuta a raggiungere velocità transazionali elevate e coerenza dei dati man mano che nuovi server vengono aggiunti a questo cluster di cache per soddisfare le crescenti esigenze di prestazioni.
La figura seguente illustra questa architettura:
I dati memorizzati nella cache sono equamente distribuiti tra tutti i server e persino replicati per evitare la perdita di dati e garantire elevata disponibilità. Pertanto, la cache distribuita gestisce centinaia di migliaia di richieste al secondo, prevenendo i tempi di inattività durante i picchi di carico.
Questa struttura distribuita garantisce l'assenza di un singolo punto di errore poiché anche se un server cache è inattivo, riceve i dati dagli altri nodi del server. Pertanto, la tua azienda non è interessata e può facilmente aggiungere più server alla cache distribuita, se necessario.
I dati ideali per la memorizzazione nella cache includono la lettura intensiva di frequente ma occasionalmente modificati per ottenere le massime prestazioni delle cache distribuite. Le cache distribuite memorizzano i dati come valore-chiave coppie, semplificando così l'utilizzo e l'accesso.
NCache Dettagli Clustering dinamico Topologie di memorizzazione nella cache
utilizzando NCache come cache distribuita
Insieme a un notevole aumento delle prestazioni delle tue applicazioni .NET, cache distribuite come NCache fornire multipli funzionalità avanzate che rendono l'utilizzo della cache ancora più flessibile per soddisfare diversi casi d'uso ed esigenze aziendali, inclusi quelli riportati di seguito.
NCache Operazioni CRUD
Puoi facilmente incorporare una cache distribuita nella tua applicazione .NET tramite connessione alla cache e creando una chiave per l'elemento della cache recuperato dal database. È quindi possibile inserire l'elemento nella cache con una scadenza di 30 minuti e recuperarlo utilizzando questa connessione.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Specify the cache name to connect with it ICache cache = CacheManager.GetCache("demoCache"); // Get product from database var product = FetchProductFromDB(1001); // Generate a key for the cache item string key = "Product:1001"; // Create cache item and add 30sec sliding expiration var cacheItem = new CacheItem(product); cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(30)); // Now add this item in cache for future use cache.Insert(key, cacheItem); // Fetch item from cache product = cache.Get(key); |
NCache Dettagli Scadenza scorrevole NCache
Sincronizza Csoffrire con Banca Dati
Potrebbe verificarsi un caso in cui i dati memorizzati nella cache nel database vengono modificati. Questa situazione solleva un problema di integrità che rende obsoleti i dati memorizzati nella cache mentre l'applicazione non ne è a conoscenza. Risolvere questo problema, NCache può sincronizzare automaticamente la tua cache con il database. Di conseguenza, ogni volta che si verifica una modifica nel database per un record memorizzato nella cache, questo verrà rimosso automaticamente dalla cache per garantire l'aggiornamento dei dati.
Per aiutare ulteriormente con questo meccanismo, NCache supporta Scrivere attraverso, Caricatore e aggiornamentoe Negozio di persistenza che mantiene i dati nella cache sincronizzati con il database.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
NCache Dettagli Sincronizzazione DB Dipendenza dai dati della cache
Query SQL
NCache supporta e SQL meccanismo di query per consentire di eseguire ricerche nella cache in base a un determinato criterio e restituire il set di risultati richiesto. NCache utilizza un linguaggio di query molto simile al linguaggio strutturato SQL nativo, che semplifica l'esecuzione di query sui dati memorizzati nella cache indicizzati. Fornisce API compatibili con ADO.NET come Esegui Lettore, Esegui Scalaree EseguiNonQuery per cercare (SELECT) e rimuovere (DELETE) i dati dalla cache.
NCache Dettagli Supporto SQL e LINQ in NCache Query SQL
ExecuteReader viene utilizzato per cercare dati e restituire coppie chiave-valore. Durante l'utilizzo del metodo ExecuteReader, è possibile specificare se si desidera che vengano restituite solo le chiavi o le chiavi e i relativi dati (nel loro insieme o in blocchi).
1 2 3 4 5 6 7 8 9 10 11 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
Query LINQ
LINQ è un linguaggio di query .NET generico che consente di cercare e filtrare i dati dall'origine dati. La sintassi di LINQ è abbastanza simile a SQL, ma nelle funzionalità fornisce metodi di query migliori e più ottimizzati durante l'esecuzione di query su NCache server. Fornisce la possibilità di consentire espressioni di query più efficienti mentre si occupa del controllo della sintassi durante la compilazione del codice.
NCache integra perfettamente LINQ per interrogare le informazioni all'interno della cache tramite un provider LINQ. Il provider di collegamento facilita l'esecuzione di query LINQ sulla cache distribuita migliorando al contempo le prestazioni dell'applicazione senza modificare il modello a oggetti LINQ.
Le espressioni di query interrogano e trasformano i dati dai server cache distribuita abilitati per LINQ.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache Dettagli LINQ per cache distribuita Interrogabile
Riflessioni conclusive
Oltre a fornire prestazioni e scalabilità, NCache fornisce altre utili funzioni anche. Eppure, nasconde la sua complessità relativa all'implementazione e offre un modo semplice per usarlo. Se stai cercando una cache distribuita basata su .NET, senza compromettere le prestazioni e la scalabilità, non cercare oltre NCache. È una piattaforma .NET pura con tutti i campanelli e i fischi della moderna cache distribuita