Toda empresa hoje em dia requer dados para gerenciar suas operações. A melhor solução para armazenar uma coleção bem organizada de dados é um banco de dados. Da mesma forma, a linguagem de computador mais usada para armazenar e recuperar dados em bancos de dados é SQL (Structured Query Language). Em um mundo moderno tão acelerado, é crucial ser capaz de localizar informações de forma rápida e eficaz.
NCache atende a essa necessidade especificando a chave relevante onde a chave primária é usada para encontrar dados. Adicionalmente, NCache também emprega indexação em muitos módulos para melhorar o desempenho da pesquisa no cache e rastreá-lo. Como em situações do mundo real, você precisa de recursos de pesquisa flexíveis para poder localizar informações usando critérios diferentes da chave primária.
No entanto, todos os atributos pesquisáveis devem ser indexados para pesquisa. O armazenamento computacional extra necessário para armazenar o índice, bem como o tempo necessário para que uma atualização ocorra, é equilibrado com o tempo economizado durante a recuperação de informações.
Formas de definir índices
Para definir índices, NCache fornece estático e dinâmico indexação. Em ambos os casos, os índices de consulta para uma classe personalizada devem ser predefinidos para pesquisar itens dessa classe no cache. Ao fazer isso, o cache armazena as informações de uma forma que facilita a consulta. Você pode especificar índices estáticos por meio de • Configuração ou definindo indexa programaticamente. Os índices de tempo de execução não requerem nenhuma configuração antes de serem usados.
Consultando o índice programaticamente por meio de NCache
NCache oferece aos usuários versatilidade para construir índices usando vários métodos. Você pode gerar índices para campos específicos ou toda a classe dependendo de suas necessidades. NCache permite que você consultar índices programaticamente usando as seguintes anotações:
- ConsultaIndexável
- ConsultaIndexada
- QueryIndexed["indexName"]
- Não-QueryIndexado
Configurar índice de consulta para a classe
Usando o atributo QueryIndexable, você pode indexar sua classe. Ele é definido no nível da classe para significar que toda a classe pode ser indexada. Todas as propriedades e campos públicos serão indexados automaticamente quando uma classe for marcada como QueryIndexable. Se um campo privado em sua classe precisar ser indexado, você deverá indicá-lo explicitamente com a anotação QueryIndexed.
O exemplo a seguir demonstra a indexação dos campos da classe denominada Produto usando o atributo QueryIndexable. Isso irá indexar o ID, Nome, Quantidade, ManufacturerName, e Preço unitário.
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; } } |
Os objetos da classe que são indexados são adicionados ao cache. O exemplo de código abaixo mostra como você pode obter o objeto do Produto classe mencionada acima por meio 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 } |
Somente quando você deseja consultar o índice de todos ou a maioria dos atributos ou campos de uma classe, você deve utilizar esta estratégia. Caso contrário, é desencorajado porque possivelmente indexará características que não são necessárias e acabará consumindo memória extra.
Configurar índices de consulta para uma propriedade específica
Quando você precisar indexar apenas algumas propriedades ou campos de uma classe, use Atributo QueryIndexed uma vez que economiza custos de desempenho e memória. Para indicar que uma propriedade ou campo marcado pode ser indexado, ele é definido na propriedade primitiva ou no nível do campo. Os campos ou atributos com anotações são indexados automaticamente.
A classe Voo demonstrado abaixo mostra como indexar os atributos desejados usando QueryIndexed sem indexar toda a classe. Apenas para os campos ID e TotalPassageiros, NCache criará índices automaticamente.
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; } } |
Quando apenas um pequeno número de propriedades ou campos em sua classe precisa ser indexado, você pode usar este método para construir índices. Dá a você a opção de selecionar as propriedades ou campos desejados e indexar apenas aqueles. Essa anotação evita o problema de memória que pode surgir como resultado da consulta de toda a classe, enquanto você só precisa consultar alguns atributos dela.
Configuração de índice de consulta fornecida pelo usuário
Como a utilização da propriedade QueryIndexed para indexação seletiva resulta nesse comportamento padrão, o nome do índice é o mesmo que o nome do campo. Por meio da anotação QueryIndexed(“indexName”), NCache permite definir nomes exclusivos para seus campos ou propriedades que serão indexados. Nesse caso, um índice é criado usando o nome especificado pelo usuário do construtor. Ao escrever o código do aplicativo em vários idiomas com nomes de campo potencialmente distintos, isso pode ser útil.
Na aula Funcionário, os campos EmployeeId, DataDeNascimento, e Salário serão indexados conforme forem marcados com o atributo QueryIndexed. No entanto, para criar um índice que englobe os campos, EmployeeId e DateOfBirth, nome especificado pelo usuário no construtor "EU IA" e “Data de nascimento” será usada.
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; } } |
Excluindo Campos da Indexação
Quando sua classe é indexada, o atributo NonQueryIndexed pode ser usado para interromper a indexação de propriedades ou campos opcionais. Quando uma classe é declarada como QueryIndexable, o atributo Não-QueryIndexado é definido no nível da propriedade ou campo primitivo para especificar que a propriedade ou campo não deve ser indexado. Os campos públicos e as propriedades serão todos indexados automaticamente. O atributo NonQueryIndexed indica quais campos não devem ser indexados.
O exemplo a seguir demonstra como declarar explicitamente o campo Nome do cliente como NonQueryIndexed enquanto o Encomenda classe é indexada. Isso desconsiderará a indexação do 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; } } |
O campo Nome do cliente não serão adicionados ao cache. Ao consultar, você obterá o valor de Nome do cliente como nulo, enquanto você precisa recuperar todos os outros campos explicitamente.
Quando todas as propriedades, exceto algumas, precisam ser indexadas, você pode combinar QueryIndexable com NonQueryIndexed. Isso é potencialmente útil quando você tem muitos dados e deseja excluir apenas uma pequena parte para que o desempenho permaneça intacto.
Conclusão
NCache fornece um mecanismo rápido e eficiente que permite consultar seu índice de acordo com os critérios estabelecidos. E com esse recurso, você não precisa se preocupar com problemas de memória que podem resultar da indexação de consultas de toda a classe, pois você só precisa indexar alguns de seus campos. Sem dúvida, NCacheAs diferentes anotações de índice de consulta são uma verdadeira bênção. Você pode conferir outras NCache características do nosso site.