Group Discussion: NoSQL and CAP Theorem
Student Groups
Our goal here is to understand the CAP Theorem and to know the advantages and disadvantages of some NoSQL solutions. There will be four groups. All the wikis will have the following content:
- DB Name
- Student List (with name and USP id)
- Main DB Features
- Does It Implement CA, CP, or AP? Why?
- DB Advantages
- DB Disadvantages
- Application Niches
They will also make a 22 minutes presentation of their work to the class.
Each group has to choose:
- Coordinator: To coordinate the discussions and group activities. He also has to control the time to make sure the group will post its results on time.
- Editor: To write down the group's contents to the wiki.
- Three Presenters: To present the work to the class
A group may divide the work among subgroups, but, in this case, it is recommended that you plan some time to join the work of each subgroup.
Tip: If you use Google Docs or Slides to create your work, you may just link it to the group's wiki page. But remember to make it readable by everyone and copy its text to the wiki (just as a backup).
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.