Definir el índice SQL mediante programación
NCache permite consultar el caché basado en consultas SQL como una base de datos. Sin embargo, a diferencia de una base de datos, cualquier objeto de búsqueda y sus campos en NCache necesita ser indexado primero. A este respecto, NCache permite a los desarrolladores definir índices SQL mediante programación con facilidad. Le permite indexar todos los campos y propiedades primitivos públicos, privados y protegidos. Ver NCache tipos de datos admitidos para más información.
Consejo
Alternativamente, puede configurar índices SQL a través del NCache Centro de gestion or PowerShell.
Note
Un campo de tipo de referencia no se puede indexar.
Requisitos previos para definir índices SQL mediante programación
Antes de definir los índices SQL, asegúrese de que se cumplan los siguientes requisitos previos:
- Para obtener información sobre los requisitos previos estándar necesarios para trabajar con todos NCache características del lado del cliente, consulte la página proporcionada en Requisitos previos de la API del lado del cliente.
- Los objetos que se pueden buscar y sus atributos deben estar indexados por configurando índices or definir índices programáticamente.
- Para obtener detalles de la API, consulte: Atributo indexado de consulta, NonQueryIndexedAttributeNonQueryIndexedAttribute, consulta indexable.
NCache Proporciona la flexibilidad de crear índices a través de diferentes enfoques. Puede crear índices para campos selectivos o para toda la clase según sus necesidades. Mientras tanto, ciertos campos pueden excluirse de la indexación cuando se indexa la clase. Además, también se proporciona soporte de indexación para clientes multilingües. Específicamente, NCache tiene los siguientes campos personalizados para definir índices mediante programación:
QueryIndexed
: Se utiliza para indexar campos selectivos.QueryIndexed["indexName"]
: se utiliza para indexar un campo con un nombre de índice proporcionado por el usuario.QueryIndexable
: Se utiliza para indexar toda la clase.NonQueryIndexed
: se utiliza para excluir campos de la indexación cuando se indexa una clase.
Importante:
Se recomienda evitar la indexación de campos innecesarios, ya que la indexación tiene una sobrecarga de memoria y rendimiento.
Aquí discutimos diferentes enfoques para crear índices en NCache utilizando estos campos.
Indexación selectiva
Puede crear un índice para una propiedad en particular o un campo de una clase usando el QueryIndexed
atributo. Se define en el nivel de propiedad o campo primitivo para indicar que la propiedad o campo marcado se puede indexar. Las propiedades o campos anotados se indexan automáticamente.
Note
Siempre usa QueryIndexed
cuando necesita indexar solo algunas propiedades o campos de una clase, ya que ahorra costos de rendimiento y memoria.
Este enfoque se puede utilizar para crear índices cuando relativamente pocas propiedades o campos de su clase requieren indexación. Proporciona la flexibilidad de indexar campos selectivos, donde puede seleccionar manualmente solo las propiedades o campos deseados.
advertencia
Si marca explícitamente un campo de referencia como QueryIndexed
, arroja una excepción "El índice no es compatible con <Ref Type Name>
". Los índices solo se admiten en tipos de valor.
El siguiente ejemplo muestra cómo indexar campos selectivos usando QueryIndexed
sin indexar toda la clase. NCache creará automáticamente índices para los campos ID y Nombre solamente.
public class Product
{
[QueryIndexed]
public int ID { get; set} // explicitly indexed
[QueryIndexed]
public string Name { get; set} // explicitly indexed
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
Note
Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
En el ejemplo anterior, el nombre del índice es el mismo que el nombre del campo, ya que este es el comportamiento predeterminado al usar el QueryIndexed
atributo para la indexación selectiva. Sin embargo, NCache le permite definir nombres personalizados para que sus campos o propiedades se indexen a través del QueryIndexed ("indexName")
anotación. En ese caso, se usará el nombre especificado por el usuario en el constructor, mientras se crea un índice.
Esto puede ser útil cuando está desarrollando un código de aplicación en diferentes idiomas y los nombres de los campos pueden variar. Por ejemplo, una aplicación de comercio electrónico tiene clientes .NET y Java, donde el cliente .NET nombra un campo del Producto clase como Precio unitario, mientras que un cliente Java nombra el mismo campo que Precio por unidad. Para indexar este campo, se puede especificar un nombre personalizado tanto en .NET como en Java usando el QueryIndexed("price")
atributo. El campo marcado se indexará con el nombre precio para todos los clientes. Ahora, diferentes clientes pueden realizar la consulta usando precio en la cláusula WHERE o como una proyección.
advertencia
Si un campo está indexado usando QueryIndexed["indexName"]
, la consulta de datos basada en el nombre del campo generará una excepción "Índice no definido para el nombre del campo".
El siguiente ejemplo demuestra cómo indexar campos selectivos de una clase utilizando el nombre de índice de su elección.
public class Product
{
[QueryIndexed]
public int ID { get; set} // explicitly indexed with index name ID
[QueryIndexed]
public string Name { get; set} // explicitly indexed with index name
[QueryIndexed("price")]
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
Indexación de clases
Puedes indexar tu clase usando el atributo QueryIndexable
. Se define a nivel de clase para indicar que se puede indexar toda la clase. Cuando marcas una clase como QueryIndexable
, todas las propiedades y campos públicos se indexarán automáticamente. Si su clase tiene un campo privado que requiere indexación, entonces necesita marcarlo explícitamente usando el QueryIndexed
atributo para crear su índice.
Este enfoque solo debe usarse cuando desea consultar el índice de todas o la mayoría de las propiedades o campos de una clase. De lo contrario, no se recomienda, ya que existe la posibilidad de que indexe propiedades innecesarias. Eventualmente, esto degradará el rendimiento de su aplicación debido a la memoria subyacente y la sobrecarga de rendimiento de la indexación.
advertencia
- No se recomienda usar
QueryIndexable
, a menos que todas o la mayoría de las propiedades o campos requieran indexación, ya que la indexación tiene costos de memoria y rendimiento. - Marcando una clase como
QueryIndexable
no indexa campos privados. En este caso, deberá marcar individualmente cada campo privado comoQueryIndexable
para indexarlo.
El siguiente ejemplo muestra la indexación de los campos de una clase denominada Producto usando el QueryIndexable
, atributo. Esto indexará la ID, Nombrey Precio unitario los campos. El campo Categoría está explícitamente marcado como QueryIndexed
ya que es privado. Indexación Local será ignorado ya que es un campo de referencia que apunta al objeto del Local clase, mientras NCache no permite indexar campos de referencia.
[QueryIndexable]
public class Product
{
public int ID { get; set} // auto index
public string Name { get; set} // auto index
public Decimal UnitPrice { get; set } // auto index
[QueryIndexed]
private string Category { get; set } // explicitly marked for indexing
public Customer Customer { get; set; } // will not be indexed
}
Exclusión de campos de la indexación
Puede utilizar el NonQueryIndexed
atributo para evitar la indexación de propiedades o campos no requeridos cuando se indexa su clase. el atributo NonQueryIndexed
se define en el nivel de propiedad o campo primitivo para indicar que la propiedad o campo debe excluirse de la indexación cuando la clase en sí está marcada como QueryIndexable
. Todas las propiedades y campos públicos se indexarán automáticamente. Los campos marcados con el NonQueryIndexed
el atributo se excluirá de la indexación. Puedes usar una combinación de QueryIndexable
y NonQueryIndexed
cuando la mayoría de las propiedades requieren indexación, excepto algunas.
El siguiente ejemplo muestra cómo excluir el campo Precio unitario de la indexación marcándolo explícitamente como NonQueryIndexed
cuando la clase misma está indexada. Esto ignorará la indexación del campo anotado.
[QueryIndexable]
public class Product
{
public int ID { get; set} // auto index
public string Name { get; set} // auto index
[NonQueryIndexed]
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
Note
NCache le permite suprimir cualquier error asociado con la creación de índices a través del NCacheServer.SuppressIndexNotDefinedException
etiqueta en el NCache Archivos de configuración del servicio.
Recursos adicionales
NCache proporciona una aplicación de muestra para consultas SQL en GitHub.
Vea también
.NETO: Alachisoft.NCache.Cliente espacio de nombres
Java: com.alachisoft.ncache.cliente espacio de nombres