Quando você precisa consultar documentos usando SQL, há duas opções disponíveis no Couchbase. A opção Serviço de consulta e o Serviço de análise. Nosso blog, N1QL: Consultar ou analisar? fornece uma visão geral detalhada de ambos os serviços. É altamente recomendável lê-lo antes deste artigo. Este artigo tem o objetivo de expandir o blog anterior, acrescentando alguns exemplos práticos e concretos. Para cada exemplo, abordaremos como escrever a consulta em ambos os serviços e analisaremos as diferenças de desempenho. O objetivo é que os leitores saiam com mais conhecimento para ajudar a identificar rapidamente os padrões e os casos de uso mais adequados a cada serviço.

Resumo

Antes de começarmos com os exemplos. Vamos nos atualizar sobre as principais características de alto nível dos dois serviços.

Serviço de consulta
Serviço de análise
Usado para manipulação de dados dentro da lógica do aplicativo. Usado para relatórios, análises (históricas, interativas) e painéis de controle.
Mais eficiente para consultas curtas e operacionais que recuperam ou manipulam pequenas quantidades de dados. Mais eficiente para consultas mais longas, complexas e ad-hoc que normalmente recuperam e processam grandes quantidades de dados.
Oferece suporte a operações SELECT, INSERT, UPDATE, DELETE e MERGE. Oferece suporte apenas a operações SELECT.

Veja https://www.couchbase.com/blog/n1ql-to-query-or-to-analyze/ para obter uma tabela completa.

Configuração

Para este tutorial, usaremos o Couchbase 6.5 e os dados de amostra fornecidos na interface de usuário de administração do Couchbase. Meu ambiente é um cluster de 3 nós do Couchbase 6.5 com 1536 MB alocados para o serviço Analytics. Todas as outras configurações são as padrão. Se você não tiver acesso a um cluster, poderá executar rapidamente o Couchbase 6.5 em um contêiner do Docker executando o seguinte comando:

Se estiver seguindo a rota do Docker, acesse http://localhost:8091 no navegador após o início do contêiner e configure a instância do Couchbase usando as opções padrão em cada etapa. Não importa o nome que você dá à sua instância do Couchbase.

Isenção de responsabilidade sobre o desempenho

Analisaremos os tempos de resposta dos exemplos a seguir. É importante observar que o desempenho pode variar muito, dependendo de como o ambiente do Couchbase está configurado. No entanto, você ainda deve conseguir observar diferenças semelhantes entre os serviços Query e Analytics, independentemente do seu ambiente.

Instalar o balde de amostras de viagem

No painel de administração do Couchbase, navegue até Configurações -> Buckets de amostra. Instale o bucket Travel Sample (Amostra de viagem). A documentação detalhada sobre como fazer isso pode ser encontrada em nosso site de documentação.

Configuração do serviço de consulta

A instalação do Sample Bucket também cria os índices necessários. Isso significa que nenhuma configuração adicional é necessária para o Query Service.

Configuração do serviço de análise

Para o Analytics Service, precisamos preencher os conjuntos de dados para cada "tipo" de documento em nosso bucket. Navegue até o Analytics Workbench (http://localhost:8091/ui/index.html#!/cbas/workbench) e execute as seguintes consultas para criar os conjuntos de dados:

Isso criará conjuntos de dados para rotas, pontos de referência, hotéis, companhias aéreas e aeroportos usando o bucket travel-sample. Por fim, a execução da instrução CONNECT começará a preencher cada um dos conjuntos de dados.

Nos exemplos a seguir, usaremos consultas N1QL simples. Para obter uma análise detalhada das diferenças de linguagem N1QL entre Query e Analytics, consulte a seção N1QL for Analytics vs. N1QL for Query página de referência em nossos documentos.

Caso de uso: Obter todas as rotas de LAX para SFO

Agora estamos prontos para escrever nossa primeira consulta. Para este caso de uso, queremos encontrar todas as rotas disponíveis para um determinado aeroporto de origem e destino.

Qual é o melhor serviço?

Essa é definitivamente uma consulta operacional que retornará uma quantidade limitada de dados. É uma consulta simples que não executa nenhuma agregação ou função complexa sobre nossos dados. Há apenas um filtro simples na origem e no destino. Portanto, o Query Service (http://localhost:8091/ui/index.html#!/query/workbench) é a escolha óbvia.

Desempenho:  4 milissegundos

Essa é uma consulta simples e também retorna apenas 7 documentos. Essa é uma consulta operacional típica que um aplicativo pode enviar ao Couchbase. O desempenho é rápido e consistente de forma confiável.

Equivalente ao serviço de análise

Para fins de demonstração, vamos criar a mesma consulta para o Analytics Service. O Analytics Service é um exagero para uma consulta simples como essa. Portanto, se estivéssemos criando um aplicativo para esse caso de uso, não escolheríamos o serviço Analytics. Esperaríamos que ele tivesse um desempenho inferior ao do Query Service.

Desempenho: ~36 milissegundos

Como você pode ver neste exemplo. O Query Service tem o melhor desempenho para esse caso de uso, como esperado. Sob carga pesada, esperamos que o Query Service tenha um desempenho ainda melhor do que a diferença de mais de 30 milissegundos que esse teste simples mostra.

Caso de uso: Obter as cidades com mais hotéis

Qual é o melhor serviço?

Para esse caso de uso, queremos descobrir o número de hotéis disponíveis em cada cidade e classificar os resultados pelas cidades com mais hotéis primeiro. Isso exigirá que examinemos todos os nossos hotéis e coletemos as contagens por país e cidade e depois as classifiquemos. Seguindo a lógica que definimos no início, o Analytics Service (http://localhost:8091/ui/index.html#!/cbas/workbench) deve ter um desempenho melhor para esse caso de uso. Vamos testar essa teoria.

Desempenho: ~36 milissegundos

É interessante notar que o desempenho dessa consulta é quase o mesmo do nosso exemplo anterior do Analytics (36 ms), embora a consulta anterior fosse muito mais simples e menor em termos computacionais. Isso nos diz que o desempenho da linha de base em meu ambiente de 3 nós pode estar em torno de 36 milissegundos para consultas do Analytics. Embora essa consulta seja mais complexa do que o nosso primeiro exemplo, ela ainda é relativamente simples para o serviço do Analytics.

Equivalente ao serviço de consulta

Vamos criar a mesma consulta para o Query Service. Em teoria, essa é uma consulta mais pesada do que o nosso exemplo anterior do Query Service. Ela também está processando e retornando muito mais dados do que o primeiro exemplo. Esperamos que o Query Service não tenha um desempenho tão bom quanto o Analytics Service.

Desempenho: ~90 milissegundos

Aqui temos uma divergência realmente grande no desempenho. Como esperado, o serviço Analytics é capaz de processar a consulta duas vezes mais rápido, em média, do que o serviço Query.

Caso de uso: Obter as companhias aéreas com mais rotas

Qual é o melhor serviço?

Essa consulta está fazendo uma pergunta semelhante à do nosso exemplo anterior. Mas a diferença aqui é que precisaremos de uma união, já que os dados da companhia aérea residem em um tipo de documento separado dos dados das rotas em nosso bucket. Esperamos que o Serviço de análise para ter um desempenho melhor com essa consulta, pois ela está fazendo uma agregação e um JOIN.

Desempenho: 82 milissegundos

Aqui podemos ver que essa consulta está realmente começando a pressionar um pouco o serviço do Analytics. Nossa primeira consulta do Analytics levou 36 milissegundos em média e esta está aumentando para 82 milissegundos. A principal diferença com essa consulta é a adição de um JOIN.

Equivalente ao serviço de consulta

Lembre-se de que, no início, criamos "conjuntos de dados" analíticos separados para cada tipo de documento nos dados da amostra de viagem. Cada Dataset funciona como sua própria tabela. Portanto, uni-los em uma consulta é simples se você já tiver escrito uniões SQL antes. O Query Service não tem nenhum conceito de "Datasets" da mesma forma que o Analytics Service. Portanto, temos que escrever a consulta de forma um pouco diferente para levar em conta todos os dados que residem no mesmo bucket. Precisamos unir documentos do tipo = "airline" a documentos do tipo = "route". Precisamos de uma subconsulta para fazer isso.

Desempenho: 2 segundos

O desempenho do Analytics Service é drasticamente melhor para esse caso de uso devido ao JOIN. Outro benefício adicional do Analytics Service para esse caso é que escrever o JOIN é mais simples, pois não precisamos criar uma subconsulta para fazer a junção.

Caso de uso: Obter a classificação percentual das companhias aéreas com o maior número de rotas

Qual é o melhor serviço?

Este exemplo se baseia no anterior, acrescentando a classificação percentil das contagens de rotas. Esperamos que o desempenho seja melhor com Análises já que estamos adicionando ainda mais complexidade e computação à consulta. Vamos ver o impacto da adição de uma função Window à nossa consulta.

Desempenho: 85 milissegundos

Adicionar uma função Window não foi nada difícil para o serviço do Analytics, pois mal conseguimos ver uma diferença de desempenho.
Equivalente ao serviço de consulta

Desempenho: 2 segundos

Quando adicionamos a função Window à nossa consulta do serviço Query, também não conseguimos detectar um impacto no desempenho. A principal conclusão que podemos inferir desses resultados é que o JOIN é o maior fator de desempenho e a agregação (COUNT, nesse caso) é o segundo maior.

Conclusão

Esperamos que este artigo tenha ajudado você a entender melhor as duas opções de SQL no Couchbase e quando aplicá-las. Não deixe de conferir os seguintes recursos sobre Query e Analytics.

 

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

Autor

Postado por Evan Pease

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.