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!
