CouchDB

CouchDB

Integrantes do grupo:

  • Karl Cruz Altenhofen, 14585976
  • Laura Neri Thomaz da Silva, 13673221 - Editora
  • Pedro Vitor Suzuki Lau, 13837133
  • Maicon Chaves Marques, 14593530 - Coordenador
  • Arthur Trottman Ramos, 14681052
  • Henrique Drago, 14675441
  • Henrique Yukio Sekido, 14614564
  • Jonathan Sanchez Minaya, 11333691

Link para o docs: Documento

Link para os slides: Slide

Main DB Features

Replicação Bidirecional: Permite sincronização entre múltiplos servidores ou dispositivos, com alta disponibilidade, backup simplificado e recuperação eficiente. As alterações são rastreadas em tempo real, mesmo em arquiteturas distribuídas.

Offline First: Aplicações podem funcionar completamente offline. Os dados são armazenados localmente e sincronizados com o servidor assim que a conexão é reestabelecida, promovendo confiabilidade em ambientes com baixa conectividade.

Armazenamento de Documentos: Utiliza documentos JSON como estrutura nativa. Esses documentos são auto-descritivos e não possuem esquema fixo, permitindo flexibilidade no armazenamento.

Suporte a Binários: Além de JSON, também é possível armazenar arquivos binários, como imagens e PDFs, diretamente nos documentos.

MapReduce para Views: Permite criação de "views" para consultas otimizadas com base no modelo MapReduce, que distribui o processamento em etapas de mapeamento e redução.

Does It Implement CA, CP, or AP? Why?

O CouchDB é classificado como um banco do tipo AP (Alta disponibilidade e tolerância à partição) de acordo com o teorema CAP. Ele sacrifica a consistência imediata para obter performance, resiliência e escalabilidade.

Ele adota o modelo BASE (Basic Availability, Soft-state, Eventual consistency), muito usado em aplicações web que precisam funcionar mesmo com partições de rede ou quedas de conexão.

DB Advantages

  • Funciona Offline: Excelente para ambientes desconectados, com sincronização automática posterior.
  • Modelo Flexível: Aceita documentos JSON com esquemas diferentes, sem necessidade de migração.
  • Alta Tolerância a Falhas: Armazenamento append-only protege dados em caso de queda.
  • REST API: Todas as operações são feitas por requisições HTTP, facilitando integrações.
  • Controle de Conflitos: Cada documento tem um identificador de versão que permite controle robusto em situações de concorrência.
  • Escalabilidade: Suporta replicação entre múltiplos servidores.
  • Open Source: Comunidade ativa e mantido pela Apache Foundation.
  • MapReduce Integrado: Para consultas mais complexas e customizáveis.

DB Disadvantages

  • Consistência Eventual: Não indicado para transações críticas, como bancos e sistemas financeiros.
  • Consultas Limitadas: Modelos de consulta exigem views planejadas com antecedência; falta suporte nativo a joins e agregações.
  • Sem Transações ACID Multidocumento: Não há garantias de atomicidade entre documentos.
  • Uso de Memória Elevado: Indexações e múltiplas versões aumentam consumo de recursos.
  • Desempenho de Escrita: Pode sofrer em cargas de escrita frequente e em larga escala.
  • Curva de Aprendizado Alta: Exige adaptação, especialmente para quem vem do SQL.
  • Resolução Manual de Conflitos: Deve ser implementada pela aplicação.
  • Ecossistema Cloud Limitado: Integrações modernas requerem configurações manuais.
  • Validações Básicas: Ausência de verificação de tipo e schema nativamente.
  • Sem Full-Text Search: Busca textual exige ferramentas externas.

Application Niches

O CouchDB é ideal para aplicações móveis ou distribuídas que operam em condições adversas ou sem conexão contínua. Exemplos:

  • Ambulantes e Vendas de Campo: Cadastro e vendas offline com sincronização posterior.
  • Clínicas Remotas: Agentes de saúde em comunidades isoladas que registram dados localmente.
  • Ambientes Industriais: Plantas ou fábricas com redes isoladas e sensíveis à segurança.
  • Casos de emergência: Atuação em zonas de desastre, guerra ou regiões com baixa infraestrutura.
Organizações como BBC, CERN, IBM Cloudant e a Cruz Vermelha utilizam o CouchDB onde robustez, replicação e disponibilidade são essenciais.