La memorizzazione nella cache dei dati utilizzati di frequente della tua applicazione è una mossa estremamente competente. Ma assicurarsi che i dati memorizzati nella cache rimangano sincronizzati con il database Oracle è il dilemma. Il trucco per superare questo problema consiste nell'utilizzare le scadenze dei dati in cui indovini il TTL (Time To Live) dell'elemento e quindi memorizzarlo nella cache.
Non importa quanto sia popolare questo schema, questa rimane una semplice supposizione plausibile su quanto tempo l'elemento rimarrà invariato nel database. E le ipotesi non sono sempre esatte. Se la tua applicazione è sensibile ai dati e il recupero e l'elaborazione di dati imprecisi ne confutano lo scopo, l'utilizzo della scadenza ti costerà molto.
Ciò che ti salva da questa situazione difficile è l'utilizzo di un meccanismo di sincronizzazione del database nella tua cache come NCache, che rimuove automaticamente i dati della cache corrispondenti se vengono aggiornati nel database Oracle.
NCache Dettagli Dipendenza della cache dal database Tecniche di scadenza dei dati
utilizzando NCache per sincronizzare con Oracle Server
Oracle Dependency utilizza notifiche di eventi che notificano a tutti i client del database quando un set di dati cambia nel database. Informazioni di back-end: NCache utilizza questa funzione per registrarsi come client di Oracle Server. Ciò significa che ogni volta che i dati cambiano nel set di dati Oracle, NCache viene automaticamente notificato. Utilizzando queste informazioni, NCache mantiene una mappa di tutti gli elementi memorizzati nella cache con i relativi set di dati. Quindi, ogni volta NCache riceve una notifica di una modifica, invalida l'elemento della cache corrispondente dalla cache e recupera quello aggiornato la prossima volta che l'app client lo richiede.
Sincronizziamo NCache con Oracle Server
Farò un semplice esempio di un'applicazione di e-commerce (.NET Core based) il cui intero successo risiede nella sua accuratezza. Migliaia di clienti accedono a questa applicazione per lo shopping online ogni minuto, quindi i dati di questa applicazione sono stati memorizzati nella cache.
Ora, prendiamo uno scenario molto comune in cui ClienteA ha acquistato l'ultima Xbox Series X che aveva il negozio. Il server dell'app rimuove la quantità di quell'elemento dal database ma la cache non è ancora a conoscenza di questa modifica. Questa incoerenza porta alla rabbia dei clienti quando ClienteB gli piace lo stesso prodotto, lo paga e viene avvisato con un messaggio di pagamento riuscito ma non riceve la sua ultima Xbox Series X.
Qui, per assicurarsi che l'applicazione non debba affrontare problemi di integrità dei dati ogni volta che i dati cambiano nel database Oracle principale, NCache fornisce supporto di Dipendenza da Oracle.
Per utilizzare questa funzione di dipendenza, NCache ti consente di parametrizzare la tua query Oracle con OracleCacheDependency metodo che accetta i valori dei parametri in fase di esecuzione. In questo modo si ridurrà il numero di volte in cui la query deve essere compilata su Oracle Server, migliorando di dieci volte le prestazioni dell'applicazione.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
string connectionString = ConfigurationManager.AppSettings["connectionstring"]; string query = "SELECT ROWID, ProductID, ProductName, UnitPrice FROM Products WHERE ProductID = :productID"; var param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.VarChar); param.Value = "XBoxX"; param.Direction = OracleParameterDirection.Input; // Adding the populated parameter to a dictionary Dictionary<string, OracleCmdParams> oracleParam = new Dictionary<string, OracleCmdParams>(); oracleParam.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, query, OracleCommandType.Text, oracleParam); Product product = FetchProductFromDB(param.Value); string key = $"Product:{product.ProductID}"; // Create a CacheItem, add Oracle dependency, and cache it var cacheItem = new CacheItem(product); cacheItem.Dependency = oracleDependency; cache.Insert(key, cacheItem); |
NCache Dettagli Dipendenza della cache da Oracle Configura l'ambiente Oracle
C'è molto di più che puoi fare con OracleCacheDependency. Ecco un elenco di alcune funzioni molto utili supportate con questa dipendenza Oracle.
Ricarica automaticamente l'elemento della cache tramite il provider di lettura passante
OracleCacheDependency è responsabile dell'invalidazione di un elemento della cache una volta modificato nell'origine dati. NCache fornisce Leggi attraverso il fornitore di fonti di supporto nel caso in cui desideri che la cache non solo invalidi, ma recuperi anche l'ultima versione dell'elemento modificato dal server Oracle. Insieme a Leggi tutto opzione abilitata, NCache chiama il Leggi attraverso provider per recuperare i dati aggiornati ogni volta che Oracle Server notifica una modifica alla cache.
Il codice seguente spiega come ottenere questa funzionalità:
1 2 3 4 5 6 7 8 9 |
// Create a new cache item and add oracle dependency to it CacheItem item = new CacheItem(product); item.Dependency = oracleDependency; // Resync if enabled, will automatically resync cache with Oracle server item.ResyncOptions = new ResyncOptions(true); //Add cache item in the cache with Oracle Dependency and Resync option enabled cache.Insert(key, item); |
NCache Dettagli Dipendenza della cache da Oracle Provider di lettura
Dipendenza Oracle basata su stored procedure
NCache supporta Dipendenza Oracle basata su stored procedure se la tua preferenza risiede nel mantenere tutte le tue query Oracle all'interno del database Oracle. Queste procedure memorizzate sono precompilate sul server Oracle e vengono eseguite molto più velocemente delle query Oracle dinamiche.
Per creare una stored procedure in Oracle, vedere questo esempio:
1 2 3 4 5 6 |
CREATE PROCEDURE SelectProduct (ProductID IN VarChar) AS BEGIN SELECT ProductID, Quantity, Price FROM Products WHERE ProductID = :productID; END; |
Chiamare questa stored procedure nella tua applicazione .NET è facile. Usa il seguente snippet come esempio.
1 2 3 4 5 6 7 8 9 10 |
OracleCmdParams param = new OracleCmdParams(); param.Type = (OracleCmdParamsType.VarChar); param.Value = "XBoxX"; param.Direction = OracleParameterDirection.Input; var oracleCmdParams = new Dictionary<string, OracleCmdParams>(); oracleCmdParams.Add("productID", param); // Create Oracle Dependency var oracleDependency = new OracleCacheDependency(connString, SelectProduct, OracleCommandType.StoredProcedure, oracleCmdParams); |
NCache Dettagli Dipendenza della cache da Oracle Dipendenza Oracle tramite Stored Procedure
Perché sincronizzare NCache con Oracle Server?
Nessuno vuole che la propria applicazione su cui hanno lavorato così duramente fallisca solo perché sta elaborando dati obsoleti. Perdi entrambi gli affari e affronti in quel modo. Ma NCache, con grande facilità, ti fornisce Oracle Dependency che mantiene la tua cache sincronizzata con il tuo database Oracle per garantire che la cache che stai utilizzando a tuo vantaggio non ti deluderà.
NCache Dettagli Scaricare NCache Confronto edizione