Cada empresa hoy en día requiere datos para administrar sus operaciones. La mejor solución para almacenar una colección de datos bien organizada es una base de datos. Del mismo modo, el lenguaje informático más utilizado para almacenar y recuperar datos en bases de datos es SQL (Structured Query Language). En un mundo moderno tan acelerado, es crucial poder localizar información de manera rápida y efectiva.
NCache satisface esta necesidad al especificar la clave relevante donde se usa la clave principal para encontrar datos. Además, NCache también emplea indexación en muchos módulos para mejorar el rendimiento de búsqueda en el caché y realizar un seguimiento de él. Al igual que en situaciones del mundo real, necesita capacidades de búsqueda flexibles para poder localizar información utilizando criterios distintos a la clave principal.
Sin embargo, todos los atributos de búsqueda deben indexarse para la búsqueda. El almacenamiento computacional adicional necesario para almacenar el índice, así como el tiempo necesario para que se produzca una actualización, se equilibra con el tiempo ahorrado durante la recuperación de la información.
Formas de definir índices
Para definir índices, NCache proporciona un estático y lugar de trabajo dinámico indexación. En ambos casos, los índices de consulta para una clase personalizada deben estar predefinidos para buscar elementos de esa clase en la memoria caché. Al hacer esto, el caché almacena información de una manera que facilita la consulta. Puede especificar índices estáticos a través de configuración o definiendo índices programáticamente. Los índices de tiempo de ejecución no requieren ninguna configuración antes de ser utilizados.
Consultar el índice programáticamente a través de NCache
NCache ofrece a los usuarios versatilidad para construir índices usando varios métodos. Puede generar índices para campos específicos o para toda la clase según sus necesidades. NCache Permite consultar índices programáticamente utilizando las siguientes anotaciones:
- consulta indexable
- consulta indexada
- Consulta indexada [“indexName”]
- Sin consulta indexada
Configurar índice de consulta para la clase
Usando el atributo QueryIndexable, puede indexar su clase. Se define a nivel de clase para indicar que se puede indexar toda la clase. Todas las propiedades y campos públicos se indexarán automáticamente cuando una clase se marque como QueryIndexable. Si es necesario indexar un campo privado de su clase, debe indicarlo explícitamente con la anotación QueryIndexed.
El siguiente ejemplo muestra la indexación de los campos de la clase denominada Producto utilizando el atributo QueryIndexable. Esto indexará la identificación, el nombre, la cantidad, el nombre del fabricante, y Precio unitario.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[QueryIndexable] class Product { public int ID { get; set; } public string Name { get; set; } public string Quantity { get; set; } public string ManufacturerName { get; set; } public Decimal UnitPrice { get; set; } } |
Los objetos de la clase que están indexados se agregan en el caché. El ejemplo de código a continuación muestra cómo puede obtener el objeto de la Producto clase mencionada anteriormente a través de consulta.
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 27 28 29 30 |
// Pre-conditions: Cache is already connected // Products are already present in the cache // Provide Fully Qualified Name (FQN) of your Product class // Create a query string query = "SELECT $Value$ FROM FQN.Product WHERE Quantity < ?"; // Use QueryCommand for query execution QueryCommand queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("Quantity", 500); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Checking if the result set is not empty if (reader.FieldCount > 0) { // Getting all Products with Quantity less then 500 while (reader.Read()) { Product product = reader.GetValue<Product>(1); // Perform required operations } } else { // Null query result set retrieved } |
Solo cuando desee consultar el índice de todos o la mayoría de los atributos o campos de una clase, debe utilizar esta estrategia. De lo contrario, se desaconseja porque potencialmente indexará características que no son necesarias y terminará consumiendo memoria adicional.
Configurar índices de consulta para una propiedad en particular
Cuando necesite indexar solo algunas propiedades o campos de una clase, use Atributo QueryIndexed ya que ahorra costos de rendimiento y memoria. Para indicar que una propiedad o campo marcado se puede indexar, se define en el nivel de propiedad o campo primitivo. Los campos o atributos con anotaciones se indexan automáticamente.
La clase Vuelos La demostración a continuación muestra cómo indexar los atributos deseados usando QueryIndexed sin indexar toda la clase. Solo para los campos ID y TotalPassengers, NCache automáticamente creará índices.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Flight { [QueryIndexed] public int ID { get; set; } [QueryIndexed] public int TotalPassangers { get; set; } public string FlightType; private string DepartAirport { get; set; } public AirLine Airline { get; set; } } |
Cuando solo se necesita indexar una pequeña cantidad de propiedades o campos en su clase, puede usar este método para construir índices. Le da la opción de seleccionar las propiedades o campos deseados e indexar solo esos. Esta anotación lo salva del problema de memoria que puede surgir como resultado de consultar toda la clase, mientras que solo necesita consultar algunos atributos de ella.
Configuración de índice de consulta proporcionada por el usuario
Dado que el uso de la propiedad QueryIndexed para la indexación selectiva da como resultado este comportamiento predeterminado, el nombre del índice es el mismo que el nombre del campo. A través de la anotación QueryIndexed(“indexName”), NCache le permite establecer nombres únicos para sus campos o propiedades que se indexarán. Si es así, se crea un índice utilizando el nombre especificado por el usuario del constructor. Al escribir el código de la aplicación en varios idiomas con nombres de campo potencialmente distintos, esto puede ser útil.
En la clase Empleado, los campos ID de empleado, fecha de nacimiento, y Sueldo se indexarán ya que están marcados con el atributo QueryIndexed. Sin embargo, para crear un índice que abarque los campos, ID de empleado y fecha de nacimiento, nombre especificado por el usuario en el constructor "IDENTIFICACIÓN" y “fecha de nacimiento” se utilizará.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Employee { public string Name { get; set; } [QueryIndexed("ID")] public int EmployeeId { get; set; } [QueryIndexed("DOB")] public string DateOfBirth { get; set; } [QueryIndexed] public double Salary { get; set; } public string Position { get; set; } } |
Exclusión de campos de la indexación
Cuando su clase está indexada, el atributo NonQueryIndexed se puede usar para detener la indexación de propiedades o campos opcionales. Cuando una clase se declara como QueryIndexable, el atributo Sin consulta indexada se define en el nivel de la propiedad o campo primitivo para especificar que la propiedad o el campo no deben indexarse. Los campos públicos y las propiedades se indexarán automáticamente. El atributo NonQueryIndexed indica qué campos no deben indexarse.
El siguiente ejemplo muestra cómo declarar explícitamente el campo Nombre del cliente como NonQueryIndexed mientras que el Ordenar la clase está indexada. Esto ignorará la indexación del campo anotado.
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] class Order { public int OrderId { get; set; } public DateTime OrderDate { get; set; } public string OrderDestination { get; set; } [NonQueryIndexed] public string CustomerName { get; set; } } |
El campo Nombre del cliente no se agregará en el caché. Al realizar la consulta, obtendrá el valor de Nombre del cliente como nulo, mientras que debe recuperar todos los demás campos explícitamente.
Cuando es necesario indexar todas las propiedades excepto algunas, puede combinar QueryIndexable con NonQueryIndexed. Esto es potencialmente útil cuando tiene una gran cantidad de datos y desea excluir solo una pequeña parte para que el rendimiento permanezca intacto.
Conclusión
NCache proporciona un mecanismo rápido y eficiente que le permite consultar su índice de acuerdo con los criterios establecidos. Y con esta función, no tiene que preocuparse por los problemas de memoria que pueden resultar de la indexación de consultas de toda la clase, ya que solo necesita indexar algunos de sus campos. Indudablemente, NCacheLas diferentes anotaciones del índice de consulta son una verdadera bendición. Puedes consultar otros NCache Características desde nuestro sitio web.