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.

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

É uma das formas mais robustas de acessar os dados. As Views também criam índices, o que deixa seu acesso muito rápido.

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 não é uma função madura o suficiente.

Usando o CouchDB de forma Serverless e Segurança

O CouchDB permite criarmos aplicações sem precisarmos de um backend, isso é muito bom e traz uma rapidez enorme no desenvolvimento. Mas… O CouchDB tem algumas limitações ao atuar como backend e banco de dados ao mesmo tempo, e essas limitações estão relacionadas a segurança.

Que limitações de segurança são essas?

O CouchDB tem 2 tipos de usuários

  • Administrador do Servidor (acesso a todos os bancos de dados do servidor)
  • Administrador do Banco de Dados (acesso a um banco de dados específico)

Tendo isso em mente, você precisará arquitetar seu banco com base nisso. Por padrão não é possível dar permissões para um pedaço do banco de dados, é tudo ou nada.

Como dar permissões de leitura apenas?

Basta utilizar o conceito de validation function. Para quem está acostumado com triggers no SQL, é basicamente uma trigger. Um usuário tem apenas permissão de leitura para o banco. Quando ele tentar criar, editar ou apagar um documento, esta validation function é chamada e a sua ação é ignorada. Eis um exemplo:

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

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

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

Uma alternativa… ACL no CouchDB!

Esforços estão sendo desenvolvidos para criar um ACL a nível de banco de dados, e isso se chama Cover Couch, mas os desenvolvimentos estão em fase beta.

https://github.com/ermouth/covercouch

Referências em Serverless CouchDB

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

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/

Views no CouchDB

Um exemplo completo de Views no CouchDB

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

Filtrando uma View por data no CouchDB

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

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

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

Deixe uma resposta

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