Zurück

MongoDB1

Seitenversion #13 anzeigen
(Diese Version wiederherstellen) 

Geändert: 30. Juni 2023, 10:41   Nutzer/in: Danielle Modesti  → 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

  1. 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;
  2. 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;
  3. 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;
  4. 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;
  5. 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;
  6. 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).

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;
  • 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.

7. Nichos de aplicaçã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:

  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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.


Links úteis