Caché distribuida se está volviendo muy popular porque es una forma poderosa de aumentar el rendimiento y la escalabilidad de su aplicación y manejar la carga extrema de transacciones sin ralentizar. Tanto las aplicaciones .NET como Java lo utilizan cada día más.
Sin embargo, un desafío al que se enfrenta la gente con la caché distribuida es cómo mapear y almacenar datos relacionales en un almacenamiento de emparejamiento HashTable (clave, valor) que es un caché distribuido. La mayoría de los cachés actuales no proporcionan ningún mecanismo para manejar esto. Hoy hablaré sobre la dependencia de datos que proporciona ASP.NET Cache y que NCache incorporada desde el primer día.
Al igual que ASP.NET Cache, en NCache, Dependencia de datos le permite especificar una dependencia en el caché distribuido entre dos elementos almacenados en caché. El elemento almacenado en caché A depende del elemento almacenado en caché B. Y, si B alguna vez se actualiza o elimina de la caché distribuida, A se elimina automáticamente. Esto asegura que si hay una restricción de integridad referencial entre A y B en la base de datos, también se respeta en la memoria caché distribuida. También puede especificar la Dependencia de datos en cascada donde A depende de B y B depende de C. Luego, si actualiza o elimina C, A y B se eliminan. Aquí hay un breve ejemplo de dependencia de datos:
NCache Detalles Gestión de datos relacionales Documentos de dependencia de datos
La dependencia de datos le permite crear relaciones de uno a uno, de uno a muchos y de muchos a muchos en la memoria caché distribuida. Así es como manejaría diferentes escenarios:
Relación uno a uno
un tiene chat de texto con B. Agregue B sin ninguna dependencia de datos. Luego, agregue A y especifique una Dependencia de datos para B. Si A y B tienen una dependencia mutua, luego actualice B y especifique una dependencia en A.
Relación uno a muchos
un tiene uno a muchos con B. Agregue A primero sin ninguna dependencia de datos. Luego, agregue uno o más elementos B y especifique una Dependencia de datos para el A dado para todos ellos. De esta forma, si A se actualiza o elimina, todas las B se eliminarán automáticamente NCache.
Relación de muchos a muchos
A y B tienen muchos a muchos entre sí. Agregue una o más A. Luego, agregue una o más B y especifique Dependencia de datos para las A correspondientes. Luego, regrese y actualice las A para especificar la Dependencia de datos en las B apropiadas.
Aquí hay un ejemplo simple de cómo crear una dependencia uno a uno en caché.
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; } } |
¿Entonces NCache le permite aprovechar la dependencia de datos y especificar relaciones de datos en la memoria caché distribuida. Descargue una versión de prueba de 60 días totalmente funcional de NCache Enterprise y pruébalo por ti mismo.
Gracias por compartir el blog, se explicó muy bien sobre la dependencia de datos, valió la pena invertir tiempo leyendo este blog.
Hola Iqbal, gracias por compartir el artículo imairnftove. ¿Puede explicar el caché distribuido? ¿Significa que el caché se mantiene en diferentes servidores frontend (físicos) y DB Server? Tengo un escenario que el servidor frontend (FS) 1 mantiene el caché local C1. FS2 mantiene su propio caché local C2. FS3 mantiene su propio cacheC3 local. Hay DB Server que tiene GC de caché global. Todo el caché local C1, C2, C3 debe depender de GC. Si se actualiza GC, se invalida todo el caché local. No sé cómo va a funcionar esto porque, en mi opinión, no podemos controlar la memoria en el otro sistema. Por favor, arroje algo de luz sobre esto. Gracias, Khusi.
NCache es una caché distribuida en memoria fuera de proceso. Puede formar un grupo de nodos de caché en tiempo de ejecución y puede distribuirse entre múltiples aplicaciones.
Aquí es cómo NCache manejará su escenario:
Puede crear una memoria caché en clúster global (por ejemplo, tener 2 nodos en un clúster) en los servidores de base de datos o servidores de memoria caché dedicados y luego puede utilizar la función "Caché de cliente" en cada servidor front-end FS1, FS2 y FS3. NCache La memoria caché del cliente es una memoria caché local que se ejecuta en NCache buzones de clientes (los servidores Web/App son NCache clientes) y mantiene una copia de los datos localmente en el cuadro del cliente al que se accede con más frecuencia desde la memoria caché agrupada.
Las llamadas subsiguientes para los mismos datos se atenderán directamente desde la memoria caché del cliente local, lo que brindará un mayor rendimiento al ahorrar viajes de red; las memorias caché del cliente también pueden estar en proceso por naturaleza.
La sincronización de datos es gestionada automáticamente por NCache. En caso de actualizaciones en la memoria caché en clúster global, las memorias caché de los clientes invalidarán/eliminarán elementos automáticamente y traerán una copia actualizada de la memoria caché en clúster en el acceso posterior.
Hola Iqbal,
Gracias por compartir artículo informativo. ¿Puede explicar el caché distribuido? ¿Significa que el caché se mantiene en diferentes servidores frontend (físicos) y DB Server?
Tengo un escenario: el servidor front-end (FS) 1 mantiene el caché local C1. FS2 mantiene su propio caché local C2. FS3 mantiene su propio cacheC3 local. Hay DB Server que tiene GC de caché global. Todo el caché local C1, C2, C3 debe depender de GC. Si se actualiza GC, se invalida todo el caché local. No sé cómo va a funcionar esto porque, en mi opinión, no podemos controlar la memoria en el otro sistema.
Por favor alumbrame esto.
Muchas Gracias
Jusi
Es realmente una buena y útil pieza de información. Me alegro de que hayas compartido esta información útil con nosotros. Por favor, manténganos informados de ésta forma. Gracias por compartir.