Consulta SQL++ / N1QL

Prepare-se com o N1QL para a era dos bancos de dados de engajamento

Plataforma de banco de dados de engajamento do Couchbase

Uau!!! Você já ouviu falar de Bancos de dados de engajamento? Tenho certeza de que "não", não até Couchbase anunciado com a versão 5.0. Na economia digital de hoje, o sucesso de uma empresa depende de sua capacidade de alavancar a transformação digital bem-sucedida para proporcionar envolvimento e experiência superiores ao cliente. O DNA de tudo isso está nos dados, e isso exige uma plataforma de banco de dados avançada que possa lidar com os problemas de dados nos sistemas de engajamento em escala, com facilidade e nas raízes. Esses problemas são bastante exclusivos e, portanto, as soluções também devem ser. A compreensão superior dos problemas nesse espaço e as soluções elegantes e eficientes para esses problemas levaram à descoberta de uma nova categoria de bancos de dados, que chamamos de Bancos de dados de engajamento. Esse banco de dados é complementar aos bancos de dados transacionais e analíticos que você pode ter em sua infraestrutura de estrutura de dados. A figura a seguir mostra como eles se encaixam.

N1QLé a linguagem de consulta estendida SQL projetada para permitir que seus aplicativos aproveitem o poder dos bancos de dados de envolvimento e JSON. O N1QL tem toda a sofisticação e os recursos necessários para lidar com esquemas flexíveis e dados JSON estruturados hierarquicamente. Você pode escrever consultas declarativas simples usando o N1QL para lidar naturalmente com esses dados.

O Couchbase 5.0 traz uma série de funcionalidades avançadas de consulta e otimizações de desempenho no N1QL para atender às demandas de aplicativos voltados para o envolvimento do cliente. Muitas das melhorias de funcionalidade e desempenho também incluem aprimoramentos correspondentes nos índices GSI para ajudar o N1QL a aproveitar totalmente as otimizações. Veja Novidades do Couchbase Server 5.0 para obter a lista completa e os detalhes.

Índices adaptativos

Os índices adaptativos são tipos especiais de índices no Couchbase que podem indexar todos ou um conjunto de campos específicos de um documento de forma extremamente adaptável. Ao contrário dos índices GSI compostos, esse tipo de índice é genérico por natureza. Deixe-me explicar. Os índices adaptáveis podem pesquisar com eficiência qualquer valor de chave de índice sem restrições, como ordenação de chave de índice de prefixo, em índices compostos típicos. Isso permite consultas de pesquisa ad-hoc eficientes que podem usar predicados da cláusula WHERE em campos arbitrários sem a necessidade de criar vários índices compostos ou diferentes combinações de chaves de índice.

Por exemplo, considere um caso de uso de perfil de usuário. O perfil de uma pessoa pode precisar ser pesquisado com base em qualquer um dos atributos pessoais, como nome, sobrenome, idade, cidade, endereço, emprego, cargo, empresa, foaf etc. Da mesma forma, a disponibilidade de um quarto de hotel pode ser pesquisada com base em critérios amplos, como instalações do quarto, comodidades, preço, localização, distância de pontos de interesse específicos etc. Nesses cenários, os índices compostos secundários tradicionais não podem ser usados com eficácia (consulte a seção Contraste com os índices compostos para entender os problemas). Os índices adaptativos resolvem esse problema criando um índice genérico que pode executar essas consultas de pesquisa ad hoc de forma eficaz e eficiente.

Por exemplo, a figura a seguir (1) mostra como três índices diferentes I1, I2 e I3 são necessários para as três consultas Q1, Q2 e Q3. Além disso, não é possível fazer uma consulta em qualquer outro campo não indexado sem criar os respectivos índices. Além disso, uma consulta apenas sobre idade, como a Q4, não poderá usar o índice I2, pois também precisa do prefixo index-key id. A Figura (2) mostra como um único índice adaptável pode ajudar as consultas em todos os campos, independentemente da ordem da chave do índice.

Observe que os índices adaptativos não são uma panaceia. Esses números podem dar a impressão de que os índices adaptativos são melhores do que os índices simples/compostos. Isso não é totalmente verdade. Se você conhece as consultas (e as chaves de índice) apriori, então é sempre melhor usar índices secundários normais. Porque eles seriam mais rápidos do que os índices adaptativos. Lembre-se de que os índices adaptativos podem ter um tamanho muito maior, pois indexam várias/todas as chaves de índice e os valores correspondentes. Portanto, eles podem não ter um desempenho tão rápido quanto os índices secundários simples. Entretanto, os índices adaptativos resolvem os problemas que os índices secundários não conseguem resolver com pouca sobrecarga.

A vida é feita de compensações! Para obter mais detalhes e exemplos, consulte o Índice adaptativo documentação.

Expressões poderosas de subconsulta

O N1QL é uma linguagem de consulta avançada. Ela é SQL para JSON e tem todas as extensões e expressões de linguagem necessárias para lidar com muitas sutilezas na modelagem de dados JSON, como:

  • Esquema flexível
  • Campos e valores de dados ausentes.
  • Valores de matriz de múltiplos valores
  • Dados aninhados em que um campo de um documento pode ser outro objeto JSON totalmente formado

Esse tipo de coisa não existe em bancos de dados relacionais e, portanto, o SQL não precisa lidar com isso. No entanto, por design, o N1QL precisa lidar com todas as nuances do trabalho com dados JSON. De fato, esses são os tipos de características de dados complexos, flexibilidade, escalabilidade e simplicidade que levaram os aplicativos modernos a uma plataforma de banco de dados de engajamento como o Couchbase.

Uma dessas funcionalidades para simplificar elegantemente o trabalho com dados de matriz é fornecida pelo suporte do N1QL para expressões Subquery em matrizes. Isso permite que você trate uma matriz como um espaço-chave de documentos e que você use todo o poder do N1QL na matriz, tratando os elementos da matriz como documentos do espaço-chave. Talvez você não perceba, mas isso é muito mais poderoso do que parece ;-)

Por exemplo, considere os seguintes dados de pedidos de clientes:

Aqui, o campo de matriz  produtos[]  contém os detalhes do pedido sobre todos os produtos solicitados. Agora, vamos tentar escrever uma consulta para encontrar o valor total do pedido. A consulta deve percorrer cada elemento da tabela  produtos[]  e calcular a soma de  quantidade * preço. Sem usar esse recurso (por exemplo: ao usar o Couchbase 4.5), a consulta teria a seguinte aparência:


Essa consulta em si é possível graças à maravilhosa cláusula UNNEST na instrução SELECT do N1QL. No entanto, a mesma consulta pode ser reescrita como abaixo, usando a Subquery Expression on Arrays:

Não é ridiculamente simples e intuitivo? De fato, seu desempenho também seria melhor. É assim que o N1QL capacita os desenvolvedores de aplicativos, e um Banco de Dados de Engajamento permite que os clientes enfrentem seus desafios de dados em aplicativos de Sistemas de Engajamento. Há muito mais para falar sobre esse maravilhoso recurso... Veja documentação e isso blog.

A propósito, imagine modelar esses dados simples com um RDBMS e escrever uma consulta equivalente em SQL ou em outro banco de dados NoSql. Tenho certeza de que esse pode ser um problema divertido de resolver se você quiser perder seu fim de semana!!!

Acesso a dados externos e consultas federadas

Um dos problemas da explosão de dados é que os aplicativos que envolvem o cliente podem precisar encontrar e se integrar a dados relevantes de várias fontes internas e externas. É cada vez mais importante que os aplicativos centrados em dados combinem seus dados com fontes de dados externas fornecidas por:

O Couchbase Server 5.0 adiciona uma nova função N1QL CURL(), que permite que as consultas N1QL interajam e se integrem a fontes de dados JSON externas disponíveis em HTTP/REST. Isso permite consultas N1QL federadas em fontes de dados externas. Por exemplo:

  • Você pode acessar a API de geocodificação do Google para obter mais detalhes de localização sobre um determinado local armazenado em seu banco de dados.

  • Você pode usar a API de dados financeiros do Yahoo para obter mais detalhes sobre um determinado símbolo de ação armazenado em seu banco de dados.

Da mesma forma, você pode usar os índices FTS em sua consulta N1QL para pesquisa de texto completo ou acessar dados de outros Couchbase Clusters ou outras fontes de dados JSON em suas consultas N1QL (usando todo o poder das expressões N1QL nos dados externos). Para obter mais informações, consulte Função CURL.

RBAC para declarações N1QL

O controle de acesso baseado em função (RBAC) é vital para a administração da segurança em implementações empresariais. O Couchbase Server 5.0 traz o RBAC para aplicativos em que os usuários podem ser adicionados ao sistema com várias funções predefinidas. O serviço de consulta adiciona suporte ao RBAC com os seguintes recursos principais:

  • As funções de nível de instrução são adicionadas para a execução de várias instruções N1QL, como SELECT, UPDATE, INSERT, e para acessar os espaços de chave do sistema.

  • Novas instruções N1QL GRANT e REVOKE foram adicionadas, alinhadas com o padrão SQL.

  • Novos espaços-chave do sistema user_info, my_user_info e applicable_roles foram adicionados para acessar vários detalhes de atribuições de funções.

Obter mais informações aqui.

Monitoramento e criação de perfil de consultas N1QL

Esse recurso permite o monitoramento e a criação de perfis de consultas detalhadas e de granulação fina. Isso fornece informações detalhadas sobre várias fases da consulta, operadores de consulta envolvidos no processamento da consulta e tempos e características de execução correspondentes (como resultados intermediários). Todas as informações de monitoramento também são capturadas em vários espaços-chave do sistema, como system:active_requests e system:completed_requests. Isso ajuda a diagnosticar consultas problemáticas e problemas de desempenho. A figura a seguir mostra o plano visual e os detalhes do perfil da consulta no banco de trabalho de consultas.

Screen Shot 2017-02-19 at 1.49.18 AM.png

Novos parâmetros de consulta são fornecidos para ativar, desativar e controlar os recursos de monitoramento, e podem ser configurados para um mecanismo de consulta ou consultas individuais. Veja Monitoramento de consultas N1QL para obter detalhes.

Aprimoramentos de desempenho do N1QL

No Couchbase Server 5.0, o N1QL e os índices secundários globais juntos permitem muitas otimizações de desempenho.

  • Expansão de predicados complexos: Oferece suporte ao pushdown eficiente e exato de predicados AND/OR complexos para o índice. Isso ajuda em:

    • Evitar resultados espúrios do Indexador em determinadas consultas em que os predicados têm varreduras de intervalo em chaves de índice de prefixação.

    • usar eficientemente vários índices para diferentes condições de um predicado OR etc.

  • Projeção de índice: Na versão 5.0, o N1QL adiciona suporte para solicitar apenas as informações necessárias do Index e, assim, evitar qualquer processamento desnecessário.

  • Foi adicionado suporte para criar índices com ASC/DESC especificado para chaves de índice individuais e aproveitar a ordem de índice para consultas com a cláusula ORDER BY alinhada.

  • Operadores como OFFSET, MAX(), MIN(), DISTINCT, COUNT (campo DISTINCT) são transferidos para o indexador.

Para obter mais detalhes, consulte Otimizações de pushdown de índice.

Resumo

Tenho certeza de que isso é muito empolgante e impressionante. Estamos muito animados para compartilhar nossa visão sobre bancos de dados de envolvimento e inovar o N1QL para ajudá-lo a se preparar! Neste artigo, falamos sobre muitos recursos avançados do N1QL e aprimoramentos de desempenho na plataforma de banco de dados de envolvimento do Couchbase Server 5.0. Se tiver algum comentário ou pergunta, entre em contato conosco. Parabéns!

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

Autor

Postado por Prasad Varakur

Prasad Varakur é gerente de produto principal da Couchbase. Prasad é líder de produtos e engenharia em bancos de dados (SQL, noSQL, Bigdata) e sistemas distribuídos.

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.