El almacenamiento en caché de datos de uso frecuente de su aplicación es un movimiento extremadamente competente. Pero asegurarse de que los datos almacenados en caché permanezcan sincronizados con su base de datos Oracle es el dilema. El truco para superar esto es usar vencimientos de datos en los que adivina el TTL (Tiempo de vida) del elemento y luego lo almacena en caché.
No importa cuán popular sea este esquema, esto sigue siendo una mera suposición sobre cuánto tiempo permanecerá sin cambios ese elemento en la base de datos. Y las conjeturas no siempre son precisas. Si su aplicación es sensible a los datos donde la obtención y el procesamiento de datos inexactos refuta su propósito, entonces usar la caducidad le costará mucho.
Lo que lo salva de esta situación es usar un mecanismo de sincronización de base de datos en su caché como NCache, que elimina automáticamente los datos de caché correspondientes si se actualiza en la base de datos de Oracle.
NCache Detalles Dependencia de caché en la base de datos Técnicas de caducidad de datos
Usar NCache para sincronizar con Oracle Server
Oracle Dependency utiliza notificaciones de eventos que notifican a todos los clientes de la base de datos cuando cambia un conjunto de datos en la base de datos. Información de fondo: NCache utiliza esta función para registrarse como cliente de Oracle Server. Esto significa que siempre que los datos cambien en el conjunto de datos de Oracle, NCache es notificado automáticamente. Usando esta información, NCache mantiene un mapa de todos los elementos almacenados en caché con sus conjuntos de datos correspondientes. Entonces, siempre que NCache recibe una notificación de un cambio, invalida el elemento de caché correspondiente del caché y recupera el actualizado la próxima vez que la aplicación cliente lo solicite.
vamos a sincronizar NCache con servidor Oracle
Voy a tomar un ejemplo simple de una aplicación de comercio electrónico (.NET Core basado) cuyo éxito entero radica en su precisión. Miles de clientes acceden a esta aplicación para realizar compras en línea cada minuto, por lo que los datos de esta aplicación se han almacenado en caché.
Ahora, tomemos un escenario muy común donde ClienteA compró la última Xbox Series X que tenía la tienda. El servidor de la aplicación elimina la cantidad de ese elemento de la base de datos, pero la memoria caché aún desconoce este cambio. Esta inconsistencia lleva a la ira del cliente cuando ClienteB le gusta el mismo producto, lo paga y recibe una notificación con un mensaje de pago exitoso, pero no recibe su última Xbox Series X.
Aquí, para asegurarse de que la aplicación no enfrente problemas de integridad de datos cada vez que los datos cambien en la base de datos principal de Oracle, NCache proporciona apoyo de Dependencia de Oracle.
Para utilizar esta función de dependencia, NCache le permite parametrizar su consulta de Oracle con OracleCacheDependencyOracleCacheDependency método que toma valores de parámetros en tiempo de ejecución. Hacer esto reducirá la cantidad de veces que su consulta debe compilarse en Oracle Server, por lo tanto, mejorará diez veces el rendimiento de la aplicación.
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 Detalles Dependencia de caché en Oracle Configurar el entorno de Oracle
Hay mucho más que puede hacer con OracleCacheDependency. Aquí hay una lista de algunas funciones muy útiles compatibles con esta dependencia de Oracle.
Elemento de caché de recarga automática a través del proveedor de lectura
OracleCacheDependency es responsable de invalidar un elemento de caché una vez que cambia en la fuente de datos. NCache proporciona un Proveedor de fuente de respaldo de lectura completa en caso de que desee que el caché no solo invalide, sino que también obtenga la última versión del elemento modificado del servidor de Oracle. Con Leer de parte a parte opción habilitada, NCache llama al Leer a través proveedor para obtener los datos actualizados cada vez que Oracle Server notifique a la memoria caché de un cambio.
El siguiente código explica cómo puede lograr esta funcionalidad:
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 Detalles Dependencia de caché en Oracle Proveedor de lectura
Dependencia de Oracle basada en procedimientos almacenados
NCache apoya Dependencia de Oracle basada en procedimientos almacenados si su preferencia radica en mantener todas sus consultas de Oracle dentro de la base de datos de Oracle. Estos procedimientos almacenados están precompilados en el servidor de Oracle y se ejecutan mucho más rápido que las consultas dinámicas de Oracle.
Para crear un procedimiento almacenado en Oracle, vea este ejemplo:
1 2 3 4 5 6 |
CREATE PROCEDURE SelectProduct (ProductID IN VarChar) AS BEGIN SELECT ProductID, Quantity, Price FROM Products WHERE ProductID = :productID; END; |
Llamar a este procedimiento almacenado en su aplicación .NET es fácil. Use el siguiente fragmento como ejemplo.
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 Detalles Dependencia de caché en Oracle Dependencia de Oracle mediante el procedimiento almacenado
Por qué sincronizar NCache con Oracle Server?
Nadie quiere que su aplicación en la que ha trabajado tan duro falle solo porque está procesando datos obsoletos. Pierdes tanto el negocio como la cara de esa manera. Pero NCache, para su comodidad, le proporciona Oracle Dependency que mantiene su caché sincronizada con su base de datos de Oracle para garantizar que la caché que está utilizando para su beneficio no le falle.
NCache Detalles Descargar NCache Comparación de ediciones