Foto cortesia de Wesley Fryer com permissão sob licença CC BY-SA 2.0
tl;dr
Couchbase Mobile é fácil de usar, funciona de forma totalmente autônoma e, ainda assim, oferece dimensionamento de nível empresarial quando necessário. Você deveria experimentá-lo.
No início
Esta será minha segunda postagem oficial aqui no Couchbase. Em breve, escreverei no blog sobre questões mais práticas. Mas, por enquanto, vou me entregar a um discurso de nível um pouco mais elevado.
Eu programo há muito tempo. Nos últimos anos, me interessei muito por dispositivos móveis, mas já trabalhei em muitas outras áreas.
Ainda assim, eu diria que, antes de entrar para o Couchbase, eu tinha um conhecimento médio de bancos de dados. Ou, devo dizer, de bancos de dados relacionais. De alguma forma, atingir a sexta forma normal sempre me pareceu legal, mas nunca precisei me preocupar com isso.
Mesmo assim, para o desenvolvimento, os bancos de dados relacionais (e, portanto, o SQLite no celular) pareciam ser o caminho a seguir.
Neste post, vou falar sobre por que mudei de ideia e por que acho que você também deveria mudar.
Preparando o palco
Há alguns anos, os bancos de dados relacionais já haviam vencido outras tecnologias. A tal ponto que o SQL, que na verdade é o nome de uma linguagem, tornou-se quase sinônimo do termo banco de dados.
O mundo mudou muito com a explosão da Web e dos dispositivos móveis. Isso inclui os tipos de dados e como eles são acessados. Os bancos de dados também tiveram que mudar. Isso deu origem ao universo NoSQL.
Por que o Couchbase Mobile
O Couchbase Mobile (ou CBM) é um pacote completo, incluindo um banco de dados autônomo incorporado. (A parte autônoma é, na verdade, chamada de Couchbase Lite.) A arquitetura central do CBM o coloca diretamente no campo do NoSQL.
Quero me concentrar em dois motivos particularmente convincentes pelos quais acredito que o CBM deve ser sua primeira opção para aplicativos móveis: facilidade de uso e flexibilidade arquitetônica. Falarei mais em termos de uso do CBM desde o início de um projeto. Os mesmos pontos são um forte argumento para mudar para o CBM, mesmo em um aplicativo maduro.
Facilidade de uso
Tanto o iOS quanto o Android dependem do SQLite para seus bancos de dados padrão. O SQLite é um excelente banco de dados relacional de código aberto. Ele só não é tão fácil de usar.
Fui até o portal do desenvolvedor do Android para dar uma olhada nos documentos atuais sobre o uso do SQLite. Aqui está o início do primeiro parágrafo após a introdução:
E aqui está um exemplo de parte do código para criar um banco de dados:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
público classe DictionaryOpenHelper se estende SQLiteOpenHelper { privado estático final int VERSÃO DO BANCO DE DADOS = 2; privado estático final Cordas NOME_DA_TABELA_DO_DICIONÁRIO = "dicionário"; privado estático final Cordas DICTIONARY_TABLE_CREATE = "CREATE TABLE " + NOME_DA_TABELA_DO_DICIONÁRIO + " (" + KEY_WORD + " TEXTO, " + KEY_DEFINITION + " TEXTO);"; DictionaryOpenHelper(Contexto contexto) { super(contexto, NOME DO BANCO DE DADOS, nulo, VERSÃO DO BANCO DE DADOS); } @Substituir público vazio onCreate(Banco de dados SQLite db) { db.execSQL(DICTIONARY_TABLE_CREATE); } } |
Divertido, não é?
Agora, não me entenda mal. O Android é um pacote de tecnologia incrível. O SQLite é o melhor da categoria. Mas os aplicativos precisam armazenar dados. E se estou tentando fazer um projeto decolar, não quero gastar meu tempo pensando no design de esquemas e colocando instruções SQL em strings.
Em contrapartida, isso é aproximadamente o que é necessário para começar a usar o Couchbase Mobile:
1 2 |
gerente = novo Gerente(novo AndroidContext(este), Gerente.DEFAULT_OPTIONS); banco de dados = gerente.getDatabase("crud"); |
E aqui está o código (sem o material padrão) para armazenar alguns dados novos:
1 2 3 4 5 6 7 8 |
Documento documento = banco de dados.createDocument(); Cordas documentId = documento.getId(); Mapa<Cordas, Objeto> perfil = novo HashMap<>(); perfil.colocar("firstName", "Hod"); perfil.colocar("lastName", "Greeley"); documento.putProperties(perfil); |
Essa não é uma comparação totalmente justa. O exemplo do Google tem alguns dos bits extras necessários para fazer as coisas corretamente. Por outro lado, a amostra do Couchbase já tem dados sendo enviados para o banco de dados!
A verdadeira questão tem a ver com a simplicidade de tudo isso. É muito mais fácil mapear estruturas naturais no código (objetos Java, neste caso) para as construções necessárias para o banco de dados. A facilidade de mapeamento permite que o CBM cuide de muitos outros detalhes para você também. O trecho de código acima não é muito mais do que seria necessário para serializar um objeto Java em um arquivo!
O Couchbase é um banco de dados de documentos, o que significa que você armazena um objeto completo e semiestruturado como o bloco de dados fundamental (em vez de uma linha em uma tabela). Mais precisamente, o Couchbase armazena objetos JSON. O JSON é leve e flexível. Ele lida com matrizes. Os objetos podem ser estendidos sem quebrar nada. É simplesmente mais agradável.
Compare isso com a tentativa de colar algumas tabelas inflexíveis para mapear um objeto de qualquer complexidade. Não importa se você mesmo faz isso no SQL ou se recorre a uma biblioteca para ajudar, não é uma visão bonita.
Flexibilidade
O Couchbase Mobile oferece flexibilidade de duas maneiras importantes: estrutura e escalabilidade.
Estrutura
O CBM é "sem esquema". Isso fica evidente na facilidade de uso. No exemplo de código, você pode ver que a estrutura do documento é criada implicitamente. Não há necessidade de definir tabelas ou nomear colunas.
Além disso, a ausência de esquema significa que você pode alterar facilmente suas estruturas de dados sem as dores de cabeça da migração.
Para ilustrar esses pontos, imagine começar com um perfil de usuário que contenha um número de telefone para cada pessoa. As duas figuras mostram como isso pode se parecer com uma tabela SQLite e um documento JSON.



Pense por um minuto no gerenciamento dessa transição. Não vou nem tentar mostrar como o código pode ficar.
Por outro lado, com o JSON, você tem este diagrama:

Basta substituir a entrada do número de telefone por uma matriz. É até fácil lidar com a compatibilidade com versões anteriores. Você poderia simplesmente verificar em tempo de execução se a entrada do telefone era um valor único ou uma matriz.
Escalabilidade
Até agora, tudo o que falei funciona de forma totalmente autônoma em um dispositivo. Isso é poderoso e atende a muitos usos. Alguns bancos de dados móveis param por aí. Eles funcionam apenas de forma autônoma.
Se você estiver usando um banco de dados, é provável que algum back-end seja, no mínimo, uma boa opção. Ou pode ser essencial para seu sucesso. Basta fornecer backups para facilitar a troca de dispositivos, se não for o caso.
Quando você começa a precisar de um backend, precisa se preocupar com vários novos desafios. Isso me leva ao meu último ponto sobre o Couchbase Mobile. O CBM tem muitos recursos para lidar com o uso fora do dispositivo.
Voltando ao que considero mais atraente, a preocupação que se destaca aqui é a escalabilidade. Qual será o custo para lidar com 10.000 usuários, ou talvez até 100.000 ou um milhão? Sua arquitetura pode suportar operações fora do dispositivo sem muito retrabalho?
O CBM inclui algo chamado Sync Gateway. O Sync Gateway (SG) tem alguns usos interessantes apenas em combinação com o Couchbase Lite. Ele realmente se destaca como um ponto de extremidade de replicação para Servidor Couchbase. O Couchbase Server é um pacote NoSQL pesado e pronto para empresas, já usado em grandes instalações. Você pode ler mais sobre o Sync Gateway aqui. A imagem a seguir dá uma ideia de como os componentes se encaixam.

Resumindo, a CBM não o coloca em um canto. Começar é fácil, e você pode fazer isso sabendo que a CBM tem a flexibilidade necessária para atender às suas necessidades à medida que você progride.
Concluindo
O CBM é uma solução NoSQL moderna, baseada em documentos e altamente escalável para dispositivos móveis.
-
O CBM funciona muito bem de forma isolada, no dispositivo.
-
O Couchbase oferece um back-end completo, se você quiser.
-
O formato de dados é facilmente mapeado para representações nativas.
Juntos, eles oferecem uma solução que é mais fácil de usar em praticamente qualquer projeto. Use-o como um armazenamento conveniente para as preferências do usuário. Use-o para fornecer um pacote estático de dados junto com seu aplicativo. Ou use-o quando quiser filmar para milhões de usuários ativos. Aproveite a simplicidade e saiba que você tem a flexibilidade para se adaptar e escalar conforme necessário.
Pós-escrito
Há muitos detalhes por trás dos conceitos que discuti. Incluí algumas referências para aprofundamento, embora tenha me baseado em muitas outras para esta publicação.
Confira mais recursos em nosso portal do desenvolvedor e nos siga no Twitter @CouchbaseDev. Você pode postar perguntas em nosso fóruns. E participamos ativamente de Estouro de pilha.
Você pode me seguir pessoalmente em @HodGreeley
Estou ansioso para conversar com você.