.NET

Prévia do suporte a N1QL DP4 para o Couchbase .NET SDK 2.0!

Ontem, a equipe de consulta aqui no Couchbase lançou o tão esperado N1QL Developer Preview 4! Se você ainda não ouviu falar do N1QL, trata-se de uma nova linguagem de consulta semelhante ao SQL que o Couchbase está desenvolvendo para consultar armazenamentos de dados não relacionais como o Couchbase. O objetivo é trazer a familiaridade do SQL para o mundo flexível e sem esquema do JSON. Hoje estamos lançando uma "prévia" do suporte ao N1QL DP4 fornecido pelo Couchbase .NET SDK 2.0.

O que isso significa é que estamos fornecendo uma versão de pré-lançamento, não testada e não executada em produção do SDK que inclui grande parte da funcionalidade fornecida pelo N1QL DP4! Deixe-me dizer isso mais uma vez: NÃO USE EM PRODUÇÃO!!!! Agora que a polícia da diversão já teve sua paz e estragou a festa, vamos ver o que há no N1QL DP4 e o que é suportado atualmente por essa versão prévia do SDK!

O que há no N1QL Developer Preview 4?

O N1QL DP4 se baseia no excelente trabalho realizado no DP 1-3, fornecendo a sintaxe e a linguagem de elementos N1QL completas. Além disso, ele fornece subconsultas, suporte experimental para construções de linguagem de manipulação de dados (DML) como INSERT, UPDATE, UPSERT e DELETE e, o que é mais importante para o SDK, uma API REST totalmente nova!

A API REST passou por uma grande reforma e está muito mais próxima de estar pronta para o horário nobre. Uma lista parcial dos recursos suportados pela nova API REST inclui:

  • Suporte a declarações preparadas (como o cache do plano de consulta)
  • Parâmetros posicionais e nomeados
  • Uma API de erros aprimorada e mais robusta
  • Métricas de consulta
  • Tempo limite de consulta

Por fim, a documentação foi reformulada e atualizada e pode ser encontrada em aqui.

Instalação do DP4

Infelizmente, embora o N1QL DP4 esteja quase completamente integrado ao Couchbase Server, ele ainda não foi empacotado com ele. Isso significa que, para usar o DP4, você terá que fazer o download dos bits, iniciar o serviço e associá-lo a uma instância do Couchbase Server. Felizmente, fazer isso é relativamente fácil:

  • Primeiro, faça o download do N1QL DP4 aqui.
  • Em seguida, descompacte-o em um diretório em seu disco rígido
  • Por fim, execute o seguinte comando para iniciar o serviço e associá-lo a uma instância do Couchbase Server: .cbq-engine -datastore=https://[server_name]:8091/

Depois de fazer isso (é claro, altere [nome do servidor] para que seja um IP da instância do Couchbase), você precisará criar um índice para cada bucket que deseja usar. Para fazer isso, você pode executar a ferramenta de linha de comando de consulta interativa e criar os índices usando-a, ou pode fazer download do Couchbase .NET 2.0 SDK com N1QL DP4 "preview". Mostrarei primeiro como fazer isso com o shell interativo e, mais tarde, mostrarei como fazer isso programaticamente com o SDK.

  • Navegue até o diretório onde você descompactou o N1QL DP4 e digite o seguinte, alterando o com sua instância do servidor Couchbase: .cbq -engine=https://:8093/
  • Em seguida, digite o seguinte: CREATE PRIMARY INDEX ON [bucket name]
  • Pressione Enter (observe para alterar [bucket name] para um nome de bucket válido em sua instância do servidor Couchbase.

Usarei o bucket de amostra "beer sample" que vem pré-instalado com o Couchbase mais tarde, portanto, você provavelmente deve fazer o mesmo se quiser acompanhar o processo. Depois de fazer o download e instalar o N1QL DP4, podemos usar o Couchbase .NET SDK 2.0 para criar índices e executar consultas.

Uso do SDK com o N1QL DP4

Para usar o SDK, você precisará do Visual Studio instalado junto com o .NET Framework 4.5 ou superior. Se estiver usando o Mono, não o testei, mas você também poderá acompanhar o processo, desde que esteja usando uma versão do Mono que seja funcionalmente equivalente ao .NET Framework 4.5. Especificamente, o suporte para async/await, a palavra-chave dynamic e algumas das novas bibliotecas do .NET.

Download e referência dos bits

Para começar a trabalhar rapidamente com o SDK, siga estas etapas:

  • A versão prévia especial do SDK pode ser encontrada em aqui. Faça o download e descompacte-o em algum lugar de seu disco rígido.
  • Abra o VS e crie um novo projeto de "Aplicativo de console", chame-o de N1QL-DP4-Preview ou o que preferir.
  • Clique com o botão direito do mouse na pasta de referências no "Solution Explorer" à direita e depois em "Add Reference"
  • Use o botão "browse" para localizar as dll's que você baixou e descompactou na primeira etapa e adicione referências às seguintes: Couchbase.NetClient.dll, Common.Logging.dll e Newtonsoft.Json.dll.

Depois de chegar até aqui, você pode começar a escrever o código. Observe que vou presumir que a instância do servidor Couchbase está em execução no localhost. Caso contrário, você terá de configurar seu cliente para apontar para a instalação remota.

Uma nova API QueryRequest

O suporte do SDK para o N1QL Developer Preview 3 (DP3) era mínimo: somente consultas ad-hoc de strings literais eram suportadas. Com a nova API REST, uma nova classe QueryClient foi criada e integrada à classe CouchbaseBucket, que fornece uma API de wrapper para a maioria dos novos recursos da API REST - digo "a maioria" porque alguns recursos ainda não foram concluídos.

Essa nova API inclui uma classe para a construção de consultas usando uma interface fluente. Ela é muito semelhante à classe/API ViewQuery que o cliente também suporta e que foi lançada como parte do SDK GA para consulta de visualizações. Ela tem a seguinte assinatura:

[imagem]

Você pode encadear os vários parâmetros da API REST construindo uma solicitação de consulta usando uma instrução N1QL. A instrução N1QL em si ainda é uma string literal, mas você pode fornecer opções que permitem controlar como o serviço de consulta lida com a consulta. Não abordarei cada um desses parâmetros nesta publicação; deixarei isso para outra publicação do blog.

Observe que o QueryRequest não tem nada a ver com a linguagem N1QL? Isso é intencional. Há outro projeto em andamento que lida com a criação da consulta N1QL: um provedor de consulta integrada à linguagem (LINQ) para N1QL, que ainda está em desenvolvimento.

O que esse objeto faz é facilitar a gravação de uma solicitação de consulta sem ter que criá-la manualmente usando o intellisense do IDE e o ponto "." operador. Por exemplo:

Criação de índices

No exemplo a seguir, mostrarei como usar o QueryRequest acima e o Couchbase .NET SDK 2.0 N1QL DP4 Preview para criar e remover índices em tempo real:

Aqui, primeiro consultamos o "catálogo" do sistema para determinar quais compartimentos têm índices. Um bucket com um índice será retornado nessa lista. Se o índice existir, nós o eliminaremos (para que possamos recriá-lo de forma conveniente). Por fim, estamos recriando o índice. Observe que você normalmente não faria isso na produção, mas estamos aqui para ilustrar a funcionalidade fornecida pelo N1QL e pelo SDK.

Uso de parâmetros nomeados e parâmetros posicionais

O N1QL DP4 apresenta um recurso para a criação de consultas parametrizadas. Existe a funcionalidade para parâmetros nomeados, que são como pares nome/valor, e também para parâmetros posicionais, em que a posição do parâmetro corresponde ao seu ordinal.
Aqui está um exemplo de uma consulta que usa parâmetros posicionais:

        static void PositionalParameters(IBucket bucket)
        {
            var queryRequest = new QueryRequest()
                .Statement("SELECT * FROM amostra de cerveja WHERE type=$1 LIMIT $2″)
                .AddPositionalParameter("beer")
                .AddPositionalParameter(10);

            var result = bucket.Query(queryRequest);
            foreach (var row in result.Rows)
            {
                Console.WriteLine(row);
            }
        }

Observe que, no momento, os parâmetros posicionais não são indexados a zero! Portanto, se você substituísse $1 e $2 por $0 e $1, receberia uma mensagem de erro.
Mais uma vez, os parâmetros nomeados são como pares nome/valor e, ao contrário dos parâmetros posicionais, a ordem não é importante. Aqui está a mesma consulta acima usando parâmetros nomeados:

        static void NamedParameters(IBucket bucket)
        {
            var queryRequest = new QueryRequest()
                .Statement("SELECT * FROM amostra de cerveja WHERE type=$type LIMIT $limit")
                .AddNamedParameter("limit", 10)
                .AddNamedParameter("type", "beer");

            var result = bucket.Query(queryRequest);
            foreach (var row in result.Rows)
            {
                Console.WriteLine(row);
            }
        }

Observe que essa é a mesma declaração anterior, mas eu reordenei os parâmetros quando criei o QueryRequest para mostrar que a ordem não é importante.

Declarações preparadas

Os comandos preparados são semelhantes aos planos de consulta em cache nos bancos de dados relacionais. O que eles fazem é permitir que você incorra apenas no custo de analisar a consulta uma vez e, em seguida, o comando preparado pode ser usado várias vezes. Embora isso esteja incluído no N1QL DP4, o suporte do SDK para esse recurso está incompleto (ele simplesmente não funciona ainda). Espera-se que isso funcione em uma versão posterior, quando o código de visualização tiver sido mesclado com o ramo principal do SDK.

Em conclusão

Então, isso é tudo sobre a prévia do Couchbase .NET SDK 2.0 N1QL DP4! Há muito, muito mais a ser analisado e publicarei mais blogs à medida que o desenvolvimento avançar e nos aproximarmos do N1QL GA!

Se você tiver algum feedback ou se deparar com problemas ou bugs, deixe um comentário ou publique um bug no Jira aqui. Além disso, o código que foi incluído neste blog pode ser encontrado no github aqui.

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

Autor

Postado por Jeff Jeff Morris, engenheiro de software sênior, Couchbase

Jeff Morris é engenheiro de software sênior da Couchbase. Antes de ingressar na Couchbase, Jeff passou seis anos na Source Interlink como arquiteto da Web corporativa. Jeff é responsável pelo desenvolvimento dos SDKs do Couchbase e pela integração com o N1QL (linguagem de consulta).

4 Comentários

  1. Este é o McDonalds! (Estou adorando!)

  2. Alguma notícia sobre quando será o lançamento comercial do N1QL?

  3. Ersoy Vatansever abril 1, 2015 em 10:08 am

    Se eu não posso usar na produção, por que você está escrevendo esses ????
    Quando será lançada a versão comercial?

    1. Matt Ingenthron abril 1, 2015 em 4:53 pm

      O Couchbase lança DPs (Developer Previews) para obter feedback daqueles que estão interessados em ajudar a orientar o desenvolvimento dos recursos antes de bloquearmos a interface e chegarmos à produção. Essa é a ideia.

      Com relação ao lançamento, isso foi bastante comentado na semana passada - há um DP do Couchbase Server 4.0 em breve, seguido pela versão beta e GA. Dê uma olhada nisso: https://www.couchbase.com/press...

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.