Couchbase Mobile – O que é ? Por quê?

This post is also available in: Inglês

Digamos que você queira desenvolver um app, ou melhorar um existente. Pra isso será necessário guardar informações; Idealmente, o layer de armazenamento não deveria dar erros ou consumir muito tempo de desenvolvimento (pensando em Core Data aqui..). Possivelmente parte do aplicativo deve funcionar mesmo quando não há conectividade com a internet..

Então você analisa diversas opções: CoreData, ou talvez uma solução mais multi-plataforma baseada em C, Sqlite, Sqlite com algum ORM em cima ? BerkleyDB, LevelDB, etc?

Ou quem sabe, utilizar algum SaaS como por exemplo o Parse?

Testei o Parse e aqui está minha conclusão: Ao integrar Parse em minha aplicação, apesar do processo ser relativamente intuitivo, ainda há uma curva de aprendizagem (que leva tempo lendo toda documentação das API’s). No fim, meu projeto passou a ter muito código dependente nessas  bibliotecas. Além disso, quando fui pesquisar como ter algo tão simples como ter o próprio domínio (para por exemplo e-mails referentes a registro e login de usuário), os preços eram simplesmente mais altos que o desejado.

Se você tem essa mesma opinião e não está completamente satisfeito com os diversos SaaS, nem tudo está perdido: há ainda uma solução que se destaca quando se trata de resolver dois problemas complexos que aparecem durante o desenvolvimento de um app:

  1. Persistência de Dados; e
  2. Sincronização de dados entre computadores

1º – Persistência de dados é tão antiga como a própria computação, e sempre tivemos que lidar e gastar bastante energia nela durante desenvolvimento, então a principal pergunta que vem:

Por quê trabalhar com Couchbase Lite é melhor que digamos, Core Data, ou até mesmo sqlite?

Quando alinhamos o conceito de armazenamento sem estrutura pré-definida (schema-less, como no NoSQL) com programação orientada a objetos, uma coisa muito interessante acontece: passamos a nos preocupar menos com o “como” as coisas serão guardadas, e a focar mais no problema em si a ser resolvido. Apesar de não ser óbvio à primeira vista, isto aumenta drasticamente a produtividade pois é possível quase esquecer completamente sobre armazenamento quando se está lidando com dados locais.

Couchbase Lite é um banco de dados baseado em JSON para dispositivos móveis: isto significa que, o sistema em si não força o desenvolvedor a definir uma estrutura específica para os dados como no caso dos banco de dados relacionais com tabelas e colunas definidas.

Por que isto importa?

Não ter uma estrutura pré-definida já resolve muitos problemas relacionados a migração de dados que acontecem quando é necessário manter tudo funcionando mesmo quando há alteração nos “campos” dos dados. Mas este é apenas um aspecto onde o armazenamento livre de esquemas reduz problemas durante desenvolvimento.

O maior ganho aqui é de ser possível escrever software como usual, porém simplesmente definir quais propriedades de um certo objeto devem ser armazenados. É de certa forma comparável à o que uma API ORM (Object-Relation Mapping) faz para banco de dados relacionais, porém sem as dificuldades causadas pela impedância de desencontro nas estruturas de dados (object-relational impedance mismatch). Isto é, sem os problemas causados por ter que antecipadamente mapear objetos à uma tabela definida.

Se você alguma vez já passou nervoso com Alter Tables, Joins e migrações de esquemas, deve ter uma idéia de quanto essas atividades são chatas e suscetíveis a erros.

Ter um sistema de armazenamento como um ORM, porém sem as desvantagens do mesmo, já é razão forte suficiente para largar de ferramentas antigas e passar a utilizar o Couchbase Lite. Vamos agora ver como isto é combinado com o segundo problema muito comum:

2- Sincronização de dados entre computadores

Então você fez uma linda API baseada nos modelos REST(Representational State Transfer), começou a utilizar o app, bang! erro de conexão. Por qualquer razão que seja (você está dentro de um túnel, ou numa ilha distante no fim do mundo), de repente aparece um problema muito bem conhecido: você simplesmente não tem a informação necessária para seu app funcionar. Enquanto até agora não importava qual banco de dados estava atrás da API, um monstro mostra suas caras – e tudo virou inútil..

Dependendo de quão importante é para seu app funcionar off-line, você começa a desenhar uma solução pra sincronizar dados locais para o servidor e vice-versa. Até que então: ou você desiste porque está ficando muito complicado, ou você gasta as próximas dez mil horas em algo que aparentemente seu cliente nem notará que teve de ser feito.

Eu pessoalmente me deparei com este problema alguns anos atrás enquanto programava um sistema em PHP de CRM e controle de produção para a produção de café de meu pai em Minas. Enquanto checava os procedimentos percebi que muitas vezes meu pai estaria “no campo” vendendo café, e não havia formas de se ter conexão com a internet, então não era possível armazenar vendas ou cadastrar novos clientes no sistema.

Naquele tempo tinha uns 17 anos, e pude notar que se não deixasse de lado a parte de sincronização, não conseguiria terminar o sistema antes de minhas férias escolares acabarem. Mas o problema nunca saiu da minha cabeça. Avançamos uns 10 anos pro futuro, e agora temos um framework que pode fazer isto pra nós. Além do mais: todo o stack é open source 🙂

Nenhum outro sistema combina esses dois elementos tão bem: o de armazenamento simples de dados e sincronização.

Apesar de que o Couchbase Lite (o banco de dados NoSQL local e mobile) pode ser usado isoladamente, quando combinado com seus respectivos componentes de servidor, o processo de sincronização se torna o método padrão pra troca de dados deixando o app menos vulnerável a falhas de rede como no modelo request-response que estamos acostumados.

E não se deixe enganar a pensar que é uma ferramenta nova pra “start-ups” ou para projetos protótipos: O Couchbase Sync Gateway (serviço de sincronização que atua como ponte entre o cliente (Couchbase Lite) e o servidor (Couchbase Server), é escrito em Go e desfruta das vantagens de programação concorrente desta linguagem, servindo muitos usuários simultaneamente e suportando um número elevado de conexões por nó. Já o Couchbase Server em si também é muito bem preparado para big data e já é utilizado por empresas grandes como LinkedIn.

Então antes de pensar: “O banco de dados não importa, vai estar encapsulado pela interface REST de qualquer forma..”, lembre-se do que acontece quando a conexão é perdida.

Desvantagens: 

Desculpe companheiros do Couchbase, mas não pude terminar este post sem mencionar isto. Então, como nada é perfeito, quais são os aspectos negativos a serem considerados antes de utilizar Couchbase?

A curva de aprendizado é uma das coisas que podem ser discutidas. Porém uma vez que é aprendido o básico, com o tempo fica mais fácil e acaba-se economizando mais tempo com novos projetos além de reduzir tempo de manutenção.

Segundo, enquanto salvar informações livremente é extremamente fácil, consultar as mesmas pode ser mais complicado no começo do que digamos, quando se está começando com SQL.  Mas este quadro também está mudando rapidamente. Por exemplo, uma linguagem simples parecida com SQL foi introduzida no Couchbase Server (chamada N1QL), que faz a consulta no banco de dados ser tão simples como em banco de dados SQL (eu vi a apresentação deles no Couchbase Live Europe 2015 em London e realmente é simples). Similarmente, Couchbase Lite deverá continuamente trazer melhoras no sistema de query para deixa-la mais intuitiva (atualmente por exemplo, há implementações baseadas no NSPredicate para iOS).

Conclusão

A minha opinião é que Couchbase Mobile se tornará uma ferramenta padrão na caixa de ferramenta de muitos desenvolvedores. Se você quer estar à frente e aprender mais sobre o assunto, vá em frente abra o XCode e siga o próximo tutorial: “Iniciando com Couchbase Lite no iOS“.

Se tiver qualquer outra dúvida ou comentários, por favor deixe uma mensagem nos contanto sobre sua experiência!

Até a próxima!