A Structured Query Language (SQL) foi originalmente projetada como uma linguagem de consulta intuitiva para armazenamentos de dados relacionais. O NoSQL, relativamente recente em comparação, ainda exige compatibilidade com o SQL, pois muitas ferramentas e aplicativos de BI o entendem. O Couchbase oferece suporte à sua própria linguagem de consulta, N1QLque estende o SQL para consultar documentos JSON armazenados em Servidor Couchbase. Os drivers Simba Couchbase ODBC e JDBC permitem que os usuários "tenham o bolo e o comam também", possibilitando que os usuários aproveitem tanto o SQL quanto o N1QL. Uma das maneiras de conseguir isso é com o Execução de consulta colaborativa (CQE) oferecido pelo SimbaEngine X. Este artigo explica como os drivers do Simba Couchbase usam o CQE, aproveitando as semelhanças entre o SQL e o N1QL, para garantir o desempenho ideal.

Operação JOIN

N1QL suporta Junções de pesquisaque podem ser traduzidos de forma aproximada em JOINs análogos no SQL. Aqui, explicaremos como os drivers do Simba Couchbase aproveitam o recurso CQE para transmitir as operações JOIN para o Couchbase Server.

Considere o conjunto de dados de amostra de cerveja com documentos de cerveja e cervejaria. Usando os drivers do Simba Couchbase, esses documentos podem ser mapeados para duas tabelas diferentes - cerveja e cervejaria - e os usuários podem executar consultas JOIN nessas duas tabelas.

Digamos que um usuário queira descobrir todas as cervejas fabricadas no estado da Califórnia, ele emitiria uma instrução SQL da seguinte forma:

Para gerar o resultado dessa consulta SQL, você teria que fazer o seguinte:

  • Recuperar todos os documentos de cerveja do Couchbase Server para o cliente
  • Recuperar todos os documentos de fermentação do Couchbase Server para o cliente
  • Executar a união
  • Filtre os resultados em que o estado é Califórnia.

 

Isso não é muito eficiente, pois pode sobrecarregar o lado do cliente se as tabelas de união forem muito grandes. Além disso, as operações JOIN e WHERE são compatíveis com o N1QL. A transferência da carga para o lado do servidor resultaria em melhor desempenho.
Os drivers do Simba Couchbase fazem exatamente isso. Com o CQE, os drivers do Simba Couchbase traduzem o SQL fornecido em N1QL análogo, que pode ser passado para o Couchbase Server para execução. A instrução SQL acima pode ser traduzida para N1QL da seguinte forma:

 

Por baixo do capô, os drivers do Simba Couchbase usam o Simba SQL Engine para análise, preparação e execução de consultas. Antes da execução da consulta, os drivers criam uma representação de Árvore de Expressão Algébrica (AE-Tree). A instrução SQL assume essa forma pouco antes de o Simba SQL Engine transformá-la em um plano de execução e executá-la. Antes da execução, o driver pode revisar o plano e verificar se pode executar alguma parte dele. Isso é chamado de etapa de passagem para baixo.

Pouco antes da etapa de passagem para baixo (conforme descrito na seção Otimização do AETree artigo), a árvore AE tem a seguinte aparência:

 

E, após a transferência, o AETree tem a seguinte aparência:

 

Como você pode ver, a AE-Tree contém apenas um nó que representa a tabela unida, o que significa que todo o resto, inclusive a união e a filtragem, é passado para o Couchbase Server. Menos dados enviados através do fio do Couchbase Server para o driver e menos operações feitas no lado do cliente = melhor desempenho!

Operação UNNEST

O N1QL suporta a cláusula UNNEST, que conceitualmente executa uma junção de uma matriz aninhada com seu objeto pai.

Nos drivers do Simba Couchbase, qualquer matriz aninhada é mapeada para uma tabela virtual e os usuários podem se unir à tabela principal com a tabela virtual. Isso usa novamente o recurso CQE do SimbaEngine X e aproveita a cláusula N1QL UNNEST.

Por exemplo, todos os documentos de cervejarias no conjunto de dados de amostras de cerveja contêm matrizes aninhadas chamadas brewery_address. Nos drivers do Simba Couchbase, esses documentos são mapeados para uma tabela brewery e uma tabela virtual brewery_address. Digamos que um usuário queira obter todos os nomes de cervejarias depois de unir brewery e brewery_address, ele emitiria uma instrução SQL da seguinte forma:

Os drivers do Simba Couchbase traduzem a instrução SQL acima para N1QL da seguinte forma:

 

Antes da transferência, a árvore AE tem a seguinte aparência:

 

Após a transferência, a árvore AE tem a seguinte aparência:

Como você pode ver, a AE-Tree novamente contém apenas um nó que representa a tabela unida, o que significa que todo o resto é passado para o Couchbase Server para execução. Novamente, quanto mais operações ocorrerem no lado do servidor e quanto menos dados retornarem pelo fio para o driver, mais eficiente será a consulta.

Esses dois exemplos destacam como os drivers do Simba Couchbase utilizam todo o potencial do Couchbase Server, passando as operações N1QL compatíveis para o servidor executar. Para quaisquer recursos SQL que não sejam compatíveis com o N1QL, os drivers executam as operações (no lado do cliente). Dessa forma, os drivers garantem a amplitude do suporte para SQL e N1QL, bem como o alto desempenho.

Agora é sua vez

Faça o download de uma avaliação gratuita de Drivers ODBC/JDBC do Couchbase e experimente-os com o novo Couchbase Server 4.5!

Autor

Postado por Nowrin Anwar Joyita

Atualmente, Nowrin Anwar Joyita está trabalhando como desenvolvedor de software na Bit Quill Technologies. Antes de ingressar na Bit Quill Technologies, Nowrin passou cerca de dois anos na Simba Technologies como cientista da computação. Ela trabalhou em vários drivers ODBC (C++) e JDBC (Java) na Simba, a saber: drivers Athena ODBC e JDBC, drivers Couchbase ODBC e JDBC, driver MongoDB ODBC, driver Presto JDBC, driver Drill ODBC.

Deixar uma resposta