Un amigo mío dijo que la gerencia de su hipermercado está considerando optar por un sistema de caché distribuida para mejorar el rendimiento de su aplicación de comercio electrónico. Pero no estaba seguro de si este caché distribuido les proporcionaría la capacidad de buscar datos con SQL. La razón es que la mayor parte de la funcionalidad de su tienda en línea depende de la búsqueda de datos y no pueden darse el lujo de reescribir su aplicación. Y, si todas sus consultas SQL terminan yendo a la base de datos, entonces se anula el propósito de usar un caché distribuido.
Si está luchando con una situación similar y necesita una solución rápida y confiable para todos sus problemas de rendimiento, entonces NCache es exactamente lo que necesitas. Sigue leyendo para saber más.
NCache Detalles Descargar NCache Comparación de ediciones
Caché como almacén de datos
Ahora, si estamos almacenando datos en un caché para que estén disponibles para un uso más rápido, el problema que explicó mi amigo aún persiste; el cliente quiere consultar el inventario para buscar los productos deseados. Bueno, tengo buenas noticias para ti (y para él); NCache está completamente equipado con SQL que le permite consultar datos en su caché de la misma manera que lo haría en su base de datos.
Figura 1: NCache manejo de la carga de consultas SQL
¡Espera! ¿No resuelve esto de repente todos nuestros problemas? Como se muestra en la Figura 1, todo el catálogo de productos se almacena en la memoria caché, podemos implementar consultas SQL en él y devolver el resultado directamente a la aplicación; esto reduce significativamente el total de viajes al datable y, dado que NCache es escalable y confiable, ¡puede manejar cientos de miles de clientes al mismo tiempo!
Consulta SQL en NCache – Ejemplo rápido
Supongamos que un cliente tiene el ID de producto de un producto del que es un consumidor frecuente, observe la consulta a continuación, esto se ejecutará en el caché (no en la base de datos) y enviará el resultado a 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 23 24 25 26 |
// Pre-condition: Cache is already connected // Items are already present in the cache. // Provide Fully Qualified Name (FQN) of your custom class string query = "SELECT ProductName FROM FQN.Product WHERE ProductID > ?"; /// Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductName"); // Perform operations } } |
La cuestión es que estas consultas SQL en el caché son muy útiles, sin embargo, después de todo, funcionan dentro de un caché; asi que…
¿Qué tipo de datos se buscan en la caché?
NCache tiene dos grandes categorías en las que se almacenan los datos. Estos son datos transaccionales y datos de referencia.
Datos transaccionales
Los datos transaccionales son datos que se tratan como una unidad singular con el fin de satisfacer una solicitud. Estos se recopilan de la base de datos como resultados de consultas y se almacenan en un caché. Por ejemplo, dada la tabla de la base de datos, el cliente pide todos los productos más baratos que $5, la salida resultante almacenada en caché son datos transaccionales.
Figura 2: tabla de productos en la base de datos
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
Figura 3: Resultado de la consulta almacenado en la memoria caché
Los datos transaccionales generalmente se almacenan temporalmente para su procesamiento. Se actualiza con frecuencia y se descartan los datos antiguos e innecesarios. No se necesita SQL para un solo objeto y, en su lugar, se utilizan búsquedas de claves para datos de objetos. Los datos transaccionales ya son datos de resultados de consultas; por lo tanto, no se pueden realizar consultas SQL en él.
Dato de referencia
NCache le permite almacenar grandes cantidades de datos en el caché durante períodos de tiempo más largos. Este tipo de datos se conocen como datos de referencia. Los datos de referencia se almacenan de forma estructurada y relacional, se actualizan periódicamente y se sincronizan con la base de datos. Por estas razones, es posible implementar consultas SQL sobre estos datos en la memoria caché distribuida.
Con la implementación de NCache, la mayoría de las consultas que realiza el cliente se ejecutan en la memoria caché y los resultados se devuelven de inmediato. Esto reduce enormemente la cantidad de viajes realizados a la memoria caché, lo que elimina los viajes excesivos a la base de datos, lo que elimina todos los cuellos de botella en el rendimiento.
NCache Detalles Sintaxis SQL en NCache NCache Documentos SQL
Características de SQL en NCache
NCache proporciona una amplia gama de Las funciones de SQL y operadores que le permiten buscar y eliminar datos en el caché. Tenga en cuenta que la extensión SQL proporcionada por NCache no admite los comandos Insertar y Actualizar. Estos comandos se implementan directamente en la base de datos.
Echemos un vistazo a algunas de las características únicas de SQL en memoria proporcionadas por NCache.
Uso de comodines SQL en NCache
NCache proporciona búsqueda flexible con dos comodines distintos en la función SQL COMO. Estos son '?' y '*'
“¿?” se utiliza cuando hay un carácter por delante que necesita ser buscado. Por ejemplo, "¿shar?". Esto buscará en el caché y podría dar un resultado compartido, nítido o cualquier otro resultado similar.
“*” se usa cuando puede haber de cero a cualquier número de caracteres antes de buscar. Por ejemplo, “cha*” podría dar char, carácter, silla o cualquier otro resultado similar.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM FQN.Product WHERE ProductName LIKE ? AND Category LIKE ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductName", "Cha?"); queryCommand.Parameters.Add("Category", "Edib*"); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } |
Uso de funciones agregadas de SQL en NCache
Funciones agregadas se utilizan en SQL para realizar operaciones aritméticas en varios valores y devolver un valor singular. NCache utiliza estas funciones agregadas para realizar operaciones en elementos de datos almacenados en caché.
Algunas de las funciones agregadas soportadas por NCache son:
SUMA, CONTEO, PROMEDIO, MIN, MAX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT COUNT(*) FROM FQN.Products WHERE UnitPrice > 5"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); } } |
Usando SQL GROUP BY en NCache
NCache le permite agrupar datos de acuerdo con los criterios proporcionados utilizando el GRUPO POR función. Pero hay una trampa, solo puede usar group-by en consultas que contienen cualquiera de las funciones agregadas anteriores. Por ejemplo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT Category, COUNT(*) FROM FQN.Products WHERE UnitPrice > 5 Group By Category"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); string category = reader.GetValue(0); } } |
Motivos NCache es una buena opción para aplicaciones .NET
Volvamos a nuestro problema de la supertienda. Con la implementación de NCache para almacenar el catálogo de productos e implementar consultas SQL en él, ahora hay una reducción significativa en la cantidad de costosos viajes que la aplicación debe realizar a la base de datos para realizar consultas y recuperar datos.
Estos son algunos de los otros beneficios de NCache que vienen con esto:
- Sin código adicional: Dado que la mayoría de las consultas se realizan en caché, no es necesario escribir código adicional para acceder a la base de datos cada vez.
- .NET 100% nativo y .NET core: NCache es un .NET 100% nativo y .NET core Caché distribuida que le permite almacenar, administrar y consultar sus datos de forma confiable, a diferencia de cualquier otra caché y almacén de datos distribuidos.
- Menores costos de ancho de banda: Las consultas se realizan en los datos almacenados en caché y se devuelven a la aplicación, lo que ahorra mucho tiempo y costos de ancho de banda.
- Extremadamente rápido y fiable: NCache es un caché distribuido extremadamente rápido y escalable especialmente diseñado para su .NET y .NET core aplicaciones Revisar la NCache punto de referencia de dos millones de transacciones por segundo.
Entonces, como puede ver, ¡es una situación en la que todos ganan!
Pásate por NCache Docs para obtener más información sobre cómo puede usar SQL en su almacén de datos de caché distribuida.