Alto desempenho

Prepare-se para isso!

Get Prepared....

Um dos aspectos mais impressionantes do uso do N1QL é a capacidade de usar instruções preparadas. O que são instruções preparadas? Por que usá-los? Qual é a vantagem? Considere o seguinte exemplo do bucket e do conjunto de dados de amostra de viagens que acompanham todas as instalações do couchbase: Considere os usuários que criam contas, fazem login e pesquisam voos. Talvez queiramos uma maneira rápida de identificar os usuários que usaram o sistema, mas nunca reservaram um voo. Esse é um caso de uso comum de segmentação de anúncios e cria uma oportunidade para um ponto de contato. Uma consulta simplificada pode ser semelhante a:

SELECT nome FROM amostra de viagem WHERE _type='User' AND ARRAY_LENGTH(flights)=0;

Vamos examinar as etapas necessárias para executar essa consulta em nosso aplicativo. Usaremos o nodejs para o nosso exemplo, e todos os SDKs que usam a API 2.0 funcionarão de maneira idêntica.

  • Primeiro, temos que criar a consulta N1QL a partir de uma string.
  • Em segundo lugar, serializamos a solicitação e a enviamos para o CBQ-ENGINE no nó do servidor couchbase usando HTTP REST.
  • Em terceiro lugar, o CBQ-ENGINE deve analisar a consulta.
  • Em quarto lugar, o otimizador do CBQ-ENGINE deve determinar um plano de execução.
  • Em quinto lugar, o CBQ-ENGINE deve criar o plano de execução.
  • Em sexto lugar, o CBQ-ENGINE executa o plano.

Isso representa uma quantidade substancial de trabalho para emitir uma consulta simples, especialmente para consultas que são repetidas várias vezes. Há casos em seu aplicativo em que a mesma consulta pode ser executada milhares de vezes em uma hora. Como podemos eliminar essa sobrecarga de análise/análise/criação de um plano?

Prepare-se para acelerar!

Podemos eliminar a sobrecarga preparando a instrução para execução. Usamos um parâmetro adicional em nossa consulta N1QL, adhoc=false.

O que isso significa exatamente? Significa que o SDK passará uma consulta para o CBQ-ENGINE, informando ao mecanismo, na primeira vez em que a consulta for emitida, que "quero que você gere um plano de execução, que eu possa reutilizar, e o retorne para mim em um formato compactado". Depois dessa primeira vez, sempre que o aplicativo chamar essa consulta específica, o SDK passará o plano compactado para o CBQ-ENGINE, eliminando todas as etapas de análise/parsing/criação e indo direto para a execução

Estar preparado

Então, como isso funciona? Quando uma consulta é transmitida e o sinalizador adhoc é definido como falso, o SDK armazena o plano de consulta local compactado no cache para reutilização no futuro; quando a consulta é emitida novamente, o SDK usa o plano local compactado do cache. O SDK usa um cache LRU (least recently used) para economizar memória: o SDK começará a remover as entradas mais antigas quando o cache atingir o tamanho de 5.000 consultas.

Tudo isso é gerenciado internamente no SDK. Como usuário, a única coisa que você precisa fazer é definir a propriedade adhoc como false.

Uma onça de prevenção

Algumas práticas recomendadas a serem consideradas ao usar declarações preparadas

  • Atualmente, os comandos preparados são específicos da instância do SDK. O cache LRU local de instruções preparadas é específico para cada instância do SDK que o aplicativo está usando. No momento, não há cache compartilhado de instruções entre clientes.
  • Se o seu aplicativo for de natureza extremamente adhoc, os comandos preparados são uma má escolha para esses tipos de consultas. A sobrecarga da preparação anula qualquer ganho de desempenho obtido pela possibilidade de usar repetidamente o mesmo plano de execução.
  • As instruções preparadas são planos de execução congelados no tempo. Mudanças na topologia que movam, alterem ou excluam índices farão com que o plano de execução atual seja invalidado. Os SDKs têm uma lógica de repetição integrada para lidar com esses casos extremos
  • Se você pretende emitir a mesma consulta repetidamente com parâmetros diferentes, use consultas parametrizadas em vez de incorporar os valores dos parâmetros na string da consulta. Isso permite que você use o mesmo plano com parâmetros diferentes.

Para obter mais exemplos de como usar o Couchbase no idioma de sua preferência, consulte a seção Guia do desenvolvedore github repositório. Baixar Couchbase hoje e prepare-se!

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Todd Greenstein

Todd Greenstein é arquiteto de soluções na Couchbase. Todd é especializado em design de API, arquitetura, modelagem de dados, desenvolvimento em nodejs e golang.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.