NoSQL: Teorema CAP, MongoDB, CouchDB
Students will work in groups to create a Wiki comparing major NoSQL databases. If you did not work before with Moodle Wikis, see this small video (3:36 min.) on the Wiki activity page.
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).
Retour
MongoDB1
Affichage de la version 11 de la page
(Restaurer cette version)
(Restaurer cette version)
Modifié: 30 juin 2023, 10:12 Utilisateur: 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
3. Funcionalidades e características principais do Banco de Dados
- Orientado a Documentos: o MongoDB é um banco de dados orientado a documentos, o que significa que ele organiza e armazena os dados em um formato parecido com o JSON, chamado BSON (Binary JSON). A estrutura flexível de cada documento fornece uma maior adaptabilidade e facilidade de evolução do que os formatos rígidos das tabelas SQL;
- Esquema de dados flexível: o MongoDB suporta esquemas de dados dinâmicos, ou seja, os documentos de uma mesma coleção não precisam seguir o mesmo esquema de dados. Isso permite uma maior flexibilidade para armazenar, recuperar e tratar os dados, além de facilitar a adaptação e a atualização dos requisitos do banco de dados durante sua produção ou manutenção;
- Consultas avançadas: o MongoDB pode utilizar múltiplas técnicas de indexação por Hashing, por Texto ou Geoespacial, oferecendo múltiplas opções de consulta. Em especial, consultas geoespaciais, nas quais os dados são buscados segundo sua distribuição geográfica, e consultas ad-hoc, nas quais as buscas são produzidas em uma linguagem flexível que se adapta ao esquema de cada documento e podem utilizar operadores lógicos, agregação e outras ferramentas para maior adaptabilidade;
- Escalabilidade (sharding): a escalabilidade é horizontal no MongoDB, significando que ele pode lidar com grandes quantidades de dados, distribuindo-os em vários servidores. Em vez de depender de um único servidor para armazenar todos os dados, o MongoDB pode dividir os dados automaticamente entre vários servidores, chamados de shards. Cada shard é responsável por armazenar e processar uma parte dos dados.
Assim, o MongoDB pode lidar com conjuntos de dados muito grandes de maneira eficiente, distribuindo a carga de trabalho entre vários servidores. Essa capacidade de escalabilidade horizontal é especialmente útil quando o volume de dados aumenta com o tempo, pois pode-se simplesmente adicionar mais servidores ao cluster para aumentar a capacidade de armazenamento e o poder de processamento. Em resumo, a escalabilidade horizontal do MongoDB permite que ele cresça e acomode grandes quantidades de dados, mantendo um alto desempenho e garantindo que o sistema possa lidar com cargas de trabalho intensivas; - Flexibilidade de armazenamento: o MongoDB é capaz de armazenar documentos de outros formatos, como PDFs e imagens, usando o BSON. Com mais detalhes, BSON é um formato de serialização binária usado para armazenar documentos e realizar chamadas de procedimento remoto no MongoDB. Esse recurso permite que os bytes desses arquivos sejam inseridos em campos BinData dos documentos MongoDB. Ao recuperar os documentos, é possível acessar esses campos e processar os bytes conforme necessário. 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, utilizando o MongoDB para gerenciar as referências e informações sobre esses documentos;
- Transações multi-documento: a capacidade de transações multi-documento no MongoDB permite que se executem várias operações de leitura e gravação como uma única ação atômica, garantindo a consistência e a integridade dos dados durante a execução dessas operações complexas. Isso é especialmente útil em situações em que é importante garantir que todas as alterações ocorram corretamente ou nenhuma delas seja aplicada.
4. O banco escolhido implementa CA, CP ou AP, em termos de teorema CAP? Por quê?
O MongoDB (v4.4 ou qualquer versão anterior) implementa o CP. Ele é focado em oferecer consistência e tolerância ao particionamento; é assíncrono por natureza e, por seu caráter flexível, não há a necessidade de sincronizar esquemas (schema). Essas características são úteis porque permitem que a base de dados seja bastante escalável. Dessa forma, as partições são facilmente distribuídas em nós (é um sistema distribuído por padrão), o que aumenta o paralelismo, divide a carga útil e pode reduzir a latência. Finalmente, um modelo simples (bson) reduz a quantidade de configurações necessárias para que a base seja expandida, ao passo de que a garantia de consistência faz com que os desenvolvedores não precisem se preocupar com a consistência entre nós por padrão.
Complementarmente: há várias configurações que
usuários experientes podem utilizar para reduzir a consistência e
aumentar a performance ou a disponibilidade. Isso pode aumentar
drasticamente o risco de perda de dados ou de inconsistências entre nós e
estruturas de dados; todavia, isso é totalmente opcional. Neste cenário, se o
administrador da base de dados consegue afirmar que, nas condições de
operação, esse risco é controlado, ele pode decidir o nível de
consistência e disponibilidade que ele precisa e quais riscos são
justificados. Observa-se que não há, por padrão, nas versões clássicas do MongoDB (4.4 ou anteriores, relembramos), garantia de que a queda de nós não leve o banco a sair do ar e de que todo cliente sempre pode ler e escrever todo dado. Isto, em um sistema bem planejado, não deveria ser um grande problema,
pois não deveria, em funcionamento ideal, afetar bastante o tempo
médio que a base de dados gasta para servir cada cliente.
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).
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).
5. Vantagens do Banco de Dados MongoDB
- 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).
6. Desvantagens do Banco de Dados MongoDB
- 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;
7. Nichos de aplicação
Links úteis