Consulta SQL: Visão geral de comportamento e uso
NCache é um cache de valor-chave em que cada novo objeto é armazenado em uma chave exclusiva. Semelhante a um banco de dados relacional onde a chave primária encontra dados, NCache permite que você recupere esses dados especificando a chave correspondente. No entanto, muitos cenários práticos exigem a capacidade de pesquisar com flexibilidade para adquirir dados com base em diferentes atributos, não apenas na chave primária. Como a maioria dos aplicativos altamente transacionais mantém os dados no cache, a capacidade de consultar dados é altamente desejável.
Consulta SQL: Importância da Consulta no Cache
Suponha que exista um site de comércio eletrônico, onde os produtos são consultados com base em uma série de critérios como categoria, preço, peso, etc. Para melhorar o desempenho do aplicativo, usar um sistema de cache distribuído parece ser uma solução adequada. No entanto, perder a capacidade de consulta ou reescrever o aplicativo não é aceitável.
Nesse cenário, NCache é um cache distribuído ideal que pode dimensionar o desempenho do aplicativo sem comprometer a capacidade de consulta. Especificamente, NCache permite que você consultar dados em cache com base em diferentes atributos usando sintaxe de consulta semelhante a SQL. Ao empregar NCache para o cenário mencionado anteriormente, você pode consultar todos os produtos usando categoria, preço ou peso como critério.
Note
NCache permite pesquisar e excluir dados em um cache usando sintaxe de consulta semelhante a SQL.
NCache oferece a flexibilidade de recuperar projeções, o objeto inteiro, apenas as chaves de cache ou o próprio par de valores-chave com base em seu requisito. Além disso, NCache também suporta o operadores básicos de consulta, Operadores lógicos e funções agregadas fornecido pelo SQL.
Como funciona
In NCache, os dados são distribuídos entre diferentes nós do cluster devido ao particionamento. Procurar um cliente usando seu ID pode ser bastante fácil quando há mil clientes. No entanto, encontrar um em um milhão não teria a mesma complexidade, quando os registros estão distribuídos em diferentes nós e o critério de consulta pode ser qualquer atributo do cliente. Neste contexto, a consulta no cache requer um mecanismo eficiente de busca de dados.
Em particular, NCache emprega indexação e consultas distribuídas para oferecer suporte à capacidade de pesquisa semelhante a SQL em tempo real no cache. A indexação torna um atributo pesquisável no cache. Depois que um item é adicionado a um índice, ele retorna como um resultado de consulta no nó ao qual o cliente está conectado. Enquanto isso, uma consulta é executada de forma distribuída quando os dados são distribuídos na Topologia Particionada.
importante
Um atributo deve ser indexado para ser pesquisável no cache.
Indexação
Bancos de dados tradicionais usam indexação para aumentar o desempenho da consulta. No entanto, NCache usos indexação como obrigatório para permitir a pesquisa por meio de consultas do tipo SQL. Para consultar dados de cache, todos os atributos pesquisáveis precisam ser indexados primeiro. É importante observar que os campos especificados nas projeções e critérios devem ser indexados. Depois que um índice é definido para um atributo, todos os dados relevantes adicionados ao cache são indexados automaticamente e tornam-se pesquisáveis. Portanto, definir índices uma vez é suficiente.
Note
As operações de leitura são muito mais rápidas devido à indexação, mas há uma sobrecarga para cada operação de gravação.
NCache usa indexação, pois é uma abordagem orientada para o desempenho. A indexação elimina a necessidade de consultar cada entrada no cache enquanto procura um conjunto de resultados de consulta. Isso agiliza o mecanismo de pesquisa e economiza tempo e poder de computação.
Aviso
Não indexe campos desnecessários, pois isso resultaria em sobrecarga de memória e desempenho.
Consultas distribuídas
A consulta executada em NCache varia com base na topologia do cache e na conectividade do cliente subjacente. No caso da Topologia Espelhada ou Replicada, a consulta é executada apenas no nó com o qual o cliente se conecta. No entanto, isso não ocorre quando os dados são particionados nos nós do cluster.
As consultas sobre um cluster particionado executado de maneira distribuída principalmente devido ao particionamento de dados. A consulta é executada individualmente em cada nó, pois o cliente se conecta a todos os nós do cluster. O conjunto de resultados que consiste nos dados necessários é retornado de cada nó e mesclado antes de retornar o resultado final ao cliente. Aqui, o desempenho também depende do número de nós do cluster e do tamanho do conjunto de resultados retornado por cada nó.
Note
A consulta distribuída em NCache é altamente escalável.
A Consulta Distribuída oferece maior escalabilidade em NCache devido aos dados particionados e sua execução paralela. Quando novos nós ingressam no cluster, os dados particionados de cada membro são reduzidos. Portanto, o tempo de execução da consulta gasto por cada nó do servidor é reduzido. Além disso, o tráfego de rede também diminui - devido à execução simultânea em cada nó.
Consulta SQL em NCache
NCache permite pesquisar e excluir dados de cache usando consultas SELECT e DELETE semelhantes a SQL, respectivamente. As operações INSERT e UPDATE não são suportadas no momento. ExecuteReader é usado para executar a consulta SELECT no cache e retorna o conjunto de resultados para uma instância de ICacheReader. Executar Escalar executar a consulta e retornar a primeira coluna da primeira linha no conjunto de resultados retornado pela consulta, qualquer coluna ou linha adicional será ignorada.
Executar sem consulta é usado para excluir itens do cache. Você pode consultar todos os tipos de dados primitivos e tipos anuláveis, desde que os índices de consulta tenham sido definidos.
importante
Certifique-se de fechar a instância de ICacheReader
após a execução, pois é necessário limpar os recursos.
A linguagem de consulta permite especificar critérios de chave não primária, dependendo de quais dados são necessários. Você pode executar consultas para consultar dados no cache usando diferentes projeções e critérios. No entanto, os atributos especificados nas projeções e critérios devem ser indexados. Além disso, com base em sua necessidade, você tem a flexibilidade de recuperar apenas as chaves de cache ou itens inteiros que atendam aos critérios de consulta fornecidos.
Tipos de indexação
Se você deseja consultar um atributo no cache, primeiro ele deve ser indexado. NCache fornece várias maneiras flexíveis para indexação. Considerando a necessidade de índices predefinidos (estáticos), NCache permite definir manualmente índices para atributos pesquisáveis com antecedência. Uma maneira de definir índices estáticos é por meio de • Configuração. Alternativamente, você também pode definir índices programaticamente.
Por outro lado, índices dinâmicos como Grupos, Marcas e Marcas Nomeadas são criadas automaticamente no tempo de execução para um atributo. Os índices de tempo de execução permitem consultar dados no cache com base em grupos lógicos, tags e tags nomeadas.
Consultar usando projeções SQL
NCache permite que você recupere todos os atributos indexados de uma classe ou projeções específicas do armazenamento de cache com base em sua consulta. NCache suporta diferentes projeções para facilitar uma pesquisa eficiente. As projeções desempenham um papel importante no aprimoramento do desempenho do seu aplicativo quando se trata de consultas. Por exemplo, você deseja recuperar apenas a coluna de unidades disponíveis para produtos em uma categoria específica. Nesse caso, você pode usar a seguinte consulta SELECT.
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
Note
Para melhorar o desempenho, é melhor consultar apenas as colunas essenciais, pois retornar o objeto completo é caro.
Vale a pena notar que ao recuperar apenas as colunas desejadas, a sobrecarga adicional de recuperar todos os atributos indexados do Product
classe é evitada. Nesse caminho, NCache facilita que os usuários obtenham desempenho aprimorado por meio de sintaxe de consulta aprimorada.
Consulta de chaves e objetos
Com base em sua necessidade, você pode recuperar apenas as chaves de cache ou os dados associados à sua consulta. Se você precisar enumerar apenas as chaves, NCache permite que você recupere apenas chaves. É uma abordagem eficiente, pois o tamanho dos dados a serem buscados no cache reduz significativamente dessa forma. Portanto, você pode usá-lo para melhorar o desempenho.
ExecuteReader
tem uma opção getData
, que é definido como falso apenas para recuperação de chave. Por padrão, seu valor é verdadeiro. Se você precisar de dados para processamento adicional, o valor padrão poderá ser usado para consultar objetos.
Operadores de consulta compatíveis
Você pode usar um rico conjunto de operadores fornecidos por NCache de acordo com os critérios de consulta necessários para buscar os conjuntos de resultados desejados do cache.
As seguintes categorias de operadores são suportadas em NCache consultas:
Categoria | operador |
---|---|
Operadores de consulta básicos | = , == , != , <> , < , > , <=, >=, IN, LIKE , NOT LIKE |
Operadores lógicos | E, OU, NÃO |
Funções de agregação | SOMA, CONTAGEM, MÉDIA, MIN, MAX |
Gerais | GROUP BY, ORDER BY, DateTime.Now, DateTime ("qualquer string compatível com data e hora") |
Para mais detalhes, consulte o Operadores de consulta seção.
Cache de cliente
NCache assume o Cache de cliente (cache L1) pode ter dados parciais. Considerando que dados completos não são garantidos no cache L1, as consultas sempre ocorrem no cache do servidor (L2) em NCache. Se o cache L1 estiver ativado no lado do cliente que executa a consulta, o comportamento de execução da consulta não será afetado. A consulta será executada diretamente no cache do servidor. No entanto, quando os dados são alterados no cache clusterizado devido a uma consulta DELETE, o L1 sincroniza com o cache L2.
Embora o cache do cliente não influencie a execução da consulta em NCache, pode desempenhar um papel essencial na melhoria do desempenho. Por exemplo, você deseja executar outras operações no conjunto de resultados da consulta, mas buscar os dados do cache pode prejudicar o desempenho do aplicativo. Se o cache do cliente estiver configurado com um cache L2, você pode recuperar os dados desejados com um único GetBulk
chamar. Isso economiza tempo e evita a degradação do desempenho, pois as operações executadas no cache do cliente são muito mais rápidas em comparação com o cache L2.