Observação: esta nota de recomendação foi escrita em colaboração com Till Westmann e Mike Carey, que lideram o P&D de análise do Couchbase.
[A parte 2 deste artigo de Even Pease está disponível em: https://www.couchbase.com/blog/part-2-n1ql-to-query-or-to-analyze/]
Os serviços de consulta e análise do Couchbase são compatíveis com N1QL (SQL para JSON). Uma pergunta comum é: "Qual serviço deve executar minha consulta?". A resposta rápida é: "Depende de sua carga de trabalho". Este blog explica essa resposta.
Uma transação é quando você compra café e bolo no supermercado. A análise é quando o supermercado examina todos os dados de vendas para ver em que dia da semana, em que mês do ano o café e/ou o bolo vendem mais, para poder planejar o estoque, as vendas e os preços.
Toda empresa faz essas três coisas em um ciclo ou em uma espiral [A meta].
- Executar o processo de negócios para fornecer produtos ou serviços aos clientes.
- Analisar a empresa para determinar o que deve ser mudado e para que deve ser mudado.
- Faça a mudança acontecer.
Nos negócios modernos, cada etapa exige que os aplicativos executem as etapas.

O Query Service é usado pelos aplicativos necessários para executar os negócios; ele foi projetado para um grande número de consultas simultâneas, cada uma delas realizando uma pequena quantidade de trabalho. No mundo do RDBMS, essa carga de trabalho é chamada de carga de trabalho OLTP.
Os aplicativos ou ferramentas usados para análise têm características diferentes de carga de trabalho. Normalmente, eles usam o Analytics Service; ele foi projetado para um número menor de consultas simultâneas que analisam um número maior de documentos. No mundo do RDBMS, essa carga de trabalho é chamada de carga de trabalho OLAP.
Vamos nos aprofundar nos detalhes desses dois serviços.
| Serviço de consulta | Serviço de análise |
| Tutoriais | |
| https://query-tutorial.couchbase.com/tutorial/#1 | https://sqlplusplus-tutorial.couchbase.com/tutorial/#1 |
| Comparação de alto nível | |
| Usado para manipulação de dados dentro da lógica do aplicativo | Usado para relatórios, análises (históricas, interativas), painéis de controle |
| Consultas curtas
- SQL relativamente simples - Normalmente, envolve pequenas quantidades de dados |
Operações mais longas
- SQL complexo com análises - Normalmente, envolve grandes quantidades de dados |
| Executar SELECT, INSERT, UPDATE, DELETE, MERGE para aplicativos operacionais | Executar o SELECT para análise |
| Atualizações aleatórias
- Atualizar poucos documentos por consulta |
Sem atualizações
- Alterações ingeridas do Data Service |
| Latência de um milissegundo a um segundo,
alta taxa de transferência (10-1000 qps), a meta de desempenho é consultas/segundo |
Tempo de resposta de segundos a minutos,
<1-10 consultas por segundo, A meta de desempenho é de segundos/consulta |
| Grande número de índices | Menos índices |
| Consultas escritas pelo desenvolvedor; as consultas geradas são bem conhecidas | Consultas ad-hoc; relatórios complexos, painéis de controle, carga de trabalho de BI |
| As consultas são executadas em um único nó de consulta usando o índice distribuído e a infraestrutura de dados | As consultas são executadas em todos os nós de análise usando sua infraestrutura distribuída de computação, índice e dados |
| Comparação técnica: Arquitetura | |
| As consultas são executadas no modo SMP, a taxa de transferência é escalonável com a adição de novos nós de consulta | As consultas são executadas no modo MPP, podem lidar com dados maiores ou reduzir o tempo de execução da consulta adicionando novos nós de análise |
| Comparação técnica: Otimizador | |
| Junção de loop aninhado por padrão
Junção de hash por meio de dica de consulta |
Junção de hash paralelo por padrão,
União de loop aninhado (índice) ou união de broadcast por meio de dica de consulta |
| Comparação técnica: Índices | |
| Índices secundários globais | Índices secundários locais (co-localizados com partições de dados) |
| Usa índices otimizados para memória; índices secundários padrão (Plasma) | Índices secundários baseados em árvore de mesclagem estruturada em log (LSM) |
| Suporte para varreduras de índices cobertos e não cobertos | Varreduras de índice não cobertas |
| Pode usar o índice de texto completo para consultas (6.5) | |
| Comparação técnica: Execução | |
| A maioria das consultas é preparada uma vez e executada várias vezes | Consultas ad-hoc e exploratórias |
| Os SDKs usam o modelo preparar-executar com base em um sinalizador ad-hoc | Os SDKs oferecem consultas ad-hoc e parametrizadas |
| A maioria das operações é feita na memória; somente quando uma varredura de índice retorna dados grandes é que ela é gravada no backfill do disco | Operações de memória limitada em dados grandes (maiores do que a memória do cluster) com derramamento gracioso conforme necessário |
| Paralelismo de consulta de nó único | Operadores de junção, classificação, agregação e agregação agrupada de vários nós em paralelo particionado |
| Espera um único dispositivo de armazenamento (possivelmente com RAID) | Uso sem RAID de vários dispositivos de armazenamento |
| Isolamento do desempenho por meio de índices de cobertura que suportam operações de varredura, agrupamento e agregação nos nós do Serviço de Índice | Isolamento de desempenho para todas as consultas por meio de sombreamento de dados nos nós do Analytics Service |
| Documentação técnica | |
| https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/index.html | https://docs.couchbase.com/server/6.0/analytics/introduction.html |
| Informações técnicas | |
| https://www.couchbase.com/products/n1ql | https://www.couchbase.com/sqlplusplus |
| Livros técnicos | |
| https://www.couchbase.com/blog/a-guide-to-n1ql-features-in-couchbase-5-5-special-edition/ | https://resources.couchbase.com/sql_tutorial
https://www.amazon.com/SQL-Users-Tutorial-Don-Chamberlin/dp/0692184503/ |
- [A META]: A meta: o processo de aprimoramento contínuo. https://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884271951/ref=sr_1_1?keywords=the+goal&qid=1547969233&sr=8-1
- Sistemas de engajamento para trabalhos com clientes: https://marketing.cioreview.com/cxoinsight/systems-of-engagement-for-customer-jobs-nid-24677-cid-51.html
- Parte 2 deste artigo de Even Pease: https://www.couchbase.com/blog/part-2-n1ql-to-query-or-to-analyze/