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.