En estos días, muchas empresas requieren el poder de procesamiento para manejar grandes cantidades de datos transaccionales y de referencia durante las horas pico. Por ejemplo, los bancos que procesan las transacciones de los clientes durante las vacaciones. Sin embargo, un gran desafío es procesar estos datos sin obstaculizar el rendimiento de su aplicación. Generalmente, los niveles de aplicación son linealmente escalables, pero las bases de datos no lo son. Las altas cargas transaccionales pueden provocar un cuello de botella en la base de datos y abrumar su sistema. Este cuello de botella se puede resolver mediante la introducción de un almacenamiento en caché distribuido en memoria para la aplicación .NET para un acceso más rápido a los datos.
Una caché distribuida en memoria abarca varios servidores, pero funciona como una única instancia de caché y es transparente para las aplicaciones que la utilizan. Reduce la carga de los servidores back-end y las bases de datos, ya que cualquier dato activo o transitorio se sirve desde la memoria caché.
NCache Detalles Agrupación dinámica Almacenamiento en caché distribuido
NCache es un De código abierto, caché distribuida en memoria para aplicaciones basadas en .NET y Java. NCache ayuda a lograr velocidades transaccionales rápidas y consistencia de datos a medida que se agregan nuevos servidores a este clúster de caché para satisfacer sus crecientes necesidades de rendimiento.
La siguiente figura ilustra esta arquitectura:
Los datos almacenados en caché se distribuyen por igual entre todos los servidores e incluso se replican para evitar la pérdida de datos y garantizar alta disponibilidad. Por lo tanto, la memoria caché distribuida maneja cientos de miles de solicitudes por segundo, lo que evita el tiempo de inactividad durante los picos de carga.
Esta estructura distribuida garantiza que no haya ningún punto único de falla, ya que incluso si un servidor de caché está inactivo, recibe datos de los otros nodos del servidor. Por lo tanto, su negocio no se ve afectado y puede agregar fácilmente más servidores al caché distribuido si es necesario.
Los datos ideales para el almacenamiento en caché incluyen la lectura intensiva con frecuencia, pero que se modifican ocasionalmente para lograr el máximo rendimiento de las cachés distribuidas. Las cachés distribuidas almacenan los datos como valor clave pares, lo que facilita su uso y acceso.
NCache Detalles Agrupación dinámica Topologías de almacenamiento en caché
Usar NCache como caché distribuida
Junto con un aumento espectacular del rendimiento de sus aplicaciones .NET, las cachés distribuidas como NCache proporcionar múltiples características avanzadas que hacen que el uso de la memoria caché sea aún más flexible para satisfacer diferentes casos de uso y necesidades comerciales, incluidas las siguientes.
NCache Operaciones CRUD
Puede incorporar fácilmente un caché distribuido en su aplicación .NET al conectandose a la cache y creando una clave contra su elemento de caché obtenido de la base de datos. A continuación, puede insertar el elemento en la memoria caché con una caducidad de 30 minutos y recuperarlo mediante esta conexión.
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 Detalles Caducidad móvil NCache
Sincronizar Cdolor con Base de datos
Puede haber un caso en el que se cambien los datos almacenados en caché en la base de datos. Esta situación plantea un problema de integridad que vuelve obsoletos los datos almacenados en caché mientras la aplicación no lo sabe. Para resolver este problema, NCache puede sincronizar automáticamente su caché con la base de datos. En consecuencia, cada vez que se produzca algún cambio en la base de datos de un registro almacenado en caché, se eliminará automáticamente del caché para garantizar la actualización de los datos.
Para ayudar aún más con este mecanismo, NCache apoya Escriba por medio de, Cargador y actualizacióny tienda de persistencia que mantiene los datos en el caché sincronizados con la base de datos.
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 Detalles Sincronización de base de datos Dependencia de datos de caché
Consultas SQL
NCache apoya un SQL mecanismo de consulta que le permite buscar en su caché de acuerdo con un criterio dado y devuelve el conjunto de resultados requerido. NCache utiliza un lenguaje de consulta que está muy cerca del lenguaje estructurado de SQL nativo, lo que facilita la consulta de datos en caché indexados. Proporciona API compatibles con ADO.NET como Ejecutar Lector, Ejecutar Escalary ExecuteNonQueryExecuteNonQuery para buscar (SELECCIONAR) y eliminar (ELIMINAR) datos del caché.
NCache Detalles Compatibilidad con SQL y LINQ en NCache consulta SQL
ExecuteReader se utiliza para buscar datos y devolver pares clave-valor. Mientras usa el método ExecuteReader, puede especificar si desea que solo se devuelvan las claves o las claves y sus datos (ya sea en su totalidad o en fragmentos).
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"); } |
Consultas LINQ
LINQ es un lenguaje de consulta genérico de .NET que le permite buscar y filtrar datos de su fuente de datos. La sintaxis de LINQ es bastante similar a SQL, pero en cuanto a funcionalidades, le brinda métodos de consulta mejores y más optimizados al consultar su NCache servidores. Brinda la capacidad de permitir expresiones de consulta más eficientes mientras se ocupa de la verificación de sintaxis durante la compilación del código.
NCache integra a la perfección LINQ para consultar información dentro de la memoria caché a través de un proveedor de LINQ. El proveedor de enlaces facilita la ejecución de consultas LINQ sobre la memoria caché distribuida mientras mejora el rendimiento de la aplicación sin cambiar el modelo de objetos LINQ.
Las expresiones de consulta consultan y transforman datos de sus servidores de caché distribuida habilitados para LINQ.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache Detalles LINQ para almacenamiento en caché distribuido IQueryable
Pensamientos Finales
Aparte de proporcionar rendimiento y escalabilidad, NCache proporciona un otras características útiles también. Y, sin embargo, oculta su complejidad relacionada con la implementación y brinda una forma sencilla de usarlo. Si está buscando un caché distribuido basado en .NET, sin comprometer el rendimiento y la escalabilidad, no busque más. NCache. Es una plataforma .NET pura con todas las campanas y silbatos del almacenamiento en caché distribuido moderno.