Consulta SQL: descripción general de comportamiento y uso
NCache es un caché de clave-valor donde cada nuevo objeto se almacena contra una clave única. Similar a una base de datos relacional donde la clave principal encuentra datos, NCache le permite recuperar esos datos especificando la clave correspondiente. Sin embargo, muchos escenarios prácticos requieren la capacidad de buscar de forma flexible para adquirir datos basados en diferentes atributos, no solo en la clave principal. Dado que la mayoría de las aplicaciones transaccionales mantienen los datos en la memoria caché, la capacidad de consultar datos es muy deseable.
Consulta SQL: importancia de realizar consultas en caché
Supongamos que hay un sitio web de comercio electrónico, donde los productos se consultan en función de una variedad de criterios, como categoría, precio, peso, etc. Para mejorar el rendimiento de la aplicación, el uso de un sistema de almacenamiento en caché distribuido parece ser una solución adecuada. Sin embargo, perder la capacidad de consulta o reescribir la aplicación no es aceptable.
En tal escenario, NCache es una caché distribuida ideal que puede escalar el rendimiento de la aplicación sin comprometer la capacidad de consulta. Específicamente, NCache Permite consultar datos almacenados en caché basado en diferentes atributos utilizando una sintaxis de consulta similar a SQL. Por emplear NCache para el escenario mencionado anteriormente, puede consultar todos los productos utilizando la categoría, el precio o el peso como criterio.
Note
NCache permite buscar y eliminar datos en un caché utilizando una sintaxis de consulta similar a SQL.
NCache proporciona la flexibilidad para recuperar proyecciones, el objeto completo, solo las claves de caché o el par clave-valor según sus requisitos. Es más, NCache también es compatible con operadores básicos de consulta, operadores logicosy Funciones agregadas proporcionada por SQL.
¿Cómo funciona?
In NCache, los datos se distribuyen entre diferentes nodos del clúster debido a la partición. Buscar un cliente utilizando su ID puede resultar bastante fácil cuando hay mil clientes. Sin embargo, encontrar uno entre un millón no tendría la misma complejidad cuando los registros se distribuyen en diferentes nodos y el criterio de consulta puede ser cualquier atributo del cliente. En este contexto, la consulta en la caché requiere un mecanismo de búsqueda de datos eficiente.
En particular, NCache emplea indexación y consultas distribuidas para admitir la capacidad de búsqueda similar a SQL en tiempo real en el caché. La indexación hace que un atributo se pueda buscar en la memoria caché. Una vez que se agrega un elemento en un índice, regresa como resultado de una consulta en el nodo al que está conectado el cliente. Mientras tanto, una consulta se ejecuta de forma distribuida cuando los datos se distribuyen en la topología particionada.
Importante:
Un atributo debe estar indexado para que se pueda buscar en la memoria caché.
Indexación
Las bases de datos tradicionales utilizan la indexación para aumentar el rendimiento de las consultas. Sin embargo, NCache usos indexación como obligatorio para habilitar la búsqueda a través de consultas similares a SQL. Para consultar los datos de la memoria caché, primero se deben indexar todos los atributos que se pueden buscar. Es importante señalar que los campos especificados en las proyecciones y criterios deben estar indexados. Una vez que se define un índice para un atributo, cualquier dato relevante agregado a la memoria caché se indexa automáticamente y se puede buscar. Por lo tanto, definir índices una vez es suficiente.
Note
Las operaciones de lectura son mucho más rápidas debido a la indexación, pero hay una sobrecarga para cada operación de escritura.
NCache utiliza la indexación ya que es un enfoque orientado al rendimiento. La indexación elimina la necesidad de consultar cada entrada en la caché mientras se busca un conjunto de resultados de consulta. Esto acelera el mecanismo de búsqueda y ahorra tiempo y potencia informática.
advertencia
No indexe campos innecesarios, ya que generaría una sobrecarga de memoria y rendimiento.
Consultas distribuidas
La consulta ejecutada en NCache varía según la topología de caché y la conectividad del cliente subyacente. En el caso de la Topología Mirrored o Replicated, la consulta se ejecuta únicamente en el nodo con el que se conecta el cliente. Sin embargo, esto no ocurre cuando los datos se dividen en los nodos del clúster.
Las consultas sobre un clúster particionado ejecutarse de manera distribuida principalmente debido a la partición de datos. La consulta se ejecuta individualmente en cada nodo ya que el cliente se conecta a todos los nodos del clúster. El conjunto de resultados que consta de los datos requeridos se devuelve desde cada nodo y se fusiona antes de devolver el resultado final al cliente. Aquí, el rendimiento también depende de la cantidad de nodos del clúster y del tamaño del conjunto de resultados devuelto por cada nodo.
Note
La consulta distribuida en NCache es altamente escalable.
La consulta distribuida produce una mayor escalabilidad en NCache debido a los datos particionados y su ejecución paralela. Cuando nuevos nodos se unen al clúster, los datos particionados para cada miembro se reducen. Por lo tanto, se reduce el tiempo de ejecución de consultas que dedica cada nodo del servidor. Además, el tráfico de la red también se reduce debido a la ejecución simultánea en cada nodo.
Consulta SQL en NCache
NCache le permite buscar y eliminar datos de caché mediante consultas SELECT y DELETE similares a SQL, respectivamente. Las operaciones INSERT y UPDATE actualmente no son compatibles. Ejecutar Lector se utiliza para ejecutar la consulta SELECT en la memoria caché y devuelve el conjunto de resultados a una instancia de Lector de ICache. Ejecutar Escalar ejecuta la consulta y devuelve la primera columna de la primera fila en el conjunto de resultados devuelto por la consulta, se ignoran las columnas o filas adicionales.
ExecuteNonQueryExecuteNonQuery se utiliza para eliminar elementos de la memoria caché. Puede consultar todos los tipos de datos primitivos y tipos anulables siempre que se hayan definido índices de consulta.
Importante:
Asegúrese de cerrar la instancia de ICacheReader
después de la ejecución, ya que es necesario limpiar los recursos.
El lenguaje de consulta le permite especificar criterios de clave no primaria según los datos que se requieran. Puede ejecutar consultas para consultar datos en el caché usando diferentes proyecciones y criterios. Sin embargo, los atributos especificados en proyecciones y criterios deben estar indexados. Además, según sus requisitos, tiene la flexibilidad de recuperar solo las claves de caché o elementos completos que cumplan con los criterios de consulta dados.
Tipos de indexación
Si desea consultar un atributo en el caché, primero debe indexarse. NCache proporciona varias formas flexibles para indexación. Teniendo en cuenta la necesidad de índices predefinidos (estáticos), NCache le permite definir índices manualmente para atributos de búsqueda por adelantado. Una forma de definir índices estáticos es a través de configuración. Alternativamente, también puede definir índices programáticamente.
Por otra parte, índices dinámicos como grupos, etiquetas y etiquetas con nombre se crean automáticamente en tiempo de ejecución para un atributo. Los índices de tiempo de ejecución le permiten consultar datos en la memoria caché en función de grupos lógicos, etiquetas y etiquetas con nombre.
Consulta usando proyecciones SQL
NCache le permite recuperar todos los atributos indexados de una clase o proyecciones específicas del almacén de caché en función de su consulta. NCache admite diferentes proyecciones para facilitar una búsqueda eficiente. Las proyecciones juegan un papel importante en la mejora del rendimiento de su aplicación cuando se trata de consultas. Por ejemplo, desea recuperar solo la columna de unidades disponibles para productos en una categoría específica. En ese caso, puede utilizar la siguiente consulta SELECT.
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
Note
Para mejorar el rendimiento, es mejor consultar solo las columnas esenciales, ya que devolver el objeto completo es costoso.
Vale la pena señalar que al recuperar solo las columnas deseadas, se elimina la sobrecarga adicional de recuperar todos los atributos indexados del Product
Se evita la clase. De este modo, NCache facilita a los usuarios lograr un rendimiento mejorado a través de una sintaxis de consulta mejorada.
Consulta de claves y objetos
Según sus requisitos, puede recuperar solo las claves de caché o los datos asociados con su consulta. Si necesita enumerar solo las claves, NCache le permite recuperar claves únicamente. Es un enfoque eficiente ya que de esta manera el tamaño de los datos que se recuperarán del caché se reduce significativamente. Por lo tanto, puede utilizarlo para mejorar el rendimiento.
ExecuteReader
tiene una opción getData
, que se establece como falso solo para la recuperación de claves. Por defecto, su valor es verdadero. Si necesita datos para su posterior procesamiento, el valor predeterminado se puede utilizar para consultar objetos.
Operadores de consulta admitidos
Puede utilizar un amplio conjunto de operadores proporcionados por NCache de acuerdo con los criterios de consulta requeridos para obtener los conjuntos de resultados deseados de su caché.
Las siguientes categorías de operadores son compatibles con NCache consultas:
Categoría | Operador |
---|---|
Operadores básicos de consulta | = , == , != , <> , < , > , <=, >=, EN, ME GUSTA , NO ME GUSTA |
Operadores logicos | Y, O, NO |
Funciones agregadas | SUMA, CONTEO, PROMEDIO, MIN, MAX |
Observaciones | GROUP BY, ORDER BY, DateTime.Now, DateTime ("cualquier cadena compatible con fecha y hora") |
Para obtener más detalles, consulte el Operadores de consulta .
Caché de cliente
NCache asume el Caché de cliente (caché L1) puede tener datos parciales. Teniendo en cuenta que no se garantizan datos completos en la caché L1, las consultas siempre ocurren en la caché del servidor (L2) en NCache. Si la caché L1 está habilitada en el extremo del cliente que ejecuta la consulta, el comportamiento de ejecución de la consulta no se verá afectado. La consulta se ejecutará directamente en la memoria caché del servidor. Sin embargo, cuando los datos cambian en la caché agrupada debido a una consulta DELETE, L1 se sincroniza con la caché L2.
Aunque la memoria caché del cliente no influye en la ejecución de consultas en NCache, puede desempeñar un papel esencial en la mejora del rendimiento. Por ejemplo, desea realizar más operaciones en el conjunto de resultados de la consulta, pero obtener los datos del caché podría afectar el rendimiento de su aplicación. Si la caché del cliente está configurada con una caché L2, puede recuperar los datos deseados con un solo GetBulk
llamar. Esto ahorra tiempo y evita la degradación del rendimiento, ya que las operaciones realizadas en la caché del cliente son mucho más rápidas en comparación con la caché L2.