Escuhaste sobre eBay usando MongoDB como su base de datos principal? Ahora bien, ¿por qué una empresa multinacional de comercio electrónico como eBay usaría MongoDB y no un RDBMS tradicional? Esto se debe a que MongoDB ha sido un tema candente entre los desarrolladores por su almacenamiento distribuido de clave-valor y orientado a documentos. NoSQL características. Y, si eBay lo está usando, estoy seguro de que su aplicación de comercio electrónico también usa MongoDB.
Olvídate de eBay. Tomemos su aplicación de comercio electrónico y analicemos sus datos básicos y sus necesidades de rendimiento. Ahora en tu .NET/.NET Core aplicación, ¿alguna vez ha sentido que el rendimiento se ve comprometido porque tiene solicitudes limitadas por segundo? ¿Ha notado el retraso de tiempo en las llamadas de lectura/escritura a su base de datos basada en disco? ¿Ha tenido la sensación de que, incluso con todas sus maravillosas características, MongoDB todavía carece de un cierto enlace que podría darle gloria a su aplicación?
Esto, mi amigo, es donde alguien (yo) te empuja (solo virtualmente) y te presenta NCache en su vida. NCache es una memoria, distribuida y altamente escalable caché que permanece junto a su aplicación en todo momento; mejorando la tasa de transacción y, por lo tanto, convirtiéndolo en la solución perfecta para todas sus necesidades de almacenamiento en caché. Hagamos un pequeño recorrido de cómo puede obtener lo mejor de su aplicación usando NCache.
NCache Detalles Sincronizar caché con base de datos NCache NoSql Almacenamiento de Datos
Usar NCache como caché distribuida con MongoDB
Con una aplicación de comercio electrónico altamente transaccional como la suya que se ejecuta en un entorno de múltiples servidores, no puede permitirse el lujo de tener un único caché de servidor que entretenga todas sus solicitudes de datos. Cuanto mayor sea la carga en su aplicación, mayores serán las posibilidades de que su caché se ahogue con las solicitudes.
Puede llegar un momento durante la ejecución de su aplicación en el que la carga de transacciones en su aplicación aumente y la cantidad de servidores de caché configurados inicialmente no sea suficiente para recibir las solicitudes entrantes. Aquí es donde NCache escala sin problemas su aplicación al permitirte agregue servidores de caché adicionales en tiempo de ejecución por lo que la memoria caché nunca se convierte en un cuello de botella para su aplicación. Por lo tanto, garantizar un rendimiento óptimo en su .NET/.NET Core .
Para obtener una imagen adecuada de dónde exactamente NCache se encuentra dentro de su pila de aplicaciones, echemos un vistazo a la arquitectura básica.
MongoDB se considera más escalable en comparación con las bases de datos relacionales, pero el hecho de que sea un almacén de datos basado en disco sigue siendo un inconveniente. Entonces, usando NCache le proporciona almacenamiento en caché de datos basado en la memoria mientras permanece dentro o fuera de la VNet de su aplicación (totalmente su llamada). Esto hace que los procesos de su aplicación sean mucho más rápidos de lo deseado, lo que reduce la latencia.
¿No te da esto más razones para usar NCache para almacenar en caché los datos de su base de datos? No nos detengamos aquí y profundicemos un poco más en lo que NCache trae a la mesa.
NCache Detalles Sincronizar caché con base de datos NCache NoSql Almacenamiento de Datos
Cómo almacenar en caché con MongoDB
El almacenamiento en caché con MongoDB es extremadamente fácil. Si desea buscar un dato específico en el caché, o consultar la propia base de datos para obtener los datos requeridos, o simplemente añadir nuevos datos a la base de datos, todo se puede hacer con la mayor facilidad usando NCache.
El siguiente fragmento explica cómo realizar todas estas operaciones antes mencionadas en su aplicación de comercio electrónico. Aquí buscamos un cliente tuyo muy leal e inteligente, Einstein, en el caché para realizar Operaciones CRUD en eso. Y en caso de que la caché no tenga el cliente solicitado, lo buscamos en la base de datos. Una vez recuperado, agregamos ese cliente al caché con un caducidad de 5 minutos. Esto se hace para que el caché nunca tiene datos obsoletos para ofrecerle. Por lo tanto, garantizar la consistencia de los datos.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var customer = cache.Get("Customer:CustomerID:EINSTEIN"); if (customer == null) { MongoClient mongoClient = new MongoClient("mongodb://20.200.20.10:27017"); IMongoDatabase mongoDatabase = mongoClient.GetDatabase("DemoDatabase"); IMongoCollection <Customer> mongoCollection = mongoDatabase.GetCollection<Customer>("Customers"); response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); customer = (Customer)response.FirstOrDefault(); var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customer) { Expiration = expiration }; cache.Insert($"Customer:CustomerID:{customer.Id}", cacheItem); } |
NCache Detalles Sincronizar caché con base de datos NCache NoSql Almacenamiento de Datos
Almacenamiento en caché de la colección de elementos de la base de datos
La mayor ventaja de presentar NCache a su aplicación y la base de datos es que los viajes a la base de datos especialmente para leer operaciones reduce considerablemente, reduciendo las llamadas de red innecesarias y mejorando el rendimiento. La única razón de esta ubicación lógica es que cada vez que desea recuperar elementos de la base de datos y realizar operaciones en ella, puede hacerlo todo en el nivel de almacenamiento en caché.
Para lograr esto, NCache le permite almacenar en caché una colección MongoDB como un elemento de caché o un elemento individual como un elemento de un caché. Veamos cómo almacenar elementos en caché como pares clave-valor en NCache de MongoDB.
Colección de caché como elemento único
Almacenamiento en caché de una colección de elementos como un único Artículo de caché es útil cuando los artículos son similares o pertenecen a la misma categoría. Por ejemplo, supongamos que la base de datos de su aplicación tiene una lista de clientes repartidos por todo el mundo, pero desea consultar los que viven en Alemania (porque su Einstein favorito es de Alemania). Desea que esta consulta devuelva todos estos clientes en forma de una sola lista para que esta lista se pueda agregar a la memoria caché. Así es como lo haces:
1 2 3 4 5 6 7 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customersInGermany) { Expiration = expiration }; cache.Insert("CustomersInGernamy", cacheItem); } |
Elementos de colección de caché por separado
En caso de que desee asociar información adicional con cada elemento como etiquetas, etiquetas de nombresy grupos para facilitar la recuperación de datos, debe almacenar en caché cada elemento por separado utilizando identificadores únicos. De esta manera, puede recuperar varios elementos en función de una etiqueta lógica, por ejemplo, todos los clientes que viven en Alemania.
Para almacenar en caché todos los clientes que viven en Alemania, puede agregar la etiqueta Customer:Country:Germany
con el conjunto de datos de la consulta. Este es un ejemplo de cómo almacenar en caché todos los clientes alemanes con la etiqueta "Alemania".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); foreach (var customer in customersInGermany) { cacheItem = new CacheItem(customer) { Tags = new[] { new Tag("Customer:Country:Germany") }, Expiration = expiration }; cache.Add($"Customer:CustomerID:{customer.Id}", cacheItem); } } |
Hasta este punto, hemos discutido en detalle cómo hacer malabarismos con los datos entre su aplicación y MongoDB usando NCache. Puede darse cuenta de lo fácil que es acceder a los datos y manipularlos realizando Operaciones CRUD en todo por NCache. Permítanme ahora llevarlos en un breve recorrido de cómo NCache aporta eficiencia al plato; la guinda del pastel si se puede.
Estas son algunas de las características que NCache proporciona para mejorar el rendimiento de su aplicación de comercio electrónico que utiliza MongoDB.
NCache Detalles Sincronizar caché con base de datos NCache NoSql Almacenamiento de Datos
Erradicar el costo de serialización con caché serializado JSON
MongoDB almacena datos en forma de JSON binario (BSON), que es la serialización codificada en binario de documentos similares a JSON. Esto funciona perfectamente bien con NCache ya que apoya la Serialización JSON de objetos. Este MongoDB-NCache la colaboración no solo mejora el tiempo de rendimiento de su aplicación al evitar la necesidad de serializar/deserializar datos, sino que también mantiene la precisión de sus datos.
1 2 3 4 5 |
var response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); Customer customer = (Customer)response.FirstOrDefault(); JObject customerJson = JObject.Parse(JsonSerializer.Serialize(customer)); cache.Insert($"Customer:CustomerID:{customer.Id}", customerJson); customer = cache.Get<Customer>($"Customer:CustomerID:EINSTEIN "); |
Proveedores de fuentes de datos para la optimización de recursos
NCache proporciona un Proveedores de fuentes de datos para garantizar la entrada de un solo punto en la capa de acceso a datos de su aplicación; el punto de entrada es su caché. En caso de que los datos no estén disponibles en el caché, un Leer de parte a parte El proveedor es responsable de acceder a la base de datos, buscar y recuperar los datos requeridos, almacenarlos en caché para uso futuro y presentarlos a la aplicación.
1 |
var customer = cache.Get<Customer>( "EINSTEIN", new ReadThruOptions(ReadMode.ReadThru, "mongoDBReadThroughProvider")); |
Del mismo modo, tienes un Escriba por medio de proveedor para cuando desee ejecutar una operación de escritura en la base de datos. Simplemente tiene que realizar la operación requerida en el caché y el caché escribirá automáticamente los datos en la base de datos por usted. Agreguemos "Einstein 2" en el caché para que agregue la versión 2.0 de su cliente favorito en la base de datos usando WriteThru
.
1 2 3 4 |
Customer customer = new Customer(); customer.Id = "EINSTEIN2"; ... cache.Insert(customer.Id,new CacheItem(customer),new WriteThruOptions(WriteMode.WriteThru,"mongoDBWriteThroughProvider"); |
NCache Detalles Sincronizar caché con base de datos NCache NoSql Almacenamiento de Datos
Consultar datos de caché
Cuando usas NCache como la capa intermedia de almacenamiento en caché entre su aplicación .NET y MongoDB, NCache te ofrece la posibilidad de buscar datos en caché indexados a través de consultas. La consulta de datos de caché en memoria reduce directamente el costo del viaje que una consulta normalmente debería asumir en una red.
Un fragmento de código de ejemplo que representa el uso de la consulta de datos indexados en NCache se muestra aquí:
1 2 3 4 5 6 7 8 9 10 11 12 |
string query = "SELECT * FROM Models.Customer WHERE Country == ?"; var queryCommand = new QueryCommand (query); queryCommand.Parameters.Add("Country", "Germany"); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ContactName"); // Perform operations } } |
Concluyéndolo todo
Considerando todos los funcionalidades y características que NCache te ofrece, es seguro concluir que no se puede hacer una mejor combinación que NCache almacenamiento en caché de MongoDB. Este es el por qué. MongoDB se encuentra alejado de su aplicación; necesita una solución que permanezca cerca para aumentar el rendimiento: NCache lo proporciona al estar en memoria. Necesita una solución que le permita agregar cualquier cantidad de servidores en tiempo de ejecución: linealmente escalable NCache te trae eso. Está buscando una solución flexible que reequilibre automáticamente sus datos de forma dinámica: NCache hace exactamente esa ventaja sin ninguna interferencia del cliente.
NCache ofrece demasiado en forma de rendimiento, reducción de costos, flexibilidad, escalabilidad, entonces, ¿qué más está buscando? Ir a buscar NCache ¡y disfruta del almacenamiento en caché!