Mongo DB es un NoSQL, base de datos escalable, de código abierto, de alto rendimiento y orientada a documentos. es uno de los mejores NoSQL databases en el mercado. El uso del almacenamiento en caché con Mongo DB brinda a las aplicaciones un aumento significativo del rendimiento al reducir los viajes a la base de datos. Sin embargo, el almacenamiento en caché de datos de Mongo DB dentro de un caché distribuido crea dos copias de estos datos. Una copia reside dentro de Mongo DB y una copia reside dentro del caché distribuido. Si una aplicación cambia los datos dentro de Mongo DB directamente, los datos dentro del caché se vuelven obsoletos.
Para aplicaciones de alto nivel de transacciones, multientorno y de nivel empresarial, estos datos obsoletos son un gran problema. En este blog, discutiré cómo puede continuar usando un caché distribuido junto con Mongo DB y evitar el problema de datos obsoletos al mismo tiempo.
Sincronizar caché con Mongo DB usando NCache
NCache es un conocido caché distribuido para .NET Framework/ .NET Core, Java y Node.js. NCache proporciona un amplio conjunto de funciones que pueden mejorar el rendimiento de su aplicación a pasos agigantados. Entre estos vastos conjuntos de características se encuentra una característica conocida como Dependencia extensible basada en notificaciones. Esta característica soluciona el problema de datos obsoletos con MongoDB (que discutimos anteriormente).
El NotifyExtensibleDependency
class le permite escribir su lógica de dependencia personalizada en la que se le notifican los cambios que tienen lugar dentro de la base de datos a través de notificaciones. NCache procesa estas notificaciones haciendo uso de una función de Mongo DB (introducida en la versión 3.6) conocida como Cambiar secuencia. Una vez que se procesan estas notificaciones, los datos obsoletos dentro del caché se invalidan según el código que haya escrito.
La lógica de Change Stream está integrada dentro del NotifyExtensibleDependency
. Puede modificar este Flujo de cambios para recibir notificaciones sobre las operaciones de agregar, actualizar o eliminar que tienen lugar dentro de la base de datos. Sin embargo, las operaciones de eliminación no se pueden rastrear. Por lo tanto, para realizar un seguimiento de las operaciones de eliminación, se utiliza una operación de actualización con vencimiento.
También debe tenerse en cuenta que Mongo DB no admite Change Stream para bases de datos independientes. Debe asegurarse de que su base de datos Mongo DB tenga un conjunto de réplicas para que funcione la función Change Stream.
NCache Detalles NCache NotifyExtensibleDependencyNotifyExtensibleDependency NCache Docs
Sincronizar caché con Mongo DB: un ejemplo rápido
Para usar Mongo DB con NCache necesitas configurar Dependencia personalizada in NCache primero y luego impleméntelo en su aplicación cliente después. Esto se explica a continuación:
NCache Configuración de dependencia personalizada
Para utilizar la función Dependencia extensible basada en notificaciones de NCache con Mongo DB, necesita configurar dependencia personalizada on NCache primero e implemente su(s) archivo(s) DLL respectivo(s) en el NCache Server.
En el GIF a continuación, implementé un proveedor llamado MongoDbNotifyExtensibleDependencyProvider
junto con todas sus dependencias en el caché. Implementa el ICustomDependencyProvider
interfaz. Es responsable de crear un objeto de dependencia para el Artículo de caché. Para que la dependencia se active correctamente, el NotifyExtensibleDependency
la clase debe ser implementada. Esta clase escuchará el flujo de cambios de MongoDB y activará las dependencias al cambiar los datos en Mongo DB.
Además, en este ejemplo, estoy usando una implementación de código abierto de ICustomDependencyProvider
y NotifyExtensibleDependency
disponible en GitHub.
NCache Detalles Configuración de dependencia personalizada Repositorio GitHub
Implementación en la aplicación del cliente
Por ejemplo, desea utilizar Mongo DB como base de datos para su tienda de comercio electrónico y desea almacenar en caché los datos de uso frecuente dentro NCache. Su tienda contendrá datos de más de un millón de productos y se realizarán millones de transacciones diariamente. NCache ayudará a reducir la carga en su base de datos Mongo DB, pero los datos dentro del caché son propensos a quedarse obsoletos.
Tener datos obsoletos dentro del caché puede causar problemas para usted y sus clientes. Afortunadamente, la función Dependencia extensible basada en notificaciones de NCache mitiga el problema de los datos obsoletos asegurando la funcionalidad óptima de su tienda de comercio electrónico.
En el siguiente ejemplo, un producto se carga desde la base de datos en función de su ID. Entonces NotifyExtensibleDependency
se crea y se registra en el producto obtenido. Finalmente, el producto, en forma de Artículo de caché se inserta en la memoria caché con la clave especificada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Product product = LoadProductFromDatabase(productId); //This is the name of your provider deployed on a cache server string providerName = "MongoDbNotifyExtensibleDependencyProvider"; string key = "Product:" + product.Id ; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("ConString", "mongodb://**.**.**.**:27017"); parameters.Add("DatabaseName", "productscollection"); parameters.Add("CollectionName", "products"); CacheItem item = new CacheItem(product); item.Dependency = new CustomDependency(providerName, parameters); _cache.Insert(key, item); |
NCache Detalles NotificarExtensibleDependencia Operaciones de caché en NCache
Uso del proveedor de lectura simultánea
Otra característica destacada de NCache son los Proveedor de lectura. Esta característica le permite buscar datos dentro de Mongo DB directamente cuando no se encuentran en el caché. Cuando el elemento se encuentra dentro de la base de datos, también se almacena dentro del caché automáticamente; por lo tanto, ahorrándole un tiempo precioso. Puede utilizar esta función en sus aplicaciones Mongo DB para mejorar aún más su rendimiento.
El siguiente ejemplo de código recupera un elemento con lectura a través habilitada, correspondiente a la clave especificada "Producto: 1001" usando el Get<>
método.
1 2 3 4 5 6 7 8 9 |
// Specify the key of the item string key = "Product:1001"; // Specify the readThruOptions for read through operations var readThruOptions = new ReadThruOptions(); readThruOptions.Mode = ReadMode.ReadThru; // Retrieve the data of the corresponding item with reads thru enabled Product product = cache.Get(key, readThruOptions); |
NCache Detalles Leer a través del almacenamiento en caché Operaciones de caché en NCache
Conclusión
Para resumir, NCache ofrece una solución flexible para sincronizar datos entre Mongo DB y el caché, evitando así la inconsistencia de datos. NCache, una solución de almacenamiento en caché distribuida en memoria, puede ser un medio ideal para Mongo DB para mantener datos actualizados para un acceso y procesamiento rápidos.