NoSQL: Teorema CAP, MongoDB, CouchDB
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).
MongoDB1
(Diese Version wiederherstellen)
Geändert: 30. Juni 2023, 10:55 Nutzer/in: Danielle Modesti →
1. Nome de Banco de Dados
MongoDB
2. Lista de alunos
- Bernardo Maia Coelho - nUSP 12542481
- Carlos Filipe Castro Lemos (Apresentador 1) - nUSP 12542630
- Danielle Modesti (Editor) - nUSP 12543544
- Gustavo Wadas Lopes - nUSP 12745640
- Hélio Nogueira Cardoso - nUSP 10310227
- Henrique Souza Marques - nUSP 11815722
- João Gabriel Sasseron Roberto Amorim - nUSP 12542564
- Laura Ferré Scotelari (Apresentador 2) - nUSP 12543436
- Pedro Guilherme dos Reis Teixeira (Coordenador) - nUSP 12542477
- Pedro Henrique Vilela do Nascimento - nUSP 12803492
- Orientado a Documentos: o MongoDB organiza e armazena os dados em um formato semelhante ao JSON, chamado BSON (Binary JSON). Essa abordagem orientada a documentos permite uma estrutura flexível, fornecendo adaptabilidade e facilidade de evolução em comparação com os formatos rígidos das tabelas SQL;
- Esquema de dados flexível: o MongoDB suporta esquemas de dados dinâmicos, permitindo que documentos em uma coleção possuam diferentes estruturas de dados. Isso oferece maior flexibilidade para armazenar, recuperar e manipular os dados, facilitando a adaptação e atualização dos requisitos do banco de dados durante sua produção ou manutenção;
- Consultas avançadas: o MongoDB oferece diversas técnicas de indexação para consultas avançadas. É possível realizar indexação por hash, por texto e geoespacial, proporcionando múltiplas opções de consulta. Essas técnicas incluem consultas geoespaciais, nas quais os dados são buscados com base em sua distribuição geográfica, e consultas ad-hoc, que utilizam uma linguagem flexível adaptada ao esquema de cada documento, permitindo o uso de operadores lógicos, agregação e outras ferramentas para uma maior adaptabilidade;
- Escalabilidade (sharding): o MongoDB oferece escalabilidade horizontal, permitindo lidar com
grandes volumes de dados distribuindo-os em vários servidores. Esse
recurso é alcançado por meio do particionamento automático dos dados em
shards, que são responsáveis por armazenar e processar uma parte dos
dados. Com isso, o MongoDB pode acomodar conjuntos de dados muito
grandes de maneira eficiente, distribuindo a carga de trabalho entre
vários servidores e permitindo adicionar mais servidores conforme
necessário para aumentar a capacidade de armazenamento e processamento;
- Flexibilidade de armazenamento: o MongoDB é capaz de armazenar documentos de outros formatos, como PDFs e imagens, usando o BSON. Essa capacidade permite inserir os bytes desses arquivos em campos
BinData dos documentos MongoDB. No entanto, é recomendado armazenar
apenas os metadados dos documentos no MongoDB, enquanto os arquivos
binários em si são melhor armazenados em sistemas de arquivos ou
serviços dedicados.
O MongoDB pode gerenciar as referências e informações sobre esses documentos, proporcionando maior flexibilidade no armazenamento de diferentes tipos de dados; - Transações multi-documento: o MongoDB oferece suporte a transações multi-documento, permitindo a
execução de várias operações de leitura e gravação como uma única ação
atômica. Isso garante a consistência e a integridade dos dados durante a
execução de operações complexas. A capacidade de realizar transações
multi-documento é especialmente útil em situações em que é importante
garantir que todas as alterações ocorram corretamente ou nenhuma delas
seja aplicada.
Essas funcionalidades e características do MongoDB fornecem uma base sólida para a construção e gestão de bancos de dados eficientes, adaptáveis e capazes de lidar com cargas de trabalho intensivas, justificando sua relevância e utilidade na área de gerenciamento de dados.
Concluindo, o serviço funciona bem. Porém, se parte do sistema sair do ar (um ou mais nós), o restante dele restringe o acesso a dados (preservando a consistência).
- Flexibilidade: o MongoDB utiliza esquemas como base de armazenamento de dados, o que possibilita fácil modelagem e manipulação de qualquer estrutura de dados. Além disso, ele emprega o formato de BSON (inspirado no JSON), permitindo a criação de uma coleção com diferentes conjuntos de campos;
- Compatibilidade: o MongoDB armazena e representa dados na forma de documentos; isso possibilita o acesso de qualquer linguagem. Entretanto, é necessária uma conexão entre a aplicação e o banco de dados MongoDB;
- Escalabilidade: o banco em questão é altamente escalável, permitindo a adição de novos servidores e a distribuição de seus dados em vários nós. Nesse sentido, é possível dimensionar a aplicação sem precisar se preocupar com o desempenho;
- Alto desempenho: graças ao modelo de documentos do MongoDB, as informações são incorporadas num único documento, não sendo necessária as operações de junção, JOIN, dos bancos de dados relacionais. Isto possibilita que as consultas sejam muito mais rápidas e retornem todas as informações necessárias em uma única chamada;
- Suporte
a transações: o MongoDB suporta transações ACID (atomicidade, consistência,
isolamento e durabilidade). As garantias fornecidas pelo MongoDB
garantem o isolamento completo enquanto um documento é atualizado. Deste
modo, quando qualquer erro ocorre, a operação é revertida e o documento
permanece inalterado (característica de atomicidade de transações para evitar inconsistências).
- Gestão inexperiente ou mal feita pode levar a falhas nas vantagens do sistema: como ele promove mais flexibilidade de soluções, documentos podem acabar tendo estruturas completamente diferentes;
- Limite de tamanho de dados: limite de memória por unidade de 16MB, causando problemas ao lidar com documentos de tamanho maior. Assim, é preciso particionar documentos maiores, algo que facilmente leva a problemas;
- Dificultadores do uso Open Source: muitas das ferramentas associadas recomendadas estão ligadas a plataformas comerciais, dificultando o uso Open Source;
- Rotinas de restauração e backup não são triviais para Shared Clusters e ReplicaSets;
- Intensidade de Memória: o MongoDB pode ser utilizar grande quantidade de memória conforme o conjunto de dados cresce;
- Ausência de joins: dificulta o trabalho com relações de dados complexas; o left outer join é feito por meio de uma operação muito custosa, tornando difícil sua frequente utilização.
O MongoDB, por ser um sistema de armazenamento NoSQL, tem como objetivo suprir as falhas de sistemas SQL para grandes quantidades de dados (Big Data). Por isso, os nichos de aplicações desse banco estão relacionados com grandes volumes de dados, com necessidade de alta performance e ampla conectividade, o que nem sempre é garantido simultaneamente. Sendo assim, o MongoDB clássico optou pelo particionamento de dados e consistência. Por isso, podemos citar como exemplo os seguintes nichos:
Aplicações WEB e mobile: por ser baseado em documentos (JSON) o MongoDB é ideal para aplicações WEB e mobile, provendo fácil integração com frameworks WEB como o Node.js, permitindo aos desenvolvedores a construção de aplicações em tempo real robustas.
Content Management Systems (CMS): MongoDB é amplamente utilizado para lidar com grandes volumes de dados não estruturados, sendo excelente para aplicações pesadas. Dessa maneira, plataformas CMS, como blogs, portais de notícia e e-commerces utilizam MongoDB para gerenciamento de seus conteúdos.
Internet das Coisas (IoT): o MongoDB é ideal para lidar com dados de maneira rápida e flexível, sendo uma solução ideal para aplicações IoT.
Big Data: a integração do MongoDB com plataformas de análise, como Apache Spark, permite que haja análise em tempo real de grandes datasets. Assim, ele suporta processamento distribuído de dados.
Redes Sociais: MongoDB é amplamente utilizado em redes sociais e plataformas de recomendação para lidar com conteúdos gerados por usuários em tempo real. Isto pois seu sistema de esquemas flexíveis permite que os desenvolvedores se adaptem às mudanças nos requisitos do usuário e escalem a plataforma à medida que a base de usuários cresce.
Exemplos de empresas que utilizam o MongoDB: Adobe, E-bay, Coinbase, The Weather Channel, Cisco, Bosch e Forbes.