Michael K. Aboagye trabalha como engenheiro de segurança de aplicativos e pentester da Web com bons conhecimentos em Linux, Git, PHP, Java, RDMS e desenvolvimento de banco de dados Nosql. Ele também gosta de se envolver com devops.

Banco de dados orientado a documentos e N1QL
Neste artigo, compartilharei meu conhecimento sobre por que um banco de dados orientado a documentos é totalmente diferente de um sistema de gerenciamento de banco de dados relacional e por que um banco de dados orientado a documentos tem um desempenho muito melhor do que um sistema de gerenciamento de banco de dados relacional em um mundo em que o big data está progredindo constantemente. Por fim, mostrarei como criar um banco de dados orientado a documentos com Couchbase e como usar a sintaxe SQL para executar em documentos JSON.
Breve introdução ao Couchbase
O Couchbase, assim como o MongoDB, é um produto ou sistema de banco de dados NoSQL. NoSQL, nesse contexto, significa simplesmente que os dados são armazenados sem o auxílio de uma linguagem de consulta estruturada; os dados são armazenados em documentos. O Couchbase é uma combinação de dois produtos: Memcached e Couchbase.
O Couchbase combina as vantagens do Memcached e do Couchbase para oferecer desempenho de expansão em um cluster de nós. O Couchbase está entre os vários produtos NoSQL que comprometeram a consistência eventual para dar mais ênfase à disponibilidade, à escalabilidade e à tolerância à partição.
De acordo com o teorema CAP de Eric Brewer, é impossível que sistemas distribuídos como o MongoDB ou o Couchbase atendam a todos os três conceitos: consistência, disponibilidade e tolerância parcial. Assim, o Couchbase aborda a consistência eventual por meio de seu recurso avançado de replicação, a replicação entre datacenters (XDCR), para gerenciar com eficácia a falha de nós, um problema comum para a maioria dos sistemas de gerenciamento de bancos de dados relacionais. Além disso, o Couchbase tem sua própria maneira de lidar com a falha de nós, que é um problema comum à maioria dos sistemas de gerenciamento de bancos de dados relacionais. O Couchbase implementa um vBucket conhecido como partição lógica ou sharding. Cada item de dados em um vBucket é armazenado em todos os nós presentes por meio de replicação. Assim, em caso de falha do nó, o Couchbase disponibiliza automaticamente um dos vBuckets de réplica.
Um nó do Couchbase Server vem com dois componentes principais Gerente de dados e Gerente de cluster.
Gerente de cluster - é responsável pelo ambiente do cluster do Couchbase. Ele lida com o rebalanceamento de dados entre os nós, fornece um mapa de cluster que ajuda os clientes que solicitam dados específicos a saber onde procurar esses dados, monitora os nós, coleta estatísticas e registro em log.
Gerente de dados - simplesmente gerencia o armazenamento e a recuperação de dados em documentos. Ele contém o cache de memória, o mecanismo de consulta e o mecanismo de persistência em disco.
Por fim, o Couchbase gerencia os dados em buckets. Um bucket no Couchbase é semelhante a um banco de dados no Microsoft SQL Server ou MySQL. Um bucket é composto de recursos relacionados, mas com esquemas diferentes. Quando há mais de um ou dois bancos de dados orientados por aplicativos, você precisa de dois buckets para gerenciar os dados provenientes desses dois aplicativos separadamente.
Diferença entre RDBMS e banco de dados orientado a documentos
Um sistema de banco de dados relacional é completamente diferente de um banco de dados orientado a documentos em termos de conceito e estrutura (esquema). Além disso, um banco de dados relacional é criado usando comandos SQL que não são muito difíceis de codificar e ler.
Em um banco de dados relacional, as tabelas são vinculadas umas às outras por meio de chaves estrangeiras. Chave estrangeira é um conceito em um sistema de banco de dados SQL em que uma chave estrangeira consiste em campos comuns que são usados para vincular tabelas. Além disso, os esquemas em bancos de dados relacionais são bastante rígidos em comparação com um banco de dados orientado a documentos.
Vamos supor que a Aero Air tenha um banco de dados relacional para gerenciar seus voos. O banco de dados consiste em três tabelas, a saber: Programação de voos, Informações de voos e Rotas de voos.
| ID do voo | Nome do voo | Número de assentos | Distância |
| 001 | Boeing Erv | 5,000 | 1318 km |
| 002 | Airbus Erv | 1,000 | 1578 km |
| 003 | Max Erv | 2,000 | 2967 km |
| Código das rotas | ID do voo | De | Para |
| AeroAir001 | 001 | Glasgow | Paris |
| AeroAir002 | 002 | Bruxelas | Bengaluru |
| AeroAir003 | 003 | Hamburgo | Moscou |
| Código de programação | ID do voo | Tempo de Dep. | Horário de chegada |
| AeroAir-010 | 001 | 1700 GMT | 2000 GMT |
| AeroAir-012 | 002 | 1600 GMT | 1300 GMT |
| AeroAir-013 | 003 | 1400 GMT | 1400 GMT |
Em um banco de dados orientado a documentos, o esquema de um banco de dados difere em cada documento do banco de dados. Um banco de dados orientado a documentos permite um esquema dinâmico; portanto, um documento pode conter um campo ou uma chave específica diferente de outros documentos. Em um banco de dados de documentos típico, os comandos SQL não são permitidos. No entanto, você pode usar o N1QL, também chamado de "Nickel", para executar SQL em seus documentos.
O N1QL é uma linguagem de consulta específica para o Couchbase que permite reunir os dois mundos do NoSQL e do SQL. Você pode usar o N1QL para executar em um documento JSON, um recurso que torna o N1QL interessante e que exploraremos mais adiante.
Para nosso exemplo anterior de Aero Air banco de dados de voos, podemos fazer o mesmo usando o Couchbase, nomeando nosso bucket como "AeroAir" para gerenciar os dados armazenados. Por meio do AeroAir baldeOs desenvolvedores do Couchbase podem editar dados em documentos.
Criação de um banco de dados orientado a documentos com o Couchbase
A criação de um banco de dados orientado a documentos com o Couchbase requer conhecimento básico do formato JSON.
Primeiro, vamos supor que você já tenha instalado o Couchbase Server (edição Enterprise ou edição Community).
Aqui está uma visão geral do Couchbase Server:

Como criar um bucket no Couchbase
Antes de criar documentos, é necessário criar um compartimento para gerenciar os dados armazenados. Você pode digitar o nome que preferir; eu optei por nomear o bucket como AeroAir. 
Como você pode ver, temos um bucket ativo, que é o bucket AeroAir.

Agora, vamos supor que a AeroAir tenha um documento simples composto de detalhes de voos relevantes para viajantes ou clientes.

Lembre-se de que um banco de dados orientado a documentos é totalmente diferente e bastante flexível em comparação com um banco de dados relacional pertencente à família SQL. Com um banco de dados orientado a documentos, você pode incluir campos extras em outros documentos, bem como excluí-los.
Vamos criar um documento de voo para o Boeing ERV. Na extremidade direita do AeroAir, você pode ver que há dois botões rotulados como Documentos e Ver. Clique no botão de documento para criar um novo documento de voo para o nosso balde AeroAir.
Você cria um novo documento editando dados predefinidos no formato JSON com seus próprios dados.

Como você pode ver, criei um documento de voo para o Boeing ERV no balde da AeroAir.

Além disso, criei quatro documentos no bucket da AeroAir. Cada documento representa dados de informações de voo, dados de programação de voo e informações de rota. Você pode continuar a criar quantos documentos quiser para o bucket AeroAir.

Veja abaixo uma ilustração da aparência dos dados em um documento. Deixar uma vírgula no final de um documento JSON é considerado válido, a menos que a vírgula no último elemento preceda a tag de fechamento.

Quando você inclui uma vírgula adicional, é notificado de um erro JSON. Confira o exemplo abaixo:

Como dito anteriormente, com um banco de dados orientado a documentos, você pode inserir campos que estão ausentes em alguns documentos, mas presentes em outros. Isso não afeta totalmente o banco de dados porque um banco de dados orientado a documentos tem um esquema muito flexível. Veja o exemplo entre o voo Boeing ERV e o Boeing FFH.


Como você pode ver, embora ambos os documentos estejam no bucket da AeroAir, um documento tem um campo que está ausente em outro documento, mas nosso banco de dados ou bucket não é afetado.
No Couchbase, o acesso aos dados em um documento é bem diferente de um banco de dados relacional em que você depende da chave primária para recuperar um valor específico em uma linha. No Couchbase, você pode usar o Document_ID de um documento para acessar um documento específico em um bucket, desde que o ID do documento seja válido e o documento exista. Semelhante a um banco de dados relacional, um ID de documento deve ser exclusivo.
Assim, em nosso exemplo de banco de dados da AeroAir, usei o nome dos voos como ID do documento.

Agora que criamos documentos nos dados da AeroAir, é hora de consultarmos nossos documentos.
O Couchbase fornece a linguagem de consulta N1QL, que é semelhante à sintaxe SQL, mas pode operar em documentos JSON e os resultados são retornados no formato JSON.
O conhecimento básico em MySQL ou, em geral, em SQL é suficiente para levá-lo ao básico e, provavelmente, aos comandos avançados do N1QL. Assim como o SQL, o N1QL consiste em uma linguagem de manipulação de dados e uma linguagem de definição de dados.
Basicamente, usarei cláusulas como SELECT, WHERE e FROM para consultar documentos no AeroAir. Como o SQL, o N1QL oferece mais do que SELECIONAR, DEe ONDE. Por exemplo, você pode usar a cláusula UPDATE se quiser atualizar um valor em seu documento, ou INSERT se quiser incluir novos dados.
Quando você já conhece a sintaxe SQL, usar o N1QL do Couchbase em documentos JSON não deve ser um problema.
Vamos nos concentrar apenas em como SELECIONAR, DEe ONDE usando as cláusulas a seguir para consultar documentos no AeroAir usando o Couchbase N1QL.
SELECIONAR - Você pode usar essa cláusula para selecionar um campo específico em um documento, incluindo um símbolo de asterisco depois que a cláusula SELECT retornar todos os campos nos documentos.
DE - Você pode usar essa cláusula para o intervalo de dados com o qual trabalhar ou operar.
ONDE - Você pode usar essa cláusula indicando as condições que os documentos recuperados devem ter ou satisfazer.
O Couchbase fornece um Query Workbench para executar consultas no console da Web e uma ferramenta cbq se você preferir usar a linha de comando.
Usando o Query Workbench
Agora que temos alguns documentos em nossos compartimentos, vamos tentar fazer algumas consultas básicas em um ou dois documentos.
Em primeiro lugar, clique no ícone QUERY ao lado da guia ÍNDICES ou entre BALDES DE DADOS e ÍNDICES. Como você pode ver, há uma análise de bucket que mostra o bucket atual que está sendo gerenciado pelo sistema. Também à direita, há o painel de resultados que mostra onde o resultado retornado no formato JSON é exibido.

Tenho determinados campos nos documentos para tornar nossa consulta mais interessante. Digamos que estejamos interessados em um voo fixo com Internet Wi-Fi. Execução da consulta no console da Web sem criar um índice primário no bucket AeroAir acaba sendo um erro.

Agora tente executar a mesma consulta no console da Web. Você pode ver que, desta vez, a consulta foi executada com êxito.

Você pode ver que os resultados são retornados no formato JSON. Consultamos um voo com velocidade de Internet superior a 100 kbps. Ele retornou o voo Boeing FFH como o único voo que satisfaz a condição da consulta. O operador de comparação significa simplesmente maior que 100 kilobytes por segundo.
Você pode especificar uma condição específica sem usar operadores de comparação. Digamos que queremos descobrir qual voo tem Jack Charisma designado como piloto principal.

É interessante notar que, embora N1QL usa a sintaxe SQL, ele pode ser executado em documentos JSON. É isso que torna o Couchbase com N1QL interessante e uma alternativa melhor a um banco de dados relacional.
Esta postagem faz parte do Programa de Redação da Comunidade Couchbase