NCache es un almacén de clave-valor. Recupera rápidamente los elementos almacenados en caché por su clave. Pero también puede buscar entradas en caché por otras propiedades. Por ejemplo, en lugar de buscar productos almacenados en caché por su clave, también podemos buscarlos por categoría, rango de precio y peso. Aprendamos a indexar elementos almacenados en caché para que se puedan buscar.
Búsqueda
Además de encontrar elementos por su clave, con NCache, podemos consultar las entradas en caché utilizando una sintaxis similar a SQL. Podemos escribir consultas SELECT y DELETE para buscar y eliminar entradas. NCache no admite consultas INSERTAR o ACTUALIZAR. Al igual que una consulta SELECT de base de datos, podemos recuperar proyecciones, objetos almacenados en caché completos o solo claves. También, NCache apoya consultas básicas y operadores lógicos y funciones agregadas.
Por ejemplo, si estamos almacenando productos, podemos escribir una consulta como SELECT FROM Product WHERE UnitPrice <= 5.00` para encontrar todos los productos almacenados en caché con precios inferiores a 5. Para obtener más ejemplos de cómo buscar artículos y usar operadores y funciones agregadas , verifique usando Consultas SQL con caché distribuida.
Indexación
A diferencia de las bases de datos relacionales, para buscar elementos por otros atributos, NCache requiere índices. De lo contrario, tendría que escanear todo el caché para encontrar elementos y sus propiedades relacionadas. Esto lo hara NCache lento. Con los índices, nuestras operaciones de búsqueda son más rápidas. Para usar una propiedad de un objeto en una consulta de búsqueda similar a SQL, primero debemos indexarlo. Podemos indexar todos los campos y propiedades primitivos públicos, privados y protegidos de un objeto. Tengamos en cuenta que no podemos indexar campos o propiedades de tipo referencia. Una vez NCache agrega un elemento a un índice, se devuelve como resultado de una consulta si cumple con los criterios de nuestras consultas de búsqueda.
Existen dos mecanismos para definir índices con NCache: indexación estática y dinámica.
Indexación estática
Para buscar objetos personalizados, primero debemos indexarlos. Podemos definir índices ya sea a través de cambios de configuración o mediante programación.
Creación de índices a través de la configuración
Podemos crear índices usando el NCache Manager o un cmdlet de Powershell. Primero, debemos detener nuestro caché, crear nuestros índices y reiniciarlo. El NCache Manager nos pide que carguemos el ensamblado con nuestras clases y elijamos qué propiedades y campos indexar. Después, NCache indexa automáticamente las nuevas entradas. Para más detalles sobre el NCache Gerente y Powershell Add-QueryIndex
cmdlet, verificar Configurar índices de consulta.
Creación de índices programáticamente
Para crear índices mediante programación, necesitamos anotar los campos de nuestros objetos para indexarlos. NCache tiene la QueryIndexed
atributo a campos de índice y propiedades.
Por ejemplo, para indexar el nombre de un producto y el precio unitario, necesitamos anotar su Name
y UnitPrice
propiedades. Como esto,
1 2 3 4 5 6 7 8 9 10 11 |
public class Product { public int ID { get; set } [QueryIndexed] public string Name { get; set } [QueryIndexed] public decimal UnitPrice { get; set } public decimal Weight { get; set } } |
De forma predeterminada, NCache nombra los índices después de las propiedades anotadas. Pero podemos especificar un nombre diferente con el QueryIndexed
atributo. Esta característica es útil cuando se trabaja con dos aplicaciones cliente que usan nombres diferentes para la propiedad que queremos indexar. Por ejemplo, si una aplicación utiliza UnitPrice
y otro, pricePerUnit
; nosotros podemos usar price
como el nombre del índice en ambas aplicaciones y escribir nuestras consultas de búsqueda similares a SQL usando price
preferiblemente.
Aparte de anotar propiedades individuales, podemos anotar clases con el QueryIndexable
atributo. Por aquí, NCache indexa automáticamente todas las propiedades y campos públicos. Pero necesitamos anotar campos privados con QueryIndexed
. Y si no queremos indexar algunas propiedades, debemos anotarlas con NonQueryIndexed
. Solo indexemos una clase si necesitamos indexar todas las propiedades. Pero adoptemos el enfoque de solo las propiedades de indexación que necesitamos para buscar, ya que agregar demasiados índices tiene una sobrecarga de memoria y rendimiento.
Por ejemplo, para indexar todas las propiedades de un producto, excluyendo Weight
, necesitamos anotar la clase y el Weight
propiedad. Como esto,
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] public class Product { public int ID { get; set } public string Name { get; set } public decimal UnitPrice { get; set } [NonQueryIndexed] public decimal Weight { get; set } } |
Para obtener más detalles sobre las anotaciones de índice, consulte Definir índices programáticamente.
Indexación dinámica
Definimos algunos atributos de nuestras entradas en caché en tiempo de ejecución usando el NCache cliente. No podemos usar anotaciones para indexar estos atributos. Para los atributos de tiempo de ejecución, NCache utiliza la indexación dinámica. Hay tres tipos de índices dinámicos: índices de grupo, de etiqueta y de etiqueta con nombre.
Índice de grupo
Con Grupos, podemos particionar lógicamente nuestras entradas para mayor eficiencia. Los grupos funcionan como categorías lógicas. Por ejemplo, podemos usar grupos para nuestros "clientes más importantes" y "productos de compra frecuente". Podemos recuperar y eliminar todas las entradas pertenecientes a un mismo grupo. Además, podemos escribir consultas SELECT similares a SQL usando grupos. NCache indexa automáticamente los grupos. Cuando añadimos una entrada a un grupo que no existe, NCache crea un índice para el grupo y almacena todas las entradas que pertenecen a un grupo en el mismo índice. Para obtener más información sobre Grupos, consulte Datos de caché de grupo: una descripción general.
Índice de etiquetas
Las etiquetas son identificadores de cadena que asociamos con nuestras entradas. Con las etiquetas, podemos organizar mejor nuestros datos, ya que podemos recuperar y eliminar entradas en función de sus etiquetas. A diferencia de los grupos, podemos asociar una o más etiquetas a nuestras entradas de caché. Por ejemplo, podemos categorizar a nuestros clientes según su ubicación utilizando las etiquetas "Clientes de la costa este" y "Clientes de la costa oeste". NCache admite la búsqueda y eliminación de entradas utilizando un nombre de etiqueta o la sintaxis de consulta similar a SQL. Podemos encontrar todos los elementos que contienen una o más etiquetas, por ejemplo: para cada nueva etiqueta, NCache crea un índice de etiquetas y guarda todos los elementos en caché relacionados con ese índice.
Índice de etiquetas con nombre
Las etiquetas con nombre son etiquetas mejoradas. A diferencia de los grupos y las etiquetas, que solo admiten cadenas como identificadores, con las etiquetas con nombre podemos asociar tipos de datos primitivos, cadenas y fechas a nuestras entradas. Las etiquetas con nombre son una lista de pares clave-valor adjuntos a nuestras entradas en tiempo de ejecución.
Por ejemplo, podemos usar etiquetas con nombre para almacenar el descuento que damos a los clientes recurrentes.
Para buscar y eliminar entradas utilizando nombres de etiquetas o la sintaxis similar a SQL, NCache crea automáticamente un índice cuando agregamos entradas con etiquetas nombradas que no existen. También, NCache almacena todos los elementos en caché relacionados en ese índice. Dado que los índices de etiquetas con nombre admiten no solo cadenas sino también todos los tipos primitivos, tenemos la alternativa de buscar elementos con una gama más amplia de tipos de datos.
Para obtener más información sobre las etiquetas y las etiquetas con nombre, consulte la Etiquetar datos de caché y Etiquetas con nombre con datos de caché guías.
Conclusión
Gracias a los índices y las consultas distribuidas, NCache ofrece capacidades de búsqueda en tiempo real con una sintaxis similar a SQL. Sin índices, NCache Tendríamos que escanear todo el caché para encontrar nuestras entradas. Es por eso NCache necesita índices. Recordemos que primero debemos indexar todos los atributos de búsqueda de nuestros artículos. Podemos definir nuestros índices a través de la configuración, programáticamente o con una combinación de ambos enfoques. Y solo indexemos las propiedades que necesitamos en nuestras consultas. Los índices tienen costos de memoria y rendimiento.
Para obtener más detalles sobre cómo crear índices y cómo funcionan las consultas SQL, consulte la Guía de indexación y Consulta SQL: descripción general de comportamiento y uso.