Indexação para pesquisa de cache aprimorada
O objetivo de usar um índice é otimizar a velocidade e o desempenho na localização de dados relevantes na pesquisa de cache. Para fins de pesquisa, todos os atributos pesquisáveis devem ser indexados. Sem um índice, a pesquisa examinaria todos os dados, o que exigiria tempo e poder computacional consideráveis. O armazenamento adicional do computador necessário para armazenar o índice, bem como o aumento considerável no tempo necessário para que uma atualização ocorra, são compensados pelo tempo economizado durante a recuperação de informações.
NCache usa indexação internamente em diferentes módulos para aumentar o desempenho das operações internas.
Índice de pesquisa de cache
NCache fornece o Índice de Pesquisa de Cache para impulsionar a execução de consultas no cache. Para fins de pesquisa, tudo o que é necessário fazer é indexar todos os atributos pesquisáveis. NCache não pesquisará o atributo não indexado do cache porque precisa percorrer todo o cache para encontrar dados relacionados que afetarão o desempenho do cache.
Além disso, os índices são definidos em relação aos tipos de dados reais dos itens armazenados em cache. Através da indexação, NCache sabe que tipo de dados serão armazenados e os armazenará de forma pesquisável.
NCache fornece duas maneiras de definir índices.
- Índice pré-definido (índice estático)
- Índice de tempo de execução (índice dinâmico)
Índice pré-definido (índice estático)
Note
Este recurso também está disponível em NCache Professional.
Note
É recomendável evitar a indexação de campos desnecessários, pois a indexação tem sobrecarga de memória e desempenho.
Para pesquisar objetos de classe personalizados em um cache clusterizado, os índices de consulta dessa classe precisam ser definidos antecipadamente. Desta forma, o cache salvará esses dados de forma que possam ser facilmente consultados. Você pode definir índices através do seguinte processo de configuração. Os índices podem ser configurados para os membros de dados primitivos públicos, privados e protegidos.
Note
Os índices são suportados apenas em tipos de valor. Os tipos de referência não podem ser indexados.
Os índices podem ser definidos através da configuração antes do início do cache. Caso você queira definir novos índices através da configuração, o cache precisa ser parado primeiro e reiniciado após as modificações para implantação das alterações. Os dados relevantes adicionados ao cache posteriormente são indexados automaticamente. Esses dados podem ser consultados facilmente no futuro.
Aviso
Marcar explicitamente um tipo de referência como indexável lançará uma exceção.
Índice de tempo de execução (índice dinâmico)
Se houver atributos em um aplicativo que sejam definidos e usados em tempo de execução, a indexação em tempo de execução deverá ser usada. Por exemplo, pode haver alguns valores calculados atribuídos a um produto relacionados às suas vendas. Quando qualquer produto é adquirido por qualquer cliente, os detalhes da venda são salvos no cache para gerar posteriormente relatórios diários de tendências de vendas por meio de valores armazenados em cache. Este valor é definido em tempo de execução, portanto é o atributo de tempo de execução do produto.
NCache criará automaticamente índices para dados adicionados pelo cliente de cache. Isso significa que os índices não precisam ser configurados antes de serem usados para atributos de tempo de execução.
Ao definir índices programaticamente, as classes ou campos podem ser marcados como indexáveis usando atributos personalizados no código do aplicativo. Uma vez marcadas, todas as propriedades e campos primitivos são indexados automaticamente. Como você pode não precisar indexar todos os campos, também pode excluí-los da indexação. Além de indexar toda a classe, você também tem a flexibilidade de definir índices seletivamente apenas para os campos desejados.
O índice de tempo de execução pode ser categorizado nos seguintes tipos:
- Índice de Grupo
- Índice de Tag
- Índice de tags nomeadas
Índice de Grupo
Os itens podem ser categorizados no cache usando grupos. NCache permite consultar dados no cache com base em grupos, devido aos quais os grupos também precisam ser indexados. Quando dados são adicionados a um grupo que ainda não existe no cache, um novo índice é criado para o grupo. Quaisquer dados pertencentes a este grupo são então atribuídos ao mesmo índice para pesquisa.
Índice de Tag
Uma ou mais marcas de identificação podem ser associadas a itens de cache. Essas marcas de identificação são chamadas de tags. Através de tags, o usuário pode associar palavras-chave a itens de cache. Uma coleção de itens armazenados em cache também pode ser encontrada e removida do cache especificando tags. Tags só são permitidas em formato de string. Para cada nova tag, uma nova entrada de tag será criada no índice de tags e todos os itens armazenados em cache relacionados serão associados a esse índice.
Índice de tags nomeadas
Se houver necessidade de usar um alto nível de marcação onde as tags podem ter diferentes tipos de dados ou nomes e o requisito for consultar dados relacionados a um tipo específico de tag, então Tags Nomeadas deverão ser usadas.
“Tags nomeadas" é o aprimoramento de "Tags". Tags nomeadas permitem ao usuário armazenar informações adicionais (de qualquer tipo) necessárias para consultar o objeto armazenado como uma string. Por exemplo, a tag nomeada "Maior tempo de venda" com um valor de tempo pode ser armazenado quando a venda de qualquer produto é a mais alta em um dia inteiro. Tags nomeadas permitem indexar os dados de acordo com os atributos necessários em tempo de execução. Várias tags nomeadas podem ser associadas a um item armazenado em cache e vice-versa.
Quando dados são adicionados com uma tag nomeada que não existe no cache, um novo índice é criado para essa nova tag nomeada. Todos os dados relacionados serão atribuídos a esse índice para pesquisa.
Ao contrário de Tag, o índice de tag nomeado pode ser definido para todos os tipos primitivos, strings e data e hora. Portanto, há mais flexibilidade para adicionar uma ampla variedade de dados pesquisáveis com diferentes tipos de dados.
Se houver vários aplicativos que compartilham o mesmo cache e todos eles devem adicionar tags nomeadas, certifique-se de que as mesmas tags nomeadas tenham tipos de dados homogêneos, por exemplo, se um cliente estiver adicionando a tag nomeada "ProductID" com String tipo de dados, todos os outros clientes deverão adicionar valores de "ProductID" no formato String e não em Inteiro ou outro para o mesmo cache.
Índice de despejo
O despejo é um recurso útil em NCache, onde quando o cache está cheio ele decide despejar os dados existentes para acomodar os dados recebidos. Neste cenário, a remoção pode suavizar as operações de cache, mantendo o limite de tamanho do cache, removendo uma percentagem configurada de dados.
NCache fornece políticas diferentes para despejo. Estas políticas decidem quais dados serão removidos quando o cache estiver cheio. NCache fornece as seguintes políticas de despejo:
- Despejo com base em prioridade
Note
Este recurso também está disponível em NCache Professional.
Para despejo baseado em prioridade, o índice é mantido com prioridade alta para baixa e quando o cache está cheio, o encadeamento de despejo seleciona chaves do índice com baixa prioridade e as remove do cache.
- Menos usado recentemente (LRU)
Para o menos usado recentemente (LRU), o índice de despejo é mantido durante o tempo de uso das chaves e quando o cache está cheio, o encadeamento de despejo seleciona as chaves do índice que são usadas menos recentemente e as remove do cache.
- Usado com menos frequência (LFU)
Para Menos Frequentemente Usado (LFU), o índice de despejo é mantido para o número de uso de chaves e quando o cache está cheio, o encadeamento de despejo seleciona as chaves do índice que são usadas com menos frequência e as remove do cache.
Note
Para realizar o despejo, NCache mantém o índice de despejo para dados de cache para despejo.
Índice de expiração
A expiração é uma propriedade anexada a cada item que está sendo armazenado em cache. Esta propriedade é anexada a cada objeto para que cada objeto de cache possa ser avaliado de acordo com sua idade, esta idade do objeto decidirá seu tempo de expiração. Quando esse objeto de expiração é invalidado, o item associado é removido do cache.
NCache mantém o DateTime
Índice de expiração para chaves de cache para removê-las com eficiência na expiração. O gerenciador de expiração expira os itens após o intervalo de limpeza.
Intervalo de limpeza é o intervalo periódico após o qual os itens expirados são removidos do cache. O intervalo de limpeza de um cache pode ser alterado nas definições de configuração.
Depois de decorrido um intervalo de limpeza, o gerenciador de expiração obtém as chaves do índice e os itens expirados são removidos do cache. Depois de remover itens expirados do cache, o thread de expiração fica suspenso pela “duração do intervalo de limpeza” especificado na configuração do cache. NCache fornece dois tipos de expirações explicadas em Estratégias de invalidação de dados:
- Expiração Absoluta
- Expiração deslizante
Veja também
Configurar índices de consulta
Remover-QueryIndex
Despejo
Compartilhamento de dados em tempo de execução