CouchDB - Guia rápido

O sistema de gerenciamento de banco de dados fornece mecanismo para armazenamento e recuperação de dados. Existem três tipos principais de sistemas de gerenciamento de banco de dados: RDBMS (Relational Database management Systems), OLAP (Online Analytical Processing Systems) e NoSQL.

RDBMS

RDBMS significa Relational Database Management System. O RDBMS é a base do SQL e de todos os sistemas de banco de dados modernos, como MS SQL Server, IBM DB2, Oracle, MySQL e Microsoft Access.

Um sistema de gerenciamento de banco de dados relacional (RDBMS) é um sistema de gerenciamento de banco de dados (DBMS) que se baseia no modelo relacional introduzido por EF Codd.

Os dados em RDBMS são armazenados em objetos de banco de dados chamados tables. A tabela é uma coleção de entradas de dados relacionadas e consiste em colunas e linhas. Ele armazena apenas dados estruturados.

OLAP

O Online Analytical Processing Server (OLAP) é baseado no modelo de dados multidimensional. Ele permite que gerentes e analistas obtenham uma visão das informações por meio de acesso rápido, consistente e interativo às informações.

Bancos de dados NoSQL

Um banco de dados NoSQL (às vezes chamado de Not Only SQL) é um banco de dados que fornece um mecanismo para armazenar e recuperar dados além das relações tabulares usadas em bancos de dados relacionais. Esses bancos de dados não têm esquemas, suportam replicação fácil, têm API simples, eventualmente consistentes e podem lidar com grandes quantidades de dados (big data).

O objetivo principal de um banco de dados NoSQL é ter o seguinte -

  • Simplicidade de design,
  • Escala horizontal e
  • Controle mais preciso sobre a disponibilidade.

Os bancos de dados NoSQL usam estruturas de dados diferentes em comparação aos bancos de dados relacionais. Isso torna algumas operações mais rápidas no NoSQL. A adequação de um determinado banco de dados NoSQL depende do problema que ele deve resolver. Esses bancos de dados armazenam dados estruturados e não estruturados, como arquivos de áudio, arquivos de vídeo, documentos, etc. Esses bancos de dados NoSQL são classificados em três tipos e são explicados a seguir.

Key-value Store- Esses bancos de dados são projetados para armazenar dados em pares de valores-chave e esses bancos de dados não terão nenhum esquema. Nesses bancos de dados, cada valor de dados consiste em uma chave indexada e um valor para essa chave.

Exemplos - BerkeleyDB, Cassandra, DynamoDB, Riak.

Column Store- Nesses bancos de dados, os dados são armazenados em células agrupadas em colunas de dados e essas colunas são agrupadas em famílias de colunas. Esses grupos de colunas podem conter qualquer número de colunas.

Exemplos - BigTable, HBase e HyperTable.

Document Store- São os bancos de dados desenvolvidos com base na ideia básica de armazenamentos de valores-chave em que "documentos" contêm dados mais complexos. Aqui, cada documento recebe uma chave exclusiva, que é usada para recuperar o documento. Eles são projetados para armazenar, recuperar e gerenciar informações orientadas a documentos, também conhecidas como dados semiestruturados.

Exemplos - CouchDB e MongoDB.

O que é CouchDB?

CouchDB é um banco de dados de código aberto desenvolvido pela Apache Software Foundation. O foco está na facilidade de uso, abraçando a web. É um banco de dados de armazenamento de documentos NoSQL.

Ele usa JSON, para armazenar dados (documentos), java script como sua linguagem de consulta para transformar os documentos, protocolo http para api acessar os documentos, consultar os índices com o navegador web. É um aplicativo multimestre lançado em 2005 e se tornou um projeto do Apache em 2008.

Por que CouchDB?

  • O CouchDB tem uma API REST baseada em HTTP, que ajuda a se comunicar com o banco de dados facilmente. E a estrutura simples de recursos e métodos HTTP (GET, PUT, DELETE) são fáceis de entender e usar.

  • Como armazenamos dados na estrutura flexível baseada em documentos, não há necessidade de se preocupar com a estrutura dos dados.

  • Os usuários recebem um poderoso mapeamento de dados, que permite consultar, combinar e filtrar as informações.

  • O CouchDB fornece replicação fácil de usar, com a qual você pode copiar, compartilhar e sincronizar os dados entre bancos de dados e máquinas.

Modelo de dados

  • O banco de dados é a estrutura / contêiner de dados mais externo no CouchDB.

  • Cada banco de dados é uma coleção de documentos independentes.

  • Cada documento mantém seus próprios dados e esquema independente.

  • Os metadados do documento contêm informações de revisão, o que permite mesclar as diferenças ocorridas durante a desconexão das bases de dados.

  • O CouchDB implementa controle de simultaneidade de várias versões, para evitar a necessidade de bloquear o campo do banco de dados durante as gravações.

Recursos do CouchDB: Reduza o Conteúdo

Armazenamento de Documentos

CouchDB é um banco de dados NoSQL de armazenamento de documentos. Ele fornece a facilidade de armazenar documentos com nomes exclusivos e também fornece uma API chamada RESTful HTTP API para ler e atualizar (adicionar, editar, excluir) documentos de banco de dados.

No CouchDB, os documentos são a unidade primária de dados e também incluem metadados. Os campos do documento têm nomes exclusivos e contêm valores de vários tipos (texto, número, booleano, listas etc.) e não há limite definido para o tamanho do texto ou contagem de elementos.

As atualizações de documentos (adicionar, editar, excluir) seguem a atomicidade, ou seja, serão salvas completamente ou não serão salvas de forma alguma. O banco de dados não terá documentos parcialmente salvos ou editados.

Estrutura do Documento Json

{
   "field" : "value",
   "field" : "value",
   "field" : "value",
}

Propriedades ACID

CouchDB contém propriedades ACID como um de seus recursos.

Consistência - Quando os dados no CouchDB foram confirmados uma vez, esses dados não serão modificados ou sobrescritos. Portanto, o CouchDB garante que o arquivo de banco de dados sempre estará em um estado consistente.

Um modelo Multi-Version Concurrency Control (MVCC) é usado por leituras CouchDB, por causa do qual o cliente verá um instantâneo consistente do banco de dados do início ao fim da operação de leitura.

Sempre que um documento é atualizado, o CouchDB descarrega os dados no disco e o cabeçalho do banco de dados atualizado é gravado em dois blocos consecutivos e idênticos para formar os primeiros 4k do arquivo e, em seguida, descarregado de forma síncrona no disco. As atualizações parciais durante a liberação serão descartadas.

Se a falha ocorreu durante a confirmação do cabeçalho, uma cópia sobrevivente dos cabeçalhos idênticos anteriores permanecerá, garantindo a coerência de todos os dados previamente confirmados. Exceto na área do cabeçalho, verificações de consistência ou consertos após uma falha ou falha de energia nunca são necessários.

Compactação

Sempre que o espaço no arquivo do banco de dados for desperdiçado acima de certa medida, todos os dados ativos serão copiados (clonados) para um novo arquivo. Quando o processo de cópia estiver totalmente concluído, o arquivo antigo será descartado. Tudo isso é feito por processo de compactação. O banco de dados permanece online durante a compactação e todas as atualizações e leituras podem ser concluídas com êxito.

Visualizações

Os dados no CouchDB são armazenados em documentos semiestruturados que são flexíveis com estruturas implícitas individuais, mas é um modelo de documento simples para armazenamento e compartilhamento de dados. Se quisermos ver nossos dados de muitas maneiras diferentes, precisamos filtrar, organizar e relatar os dados que não foram decompostos em tabelas.

Para resolver esse problema, o CouchDB fornece um modelo de visualização. As visualizações são o método de agregar e relatar os documentos em um banco de dados e são criadas sob demanda para agregar, unir e relatar os documentos do banco de dados. Como as visualizações são construídas dinamicamente e não afetam o documento subjacente, você pode ter quantas representações de visualização diferentes dos mesmos dados desejar.

História

  • CouchDB foi escrito na linguagem de programação Erlang.
  • Foi iniciado por Damien Katz em 2005.
  • O CouchDB se tornou um projeto Apache em 2008.

A versão atual do CouchDB é 1.61.

Este capítulo ensina como instalar o CouchDB em sistemas Windows e Linux.

Instalando CouchDB no Windows

Baixar CouchDB

O site oficial do CouchDB é https://couchdb.apache.org. Se você clicar no link fornecido, poderá obter a página inicial do site oficial do CouchDB conforme mostrado abaixo.

Se você clicar no botão de download, isso levará a uma página onde são fornecidos links de download do CouchDB em vários formatos. O instantâneo a seguir ilustra o mesmo.

Escolha o link de download para sistemas Windows e selecione um dos mirrors fornecidos para iniciar o download.

Instalando CouchDB

O CouchDB será baixado para o seu sistema na forma de arquivo de configuração denominado setup-couchdb-1.6.1_R16B02.exe. Execute o arquivo de instalação e prossiga com a instalação.

Após a instalação, abra a interface da web integrada do CouchDB visitando o seguinte link: http://127.0.0.1:5984/. Se tudo correr bem, você verá uma página da web com a seguinte saída.

{
   "couchdb":"Welcome","uuid":"c8d48ac61bb497f4692b346e0f400d60",
   "version":"1.6.1",
   "vendor":{
      "version":"1.6.1","name":"The Apache Software Foundation"
   }
}

Você pode interagir com a interface da web do CouchDB usando o seguinte url -

http://127.0.0.1:5984/_utils/

Isso mostra a página de índice do Futon, que é a interface da web do CouchDB.

Instalando o CouchDB em sistemas Linux

Para muitos dos sistemas com sabor do Linux, eles fornecem o CouchDB internamente. Para instalar este CouchDB, siga as instruções.

No Ubuntu e Debian, você pode usar -

sudo aptitude install couchdb

No Gentoo Linux, há um ebuild do CouchDB disponível -

sudo emerge couchdb

Se o seu sistema Linux não tiver CouchDB, siga a próxima seção para instalar o CouchDB e suas dependências.

Instalando dependências do CouchDB

A seguir está a lista de dependências que devem ser instaladas para obter o CouchDB em seu sistema−

  • Erlang OTP
  • ICU
  • OpenSSL
  • Mozilla SpiderMonkey
  • GNU Make
  • Coleção de compiladores GNU
  • libcurl
  • help2man
  • Python para documentos
  • Esfinge Python

Para instalar essas dependências, digite os seguintes comandos no terminal. Aqui estamos usando o Centos 6.5 e os seguintes comandos irão instalar os softwares necessários compatíveis com o Centos 6.5.

$sudo yum install autoconf
$sudo yum install autoconf-archive
$sudo yum install automake
$sudo yum install curl-devel
$sudo yum install erlang-asn1
$sudo yum install erlang-erts
$sudo yum install erlang-eunit
$sudo yum install erlang-os_mon
$sudo yum install erlang-xmerl
$sudo yum install help2man
$sudo yum install js-devel
$sudo yum install libicu-devel
$sudo yum install libtool
$sudo yum install perl-Test-Harness

Note −Para todos esses comandos, você precisa usar o sudo. O procedimento a seguir converte um usuário normal em um sudoer.

  • Faça login como root no usuário administrador

  • Abrir sudo arquivo usando o seguinte comando -

visudo
  • Em seguida, edite como mostrado abaixo para dar ao seu usuário existente os privilégios sudoer -
Hadoop All=(All) All , and press esc : x to write the changes to the file.

Depois de fazer download de todas as dependências em seu sistema, faça download do CouchDB seguindo as instruções fornecidas.

Baixando CouchDB

O Apache software Foundation não fornecerá o arquivo .tar completo para CouchDB, então você deve instalá-lo a partir da fonte.

Crie um novo diretório para instalar o CouchDB, navegue até esse diretório criado e baixe o código-fonte do CouchDB executando os seguintes comandos -

$ cd
$ mkdir CouchDB
$ cd CouchDB/
$ wget
http://www.google.com/url?q=http%3A%2F%2Fwww.apache.org%2Fdist%2Fcouchdb%2Fsource%2F1.6.1%2Fapache-couchdb-1.6.1.tar.gz

Isso fará o download do arquivo de origem CouchDB em seu sistema. Agora descompacte oapache-couchdb-1.6.1.tar.gz como mostrado abaixo.

$ tar zxvf apache-couchdb-1.6.1.tar.gz

Configurando CouchDB

Para configurar o CouchDB, faça o seguinte -

  • Navegue até a pasta inicial do CouchDB.
  • Faça login como superusuário.
  • Configure usando o prompt ./configure conforme mostrado abaixo -
$ cd apache-couchdb-1.6.1
$ su
Password:
# ./configure --with-erlang=/usr/lib64/erlang/usr/include/

Ele fornece a seguinte saída semelhante à mostrada abaixo com uma linha de conclusão dizendo - You have configured Apache CouchDB, time to relax.

# ./configure --with-erlang=/usr/lib64/erlang/usr/include/

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
………………………………………………………..
……………………….
config.status: creating var/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: creating src/snappy/google-snappy/config.h
config.status: src/snappy/google-snappy/config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands

You have configured Apache CouchDB, time to relax.

Run `make && sudo make install' to install.

Instalando CouchDB

Agora digite o seguinte comando para instalar o CouchDB em seu sistema.

# make && sudo make install

Ele instala o CouchDB em seu sistema com uma linha de conclusão dizendo - You have installed Apache CouchDB, time to relax.

Iniciando CouchDB

Para iniciar o CouchDB, navegue até a pasta inicial do CouchDB e use o seguinte comando -

$ cd apache-couchdb-1.6.1
$ cd etc
$ couchdb start

Ele inicia o CouchDB fornecendo a seguinte saída: -

Apache CouchDB 1.6.1 (LogLevel=info) is starting.
Apache CouchDB has started. Time to relax.
[info] [lt;0.31.0gt;] Apache CouchDB has started on http://127.0.0.1:5984/
[info] [lt;0.112.0gt;] 127.0.0.1 - - GET / 200
[info] [lt;0.112.0gt;] 127.0.0.1 - - GET /favicon.ico 200

Verificação

Como o CouchDB é uma interface da web, tente digitar o seguinte url da página inicial no navegador.

http://127.0.0.1:5984/

Ele produz a seguinte saída -

{
   "couchdb":"Welcome",
   "uuid":"8f0d59acd0e179f5e9f0075fa1f5e804",
   "version":"1.6.1",
   "vendor":{
      "name":"The Apache Software Foundation",
      "version":"1.6.1"
   }
}

Utilitário cURL

O utilitário cURL é uma maneira de se comunicar com o CouchDB.

É uma ferramenta para transferir dados de ou para um servidor, usando um dos protocolos suportados (HTTP, HTTPS, FTP, FTPS, TFTP, DICT, TELNET, LDAP ou FILE). O comando foi projetado para funcionar sem interação do usuário. cURL oferece muitos truques úteis, como suporte de proxy, autenticação de usuário, upload de ftp, postagem HTTP, conexões SSL (https :), cookies, resumo de transferência de arquivo e muito mais.

O utilitário cURL está disponível em sistemas operacionais como UNIX, Linux, Mac OS X e Windows. É um utilitário de linha de comando em que o usuário pode acessar o protocolo HTTP diretamente da linha de comando. Este capítulo ensina como usar o utilitário cURL.

Usando o utilitário cURL

Você pode acessar qualquer site da Web usando o utilitário cURL simplesmente digitando cURL seguido do endereço do site conforme mostrado abaixo -

curl www.tutorialspoint.com/

Por padrão, o utilitário cURL retorna o código-fonte da página solicitada. Ele exibe esse código na janela do terminal.

Opções do utilitário cURL

O utilitário cURL oferece várias opções de trabalho e você pode vê-las na ajuda do utilitário cURL.

O código a seguir mostra parte da ajuda do cURL.

$ curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
      --anyauth Pick "any" authentication method (H)
   -a/--append Append to target file when uploading (F/SFTP)
      --basic Use HTTP Basic Authentication (H)
      --cacert <file> CA certificate to verify peer against (SSL)
-d/--data <data> HTTP POST data (H)
      --data-ascii <data> HTTP POST ASCII data (H)
      --data-binary <data> HTTP POST binary data (H)
      --data-urlencode <name=data/[email protected]> HTTP POST data
urlencoded (H)
      --delegation STRING GSS-API delegation permission
      --digest Use HTTP Digest Authentication (H)
      --disable-eprt Inhibit using EPRT or LPRT (F)
      --disable-epsv Inhibit using EPSV (F)

   -F/--form <name=content> Specify HTTP multipart POST data (H)
      --form-string <name=string> Specify HTTP multipart POST data (H)
      --ftp-account <data> Account data to send when requested by server
(F)
      --ftp-alternative-to-user <cmd> String to replace "USER [name]" (F)
      --ftp-create-dirs Create the remote dirs if not present (F)
      --ftp-method [multi cwd/no cwd/single cwd] Control CWD usage (F)
      --ftp-pasv Use PASV/EPSV instead of PORT (F)

   -G/--get Send the -d data with a HTTP GET (H)

   -H/--header <line> Custom header to pass to server (H)
   -I/--head Show document info only
   -h/--help This help text
      --hostpubmd5 <md5> Hex encoded MD5 string of the host public key.
(SSH)
   -0/--http1.0 Use HTTP 1.0 (H)
      --ignore-content-length Ignore the HTTP Content-Length header
   -i/--include Include protocol headers in the output (H/F)

   -M/--manual Display the full manual

   -o/--output <file> Write output to <file> instead of stdout
      --pass <pass> Pass phrase for the private key (SSL/SSH)
      --post301 Do not switch to GET after following a 301
redirect (H)
      --post302 Do not switch to GET after following a 302
redirect (H)
   -O/--remote-name Write output to a file named as the remote file
      --remote-name-all Use the remote file name for all URLs
   -R/--remote-time Set the remote file's time on the local output
   -X/--request <command> Specify request command to use
      --retry <num> Retry request <num> times if transient problems
occur
      --retry-delay <seconds> When retrying, wait this many seconds
between each
      --retry-max-time <seconds> Retry only within this period
   -T/--upload-file <file> Transfer <file> to remote site
      --url <URL> Set URL to work with
   -B/--use-ascii Use ASCII/text transfer

Durante a comunicação com o CouchDB, certas opções do utilitário cURL foram amplamente utilizadas. A seguir estão as breves descrições de algumas opções importantes do utilitário cURL, incluindo aquelas usadas pelo CouchDB.

-X bandeira

(HTTP) Especifica um método de solicitação personalizado usado ao se comunicar com o servidor HTTP. A solicitação especificada é usada em vez do método usado de outra forma (cujo padrão é GET). Leia a especificação HTTP 1.1 para obter detalhes e explicações.

(FTP) Especifica um comando FTP personalizado a ser usado em vez de LIST ao fazer listas de arquivos com ftp.

-H

(HTTP) Cabeçalho extra é usado ao obter uma página da web. Observe que se você adicionar um cabeçalho personalizado com o mesmo nome de um dos internos que cURL usaria, seu cabeçalho definido externamente será usado em vez do interno. Isso permite que você faça um trabalho ainda mais complicado do que o normalmente faria o cURL. Você não deve substituir os cabeçalhos definidos internamente sem saber perfeitamente o que está fazendo. Substituir um cabeçalho interno por outro sem conteúdo no lado direito dos dois pontos impedirá que o cabeçalho apareça.

cURL garante que cada cabeçalho adicionado / substituído seja enviado com o marcador de fim de linha adequado. Nem você deve adicionar isso como parte do conteúdo do cabeçalho, nem adicionar novas linhas ou retornos de carro para desordenar as coisas.

Consulte também as opções -A / - user-agent e -e / - referer.

Esta opção pode ser usada várias vezes para adicionar / substituir / remover vários cabeçalhos.

-d bandeira

Usando este sinalizador de cURL, você pode enviar dados junto com a solicitação HTTP POST para o servidor, como se tivesse sido preenchido pelo usuário no formulário e enviado.

Example

Suponha que haja um site e você deseja fazer login nele ou enviar alguns dados para o site usando o sinalizador –d do utilitário cURL, conforme mostrado abaixo.

curl -X PUT http://mywebsite.com/login.html -d userid=001 -d password=tutorialspoint

Ele envia um post chunk que parece "userid=001&password=tutorialspoint". Da mesma forma, você também pode enviar documentos (JSON) usando o sinalizador -d.

-o bandeira

Usando este sinalizador, cURL grava a saída da solicitação em um arquivo.

Example

O exemplo a seguir mostra o uso de -o sinalizador do utilitário cURL.

$ curl -o example.html www.tutorialspoint.com/index.htm 
% Total % Received % Xferd Average Speed Time Time Time Current 
      Dload Upload Total Spent Left Speed
100 81193 0 81193 0 0 48168 0 --:--:-- 0:00:01 --:--:--
58077

Isso obtém o código-fonte da página inicial de tutorialspoint.com, cria um arquivo denominado example.com e salva a saída no arquivo denominado example.html.

A seguir está o instantâneo do example.html.

-O

Esta bandeira é semelhante a –o, a única diferença é com este sinalizador, um novo arquivo com o mesmo nome da url solicitada foi criado e o código-fonte da url solicitada será copiado para ele.

Example

O exemplo a seguir mostra o uso de -O sinalizador do utilitário cURL.

$ curl -O www.tutorialspoint.com/index.htm
% Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left
Speed
100 81285 0 81285 0 0 49794 0 --:--:-- 0:00:01 --:--:--
60077

Ele cria um novo arquivo com o nome index.htm e salva o código-fonte da página de índice de tutorialspoint.com nele.

Olá CouchDB

Você pode acessar a página inicial do CouchDB enviando uma solicitação GET para a instância do CouchDB instalada. Em primeiro lugar, certifique-se de ter instalado o CouchDB em seu ambiente Linux e de se ele está sendo executado com êxito e, em seguida, use a sintaxe a seguir para enviar uma solicitação get à instância do CouchDB.

curl http://127.0.0.1:5984/

Isso fornece um documento JSON, conforme mostrado abaixo, em que o CouchDB especifica os detalhes, como número da versão, nome do fornecedor e versão do software.

$ curl http://127.0.0.1:5984/
{
   "couchdb" : "Welcome",
   "uuid" : "8f0d59acd0e179f5e9f0075fa1f5e804",
   "version" : "1.6.1",
   "vendor" : {
      "name":"The Apache Software Foundation",
      "version":"1.6.1"
   }
}

Lista de todos os bancos de dados

Você pode obter a lista de todos os bancos de dados criados, enviando uma solicitação get junto com a string "_all_dbs string ". A seguir está a sintaxe para obter a lista de todos os bancos de dados no CouchDB.

curl -X GET http://127.0.0.1:5984/_all_dbs

Ele fornece a lista de todos os bancos de dados no CouchDB conforme mostrado abaixo.

$ curl -X GET http://127.0.0.1:5984/_all_dbs
[ "_replicator" , "_users" ]

Criando um banco de dados

Você pode criar um banco de dados no CouchDB usando cURL com o cabeçalho PUT usando a seguinte sintaxe -

$ curl -X PUT http://127.0.0.1:5984/database_name

Exemplo

Como exemplo, usando a sintaxe fornecida acima, crie um banco de dados com o nome my_database como mostrado abaixo.

$ curl -X PUT http://127.0.0.1:5984/my_database
{"ok":true}

Verificação

Verifique se o banco de dados foi criado, listando todos os bancos de dados conforme mostrado abaixo. Aqui você pode observar o nome do banco de dados recém-criado,"my_database" na lista

$ curl -X GET http://127.0.0.1:5984/_all_dbs

[ "_replicator " , "_users" , "my_database" ]

Obtendo informações do banco de dados

Você pode obter as informações sobre o banco de dados usando a solicitação get junto com o nome do banco de dados. A seguir está a sintaxe para obter as informações do banco de dados.

Exemplo

Como exemplo, vamos obter as informações do banco de dados chamado my_databasecomo mostrado abaixo. Aqui você pode obter as informações sobre seu banco de dados como uma resposta.

$ curl -X GET http://127.0.0.1:5984/my_database

{
   "db_name" : "my_database",
   "doc_count" : 0,
   "doc_del_count" : 0,
   "update_seq" : 0,
   "purge_seq" : 0,
   "compact_running" : false,
   "disk_size" : 79,
   "data_size" : 0,
   "instance_start_time" : "1423628520835029",
   "disk_format_version" : 6,
   "committed_update_seq" : 0
 }

Futon

Futon é a interface de administração integrada baseada na web do CouchDB. Ele fornece uma interface gráfica simples com a qual você pode interagir com o CouchDB. É uma interface ingênua e fornece acesso total a todos os recursos do CouchDB. A seguir está a lista desses recursos -

Databases −
  • Cria bancos de dados.
  • Destrói bancos de dados.
Documents −
  • Cria documentos.
  • Atualiza documentos.
  • Edita documentos.
  • Exclui documentos.

Futon inicial

Certifique-se de que o CouchDB esteja em execução e abra o seguinte url no navegador -

http://127.0.0.1:5984/_utils/

Se você abrir este url, ele exibe a página inicial do Futon conforme mostrado abaixo -

  • No lado esquerdo desta página você pode observar a lista de todos os bancos de dados atuais do CouchDB. Nesta ilustração, temos um banco de dados chamadomy_database, junto com bancos de dados definidos pelo sistema _replicator e _user.

  • No lado direito você pode ver o seguinte -

    • Tools - Nesta seção você pode encontrar Configuration para configurar o CouchDB, Replicator para realizar replicações, e Status para verificar o status do CouchDB e as modificações recentes feitas no CouchDB.

    • Documentation - Esta seção contém a documentação completa da versão recente do CouchDB.

    • Diagnostics - Sob este você pode verificar a instalação do CouchDB.

    • Recent Databases - Abaixo, você pode encontrar os nomes dos bancos de dados adicionados recentemente.

Usando cabeçalhos de solicitação HTTP, você pode se comunicar com o CouchDB. Por meio dessas solicitações, podemos recuperar dados do banco de dados, armazenar dados no banco de dados na forma de documentos e podemos visualizar e formatar os documentos armazenados em um banco de dados.

Formatos de solicitação HTTP

Ao nos comunicarmos com o banco de dados, usaremos diferentes formatos de solicitação como get, head, post, put, delete e copy. Para todas as operações no CouchDB, os dados de entrada e as estruturas de dados de saída estarão na forma de objeto JavaScript Object Notation (JSON).

A seguir estão os diferentes formatos de solicitação de protocolo HTTP usados ​​para se comunicar com o CouchDB.

  • GET- Este formato é usado para obter um item específico. Para obter itens diferentes, você deve enviar padrões de url específicos. No CouchDB, usando esta solicitação GET, podemos obter itens estáticos, documentos e configuração do banco de dados e informações estatísticas na forma de documentos JSON (na maioria dos casos).

  • HEAD - O método HEAD é usado para obter o cabeçalho HTTP de uma solicitação GET sem o corpo da resposta.

  • POST- A solicitação de postagem é usada para fazer upload de dados. No CouchDB usando a solicitação POST, você pode definir valores, fazer upload de documentos, definir valores de documentos e também pode iniciar certos comandos de administração.

  • PUT - Usando a solicitação PUT, você pode criar novos objetos, bancos de dados, documentos, visualizações e documentos de design.

  • DELETE - Usando a solicitação DELETE, você pode excluir documentos, visualizações e documentos de design.

  • COPY - Usando o método COPY, você pode copiar documentos e objetos.

Cabeçalhos de solicitação HTTP

Os cabeçalhos HTTP devem ser fornecidos para obter o formato e a codificação corretos. Ao enviar a solicitação ao servidor CouchDB, você pode enviar cabeçalhos de solicitação Http junto com a solicitação. A seguir estão os diferentes cabeçalhos de solicitação Http.

  • Content-type- Este cabeçalho é usado para especificar o tipo de conteúdo dos dados que fornecemos ao servidor junto com a solicitação. Em geral, o tipo de conteúdo que enviamos junto com a solicitação será do tipo MIME ou JSON (aplicativo / json). Usar o tipo de conteúdo em uma solicitação é altamente recomendado.

  • Accept- Este cabeçalho é usado para especificar o servidor, a lista de tipos de dados que o cliente pode entender, para que o servidor envie sua resposta usando esses tipos de dados. Geralmente aqui, você pode enviar a lista de tipos de dados MIME que o cliente aceita, separados por dois pontos.

    Embora o uso de Aceitar em consultas do CouchDB não seja obrigatório, é altamente recomendável garantir que os dados retornados possam ser processados ​​pelo cliente.

Cabeçalhos de resposta

Esses são os cabeçalhos da resposta enviada pelo servidor. Esses cabeçalhos fornecem informações sobre o conteúdo enviado pelo servidor como resposta.

  • Content-type- Este cabeçalho especifica o tipo MIME dos dados retornados pelo servidor. Para a maioria das solicitações, o tipo MIME retornado é texto / simples.

  • Cache-control- Este cabeçalho sugere ao cliente como tratar as informações enviadas pelo servidor. CouchDB retorna principalmente o must-revalidate, que indica que as informações devem ser revalidadas, se possível.

  • Content-length - Este cabeçalho retorna o comprimento do conteúdo enviado pelo servidor, em bytes.

  • Etag - Este cabeçalho é usado para mostrar a revisão de um documento ou visão.

Códigos de status

A seguir está a forma tabular do código de status enviado pelo cabeçalho http e sua descrição.

Sr. Não. Código de status e descrição
1

200 − OK

Este status será emitido quando uma solicitação for concluída com sucesso.

2

201 − Created

Este status será emitido quando um documento for criado.

3

202 − Accepted

Este status será emitido quando uma solicitação for aceita.

4

404 − Not Found

Este status será emitido quando o servidor não puder encontrar o conteúdo solicitado.

5

405 − Resource Not Allowed

Este status é emitido quando o tipo de solicitação HTTP usado é inválido.

6

409 − Conflict

Este status é emitido sempre que houver algum conflito de atualização.

7

415 − Bad Content Type

Este status indicou que o tipo de conteúdo solicitado não é compatível com o servidor.

8

500 − Internal Server Error

Este status é emitido sempre que os dados enviados na solicitação são inválidos.

Caminhos de URL HTTP

Existem certos caminhos de url usando os quais você pode interagir diretamente com o banco de dados. A seguir está o formato tabular de tais caminhos de url.

Sr. Não. URL e operação
1

PUT /db

Este url é usado para criar um novo banco de dados.

2

GET /db

Este url é usado para obter as informações sobre o banco de dados existente.

3

PUT /db/document

Este url é usado para criar um documento / atualizar um documento existente.

4

GET /db/document

Este url é usado para obter o documento.

5

DELETE /db/document

Este url é usado para excluir o documento especificado do banco de dados especificado.

6

GET /db/_design/design-doc

Este url é usado para obter a definição de um documento de design.

7

GET /db/_design/designdoc/_view/view-name

Este url é usado para acessar a visão, nome da visão do documento de design do banco de dados especificado.

Banco de dados é a estrutura de dados mais externa do CouchDB, onde seus documentos são armazenados. Você pode criar esses bancos de dados usando o utilitário cURL fornecido pelo CouchDB, bem como Futon a interface da web do CouchDB.

Criando um banco de dados usando o utilitário cURL

Você pode criar um banco de dados no CouchDB enviando uma solicitação HTTP ao servidor usando o método PUT por meio do utilitário cURL. A seguir está a sintaxe para criar um banco de dados -

$ curl -X PUT http://127.0.0.1:5984/database name

Usando −Xpodemos especificar o método de solicitação personalizado HTTP a ser usado. Neste caso, estamos usando o método PUT. Quando usamos a operação / método PUT, o conteúdo da url especifica o nome do objeto que estamos criando usando a solicitação HTTP. Aqui temos que enviar o nome do banco de dados usando put request na url para criar um banco de dados.

Exemplo

Usando a sintaxe fornecida acima, se você deseja criar um banco de dados com o nome my_database, você pode criá-lo da seguinte maneira

curl -X PUT http://127.0.0.1:5984/my_database
{
   "ok":true
}

Como resposta, o servidor irá retornar um documento JSON com conteúdo “ok” - true indicando que a operação foi bem-sucedida.

Verificação

Verifique se o banco de dados foi criado, listando todos os bancos de dados conforme mostrado abaixo. Aqui você pode observar o nome de um banco de dados recém-criado," my_database " na lista.

$ curl -X GET http://127.0.0.1:5984/_all_dbs

[ "_replicator " , " _users " , " my_database " ]

Criando um banco de dados usando Futon

Para criar um banco de dados, abra o http://127.0.0.1:5984/_utils/. Você obterá uma página de visão geral / índice do CouchDB conforme mostrado abaixo.

Nesta página, você pode ver a lista de bancos de dados no CouchDB, um botão de opção Criar banco de dados no lado esquerdo.

Agora clique no link criar banco de dados. Você pode ver uma janela pop-upCreate New Databasespedindo o nome do banco de dados para o novo banco de dados. Escolha qualquer nome seguindo os critérios mencionados. Aqui estamos criando outro banco de dados com o nome tutorials_point. Clique no botão criar como mostrado na imagem a seguir.

Excluindo um banco de dados usando o utilitário cURL

Você pode excluir um banco de dados no CouchDB enviando uma solicitação ao servidor usando o método DELETE por meio do utilitário cURL. A seguir está a sintaxe para criar um banco de dados -

$ curl -X DELETE http://127.0.0.1:5984/database name

Usando −Xpodemos especificar um método de solicitação personalizado de HTTP que estamos usando, enquanto nos comunicamos com o servidor HTTP. Neste caso, estamos usando o método DELETE. Envie o url para o servidor especificando o banco de dados a ser excluído dele.

Exemplo

Suponha que haja um banco de dados denominado my_database2 no CouchDB. Usando a sintaxe fornecida acima, se você quiser excluí-lo, você pode fazer da seguinte maneira -

$ curl -X DELETE http://127.0.0.1:5984/my_database2
{
   "ok" : true
}

Como resposta, o servidor retornará um documento JSON com conteúdo “ok” - true indicando que a operação foi bem-sucedida.

Verificação

Verifique se o banco de dados foi excluído listando todos os bancos de dados conforme mostrado abaixo. Aqui você pode observar o nome do banco de dados excluído,"my_database" não está na lista.

$ curl -X GET http://127.0.0.1:5984/_all_dbs

[ "_replicator " , " _users " ]

Excluindo um banco de dados usando o Futon

Para excluir um banco de dados, abra o http://127.0.0.1:5984/_utils/ url onde você obterá uma página de visão geral / índice do CouchDB, conforme mostrado abaixo.

Aqui você pode ver três bancos de dados criados pelo usuário. Vamos excluir o banco de dados denominado tutorials_point2. Para excluir um banco de dados, selecione um da lista de bancos de dados e clique nele, o que o levará à página de visão geral do banco de dados selecionado, onde você pode ver as várias operações em bancos de dados. A imagem a seguir mostra o mesmo -

Entre eles você pode encontrar Delete Databaseopção. Ao clicar nele, você obterá uma janela pop-up perguntando se você tem certeza! Clique em deletar para deletar o banco de dados selecionado.

Os documentos são a estrutura de dados central do CouchDB. O conteúdo do banco de dados será armazenado na forma de documentos em vez de tabelas. Você pode criar esses documentos usando o utilitário cURL fornecido pelo CouchDB, bem como o Futon. Este capítulo aborda as maneiras de criar um documento em um banco de dados.

Cada documento no CouchDB possui um ID exclusivo. Você pode escolher seu próprio ID, que deve ter a forma de uma string. Geralmente, UUID (Universally Unique IDentifier) ​​é usado, que são números aleatórios que têm menos chance de criar uma duplicata. Estes são preferidos para evitar colisões.

Criando um documento usando o utilitário cURL

Você pode criar um documento no CouchDB enviando uma solicitação HTTP ao servidor usando o método PUT por meio do utilitário cURL. A seguir está a sintaxe para criar um documento.

$ curl -X PUT http://127.0.0.1:5984/database name/"id" -d ' { document} '

Usando −X, podemos especificar um método de solicitação personalizado de HTTP que estamos usando, enquanto nos comunicamos com o servidor HTTP. Neste caso, estamos usando o método PUT. Quando usamos o método PUT, o conteúdo da url especifica o nome do objeto que estamos criando usando a solicitação HTTP. Aqui temos que enviar o seguinte -

  • O nome do banco de dados no qual estamos criando o documento.

  • O ID do documento.

  • Os dados do documento. −dopção é usada para enviar os dados / documento por meio de solicitação HTTP. Ao escrever um documento, basta inserir seus pares de campo-valor separados por dois pontos, entre colchetes, conforme mostrado abaixo -

{
   Name : Raju
   age : 23
   Designation : Designer
}

Exemplo

Usando a sintaxe fornecida acima, se você deseja criar um documento com id 001 em um banco de dados com nome my_database, você pode criá-lo conforme mostrado abaixo.

$ curl -X PUT http://127.0.0.1:5984/my_database/"001" -d
'{ " Name " : " Raju " , " age " :" 23 " , " Designation " : " Designer " }'

{"ok":true,"id":"001","rev":"1-1c2fae390fa5475d9b809301bbf3f25e"}

A resposta do CouchDB a esta solicitação contém três campos -

  • "ok", indicando que a operação foi bem-sucedida.

  • "id", que armazena o id do documento e

  • "rev",isso indica o id de revisão. Cada vez que você revisa (atualiza ou modifica) um documento, um_revvalor será gerado pelo CouchDB. Se você deseja atualizar ou excluir um documento, o CouchDB espera que você inclua o_revcampo da revisão que você deseja alterar. Quando o CouchDB aceitar a mudança, ele gerará um novo número de revisão. Este mecanismo garante o controle da concorrência.

Verificação

Se você deseja visualizar o documento criado, pode obtê-lo usando o documento conforme mostrado abaixo.

$ curl -X GET http://127.0.0.1:5984/my_database/001
{
   "_id": "001",
   "_rev": "1-3fcc78daac7a90803f0a5e383f4f1e1e",
   "Name": "Raju",
   "age": 23,
   "Designation": "Designer"
}

Criando um documento usando o Futon

Para criar um documento, abra o http://127.0.0.1:5984/_utils/ url para obter uma página de visão geral / índice do CouchDB conforme mostrado abaixo.

Selecione o banco de dados no qual deseja criar o documento. Abra a página Visão geral do banco de dados e selecioneNew Document opção como mostrado abaixo.

Quando você seleciona o New Documentopção, CouchDB cria um novo documento de banco de dados, atribuindo a ele um novo id. Você pode editar o valor do id e atribuir seu próprio valor na forma de uma string. Na ilustração a seguir, criamos um novo documento com um id 001.

Nesta página, você pode observar três opções - salvar Documento, Adicionar Campo e Carregar Anexo.

Adicionar campo ao documento

Para adicionar campo ao documento clique em Add Fieldopção. Depois de criar um banco de dados, você pode adicionar um campo a ele usando esta opção. Clique nele para obter um par de caixas de texto, a saber,Field, value.Você pode editar esses valores clicando neles. Edite esses valores e digite o par Campo-Valor desejado. Clique no botão verde para salvar esses valores.

Na ilustração a seguir, criamos três campos Nome, idade e Designação do funcionário.

Salvar Documento

Você pode salvar as alterações feitas no documento clicando nesta opção. Depois de salvar, um novo id_rev será gerado conforme mostrado abaixo.

Atualizando documentos usando cURL

Você pode atualizar um documento no CouchDB enviando uma solicitação HTTP ao servidor usando o método PUT por meio do utilitário cURL. A seguir está a sintaxe para atualizar um documento.

curl -X PUT http://127.0.0.1:5984/database_name/document_id/ -d '{ "field" : "value", "_rev" : "revision id" }'

Exemplo

Suponha que haja um documento com id 001 no banco de dados denominado my_database. Você pode excluir isso conforme mostrado abaixo.

Em primeiro lugar, obtenha o id de revisão do documento a ser atualizado. Você pode encontrar o_rev do documento no próprio documento, portanto, obtenha o documento conforme mostrado abaixo.

$ curl -X GET http://127.0.0.1:5984/my_database/001
{
   "_id" : "001",
   "_rev" : "2-04d8eac1680d237ca25b68b36b8899d3 " ,
   "age" : "23"
}

Use o id de revisão _rev do documento para atualizá-lo. Aqui, estamos atualizando a idade de 23 para 24.

$ curl -X PUT http://127.0.0.1:5984/my_database/001/ -d
' { " age " : " 24 " , " _rev " : " 1-1c2fae390fa5475d9b809301bbf3f25e " } '

{ " ok " : true , " id " : " 001 " , " rev " : " 2-04d8eac1680d237ca25b68b36b8899d3 " }

Verificação

Para verificar o documento, obtenha o documento novamente usando a solicitação GET conforme mostrado abaixo.

$ curl -X GET http://127.0.0.1:5984/my_database/001
{
   " _id " : " 001 ",
   " _rev " : " 2-04d8eac1680d237ca25b68b36b8899d3 " ,
   " age " : " 23 "
 }
Note

A seguir estão alguns pontos importantes a serem observados ao atualizar um documento.

  • A URL que enviamos na solicitação contendo o nome do banco de dados e o id do documento.

  • Atualizar um documento existente é o mesmo que atualizar o documento inteiro. Você não pode adicionar um campo a um documento existente. Você só pode gravar uma versão inteiramente nova do documento no banco de dados com o mesmo ID de documento.

  • Temos que fornecer o número de revisão como parte da solicitação JSON.

  • Em troca, o JSON contém a mensagem de sucesso, o ID do documento sendo atualizado e as novas informações de revisão. Se você deseja atualizar a nova versão do documento, você deve citar este número de revisão mais recente.

Atualizando documentos usando Futon

Para excluir um documento, abra o http://127.0.0.1:5984/_utils/ url para obter uma página de visão geral / índice do CouchDB conforme mostrado abaixo.

Selecione o banco de dados onde existe o documento a ser atualizado e clique nele. Aqui estamos atualizando um documento no banco de dados chamadotutorials_point. Você obterá a lista de documentos no banco de dados conforme mostrado abaixo.

Selecione um documento que deseja atualizar e clique nele. Você obterá o conteúdo dos documentos conforme mostrado abaixo.

Aqui, para atualizar a localização de Delhi a Hyderabad, clique na caixa de texto, edite o campo e clique no botão verde para salvar as alterações conforme mostrado abaixo.

Excluindo um documento usando o utilitário cURL

Você pode excluir um documento no CouchDB enviando uma solicitação HTTP ao servidor usando o método DELETE por meio do utilitário cURL. A seguir está a sintaxe para excluir um documento.

curl -X DELETE http : // 127.0.0.1:5984 / database name/database id?_rev id

Usando −X,podemos especificar um método de solicitação personalizado de HTTP que estamos usando, enquanto nos comunicamos com o servidor HTTP. Neste caso, estamos usando o método Delete. Excluir um banco de dados /database_name/database_id/não é suficiente. Você tem que passar o id de revisão recente através do url. Para mencionar atributos de qualquer estrutura de dados"?" é usado.

Exemplo

Suponha que haja um documento no banco de dados chamado my_databasecom o id de documento 001. Para excluir este documento, você deve obter o id de rev do documento. Obtenha os dados do documento conforme mostrado abaixo.

$ curl -X GET http://127.0.0.1:5984/my_database/001
{
   " _id " : " 001 ",
   " _rev " : " 2-04d8eac1680d237ca25b68b36b8899d3 " ,
   " age " : " 23 "
}

Agora especifique o id de revisão do documento a ser excluído, id do documento e nome do banco de dados ao qual o documento pertence, conforme mostrado abaixo -

$ curl -X DELETE http://127.0.0.1:5984/my_database/001?rev=1-
3fcc78daac7a90803f0a5e383f4f1e1e

{"ok":true,"id":"001","rev":"2-3a561d56de1ce3305d693bd15630bf96"}

Verificação

Para verificar se o documento foi excluído, tente buscar o documento usando o GETmétodo. Como você está obtendo um documento excluído, será exibida uma mensagem de erro conforme mostrado abaixo -

$ curl -X GET http://127.0.0.1:5984/my_database/001
{"error":"not_found","reason":"deleted"}

Excluindo um Documento usando Futon

Em primeiro lugar, verifique os documentos no banco de dados. A seguir está o instantâneo do banco de dados denominadotutorials_point.

Aqui você pode observar, o banco de dados consiste em três documentos. Para apagar qualquer um dos documentos diga003, faça o seguinte -

  • Clique no documento para obter uma página que mostra o conteúdo do documento selecionado na forma de pares de campo-valor.

  • Esta página também contém quatro opções, a saber Save Document, Add Field, Upload Attachment, Delete Document.

  • Clique em Delete Document opção.

  • Você verá uma caixa de diálogo dizendo "Are you sure you want to delete this document?" Clique em deletar para deletar o documento.

Anexando arquivos usando cURL

Você pode anexar arquivos ao CouchDB como um e-mail. O arquivo contém metadados como nome e inclui seu tipo MIME e o número de bytes que o anexo contém. Para anexar arquivos a um documento, você deve enviar uma solicitação PUT ao servidor. A seguir está a sintaxe para anexar arquivos ao documento -

$ curl -vX PUT http://127.0.0.1:5984/database_name/database_id
/filename?rev=document rev_id --data-binary @filename -H "Content-Type:
type of the content"

A solicitação tem várias opções que são explicadas a seguir.

  • [email protected] - Esta opção diz ao cURL para ler o conteúdo de um arquivo no corpo da solicitação HTTP.

  • -H - Esta opção é usada para mencionar o tipo de conteúdo do arquivo que enviaremos.

Exemplo

Vamos anexar um arquivo chamado boy.jpg, para o documento com id 001, no banco de dados chamado my_databaseenviando uma solicitação PUT ao CouchDB. Antes disso, você deve buscar os dados do documento com id001 para obter sua corrente rev id como mostrado abaixo.

$ curl -X GET http://127.0.0.1:5984/my_database/001
{
   "_id": "001",
   "_rev": "1-967a00dff5e02add41819138abb3284d"
}

Agora usando o _rev valor, envie a solicitação PUT ao servidor CouchDB conforme mostrado abaixo.

$ curl -vX PUT http://127.0.0.1:5984/my_database/001/boy.jpg?rev=1-
967a00dff5e02add41819138abb3284d --data-binary @boy.jpg -H "ContentType:
image/jpg"

Verificação

Para verificar se o anexo foi carregado, busque o conteúdo do documento como mostrado abaixo-

$ curl -X GET http://127.0.0.1:5984/my_database/001
{
   "_id": "001",
   "_rev": "2-4705a219cdcca7c72aac4f623f5c46a8",
   "_attachments": {
      "boy.jpg": {
         "content_type": "image/jpg",
         "revpos": 2,
         "digest": "md5-9Swz8jvmga5mfBIsmCxCtQ==",
         "length": 91408,
         "stub": true
      }
   }
}

Anexando arquivos usando Futon

Carregar anexo

Usando esta opção, você pode carregar um novo anexo, como um arquivo, imagem ou documento, para o banco de dados. Para fazer isso, clique noUpload Attachmentbotão. Uma caixa de diálogo aparecerá onde você pode escolher o arquivo a ser carregado. Selecione o arquivo e clique noUpload botão.

O arquivo carregado será exibido no campo _attachments. Mais tarde, você pode ver o arquivo clicando nele.