Carregando...
Banco de DadosCouchDB

CouchDB, um banco de dados NoSQL, serverless e com sincronização offline

O CouchDB é um banco de dados especial, com funcionalidades que nenhum outro banco de dados oferece nativamente. O seu diferencial é permitir sincronização master master de forma fácil (sincronização offline e entre diferentes clusters de banco de dados), trabalhar com dados no formato JSON, e poder ser serverless (ou seja, permitir criar uma aplicação sem back-end, apenas CouchDB e front-end!).

Um tutorial introdutório muito bom é o A Pokemon Crash Course on CouchDB, nele aprendemos como fazer coisas básicas e importantes no CouchDB.

Também há um tutorial escrito por um dos criadores do CouchDB. Esse tutorial é mais completo contém trechos do livro mais completo de CouchDB, mas não contém tudo que tem no livro (isca pra comprar o livro). O livro é certamente a introdução mais completa que você pode ter.

Outra alternativa é usar a documentação do CouchDB. A documentação com certeza é o lugar mais completo pra se ter informações, só que não necessariamente as coisas estarão do jeito mais didático.

Instalando o CouchDB

Instalando via Docker

docker run -d --hostname couchdb --name couchdb --restart unless-stopped -p 5984:5984 -p 4369:4369 -p 5986:5986 couchdb:2.3.1

Pra que servem essas portas?

5984 é a porta padrão para comunicação com o CouchDB. É através dela que você poderá fazer consultas no banco de dados e acessar o Futon (painel de administração do CouchDB).

4369 é a porta que um cluster CouchDB usa para se comunicar com outros clusters. Você só precisará desta porta se for usar o CouchDB em modo cluster.

5986 é a porta para gerenciamento do banco de dados, usada apenas pelo administrador do banco de dados. Você só precisará dela se quiser fazer alguma tarefa avançada de gerenciamento do banco de dados.

Instalando via APT

Visualizando Dados Salvos

Por GET

O GET permite visualizar um documento apenas.

  • Se você tem o id do documento, pode informá-lo ao CouchDB e obter os dados e o id da última versão salva.
  • Se você tem o id do documento e o id da versão, pode obter os dados referentes a ele.

Por Views

As Views são formas de fazer consultas customizadas no CouchDB. Ao criar uma View, índices são criados, o que otimiza seu acesso.

Como arquitetar suas Views? Há alguma receita que ajude?

https://www.lullabot.com/articles/a-recipe-for-creating-couchdb-views

Como fazer um filtro por data?

https://dzone.com/articles/multiple-search-keys-in-couchdb

Outro exemplo de criação de Views.

https://medium.com/ibm-watson-data-lab/creating-partial-cloudant-indexes-1ebf169c8e15

Pelo Mango

O Mango é uma linguagem de query semelhante à usada no MongoDB. Ela dá facilidade para acessar os dados. Tomar cuidado com o Mango pois ainda não é uma função madura e otimizada o suficiente no CouchDB.

Usando o id dos documentos de forma eficiente

Você pode fazer relações de 1 para n e n para n no CouchDB apenas usando os IDs dos documentos de forma inteligente e padronizada:

https://github.com/jo/couchdb-best-practices#embrace-the-document-id

Usando o CouchDB de forma Serverless e Segurança

O CouchDB permite criarmos aplicações sem precisarmos de um backend. Isso significa que podemos usar JavaScript no browser para acessar diretamente o banco de dados. Isso é muito bom e traz uma rapidez enorme no desenvolvimento, mas… O CouchDB precisa ser configurado pra isso, senão usuários diferentes do seu software poderão acessar dados das outras pessoas.

Quais são os tipos de usuários no CouchDB?

O CouchDB tem 2 tipos de usuários a nível de servidor:
(documentação oficial)

  • Usuário tipo Administrador do Servidor ou Super Usuário
  • Usuário tipo Comum

O usuário tipo Administrador do Servidor pode:

  • Criar bancos de dados
  • Apagar bancos de dados
  • Alterar o documento _security de um banco de dados
  • Criar/Apagar/Deletar um documento _design (design document)
  • Ativar compactação de um banco de dados
  • Ler a lista de tarefas ativas
  • Reiniciar o servidor
  • Ler/Alterar configuração do servidor

Um usuário Comum pode:

[Em construção…]

O CouchDB tem 2 tipos de usuários a nível de banco de dados:

Membros – podem ler, criar e modificar qualquer documento (exceto design documents)
Administradores – podem ler, criar e modificar todos os tipos de documentos, alterar permissões e configurações do banco de dados.

Ao criar um banco de dados novo você precisa criar um documento _security. Isso impedirá que usuários não autenticados acessem o banco. A documentação oficial do documento _security é essa.

Como dar permissões de leitura apenas?

Há diferentes formas de se conseguir isso, apesar de todas elas seguem um princípio parecido, usando os documentos _security e _design.

Métodos de autenticação do pessoal do PouchDB

https://github.com/pouchdb-community/pouchdb-authentication/blob/master/docs/recipes.md

Método do Eiri

https://medium.com/@eiri/couchdb-authorization-in-a-database-58c8ee633c96

https://medium.com/@eiri/couchdb-authorization-in-nutshell-5ae697fe9a

Método do James Adam

https://jamesadam.me/2014/11/09/couchdb-authorization/

Método do manage_couchdb

Documentação do método no GitHub
https://github.com/iriscouch/manage_couchdb
Exemplo de validation function
https://github.com/iriscouch/manage_couchdb/blob/master/js/validate_doc_update.js

A base dos métodos: Validation Function

CouchDB Guide
http://guide.couchdb.org/draft/validation.html
CouchDB Documentation
https://docs.couchdb.org/en/stable/ddocs/ddocs.html#validate-document-update-functions

https://stackoverflow.com/questions/10713437/couchdb-wide-read-only-access-rights

http://guide.couchdb.org/draft/security.html

Referências em Serverless CouchDB

https://www.joshmorony.com/creating-a-multiple-user-app-with-pouchdb-couchdb/

Replicação

Filtered Replication

https://thinkinginsoftware.blogspot.com/2011/10/couchdb-filtered-replication.html

Como o CouchDB funciona?

Esse artigo de blog explica muito bem várias características do CouchDB, inclusive sobre performance e fazendo analogias do CouchDB com o SQL.

A analogia mais interessante foi:
databases (bancos de dados) no CouchDB são como tabelas no SQL
views (visualizações) no CouchDB são como índices num banco de dados SQL.

O que todo desenvolvedor precisa saber sobre CouchDB
https://www.dimagi.com/blog/what-every-developer-should-know-about-couchdb/

https://forums.couchbase.com/t/filtering-data-based-on-datetime/366

Tutorial CouchDB + PouchDB

Esse tutorial mostra como é feita a conexão do CouchDB com o PouchDB.

https://dzone.com/articles/beginners-guide-to-pouchdb

Ao usar o PouchDB você usará um banco de dados no browser para armazenar os dados. Por padrão, o PouchDB usa o IndexedDB, é o mais atual e performático, mas também é possível usar o WebSQL, o SQLite ou o NodeWebSQL. Todas as opções de bancos locais estão aqui.

O IndexedDB têm uma limitação de armazenar até 40mb de dados. Acima disso o usuário precisará dar permissão por meio de um popup para que mais espaço seja usado.

Criando uma aplicação Angular com PouchDB

# Instalando o Angular Command Line Interface
npm install -g @angular/cli
# Criando um app novo chamado angular-pouchdb
ng new angular-pouchdb
cd angular-pouchdb
# Instalando pouchdb com suporte ao typescript
npm install pouchdb @types/pouchdb
# Rodando seu app localmente
ng serve

Testando o PouchDB dentro de um componente

  constructor(){
        let db = new PouchDB('http://admin:admin@localhost:5984/hello');
      db.info().then(function (info) {
        console.log(info);
      });
  }

Referências

Drivers para CouchDB

Python CouchDB e Cloudant (oficial)

https://github.com/cloudant/python-cloudant/blob/master/README.md

Artigos

https://www.javacodegeeks.com/2013/08/couchdb-relax.html

Configurando CouchDB com vários clusters

https://www.scaleway.com/en/docs/installation-configuration-couchdb-cluster-on-ubuntu/

CouchDB para IoT

http://ashishware.com/CouchDbIot.shtml

https://bsmulders.com/2017/06/serverless-iot/

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *