Voltar

MongoDB1

Visualizando versão #17 da página
(Restaurar esta versão) 

Modificado: 30 junho 2023, 11:30 AM   Usuário: 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
  • 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. Um exemplo aplicável desse uso é em aplicações web;
  • 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. Um exemplo prático de uso é em armazenamento de formulários dinâmicos, com campos variáveis, sem a necessidade de esquemas fixos;
  • 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. Por exemplo, pode-se usar o MongoDB para armazenar dados geoespaciais como coordenadas de GPS, ou para buscar textos completos eficientemente;
  • 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. Um exemplo de utilidade dessa característica do MongoDB é em redes sociais ou sistemas de rastreamento de eventos;
  • 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. Para exemplificar isso, pode-se usar esse banco de dados para armazenar metadados de arquivos de forma eficiente;
  • 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 - por exemplo, em transferências de fundos monetários.
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. Por exemplo, em um sistema de gerenciamento de conteúdo, o MongoDB pode ser utilizado para armazenar diferentes tipos de conteúdo, como artigos, páginas, imagens e vídeos, em uma única coleção, permitindo a flexibilidade na adição de campos específicos para cada tipo de conteúdo.;
  • 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. Por exemplo, uma aplicação web desenvolvida em JavaScript pode facilmente interagir com o MongoDB para armazenar e recuperar dados, pois ambos utilizam a mesma estrutura de documentos;
  • 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. Por exemplo, em um aplicativo de comércio eletrônico, à medida que o número de usuários e transações aumenta, é possível adicionar novos servidores MongoDB e distribuir os dados entre eles para garantir um bom desempenho e capacidade de resposta do sistema;
  • 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. Por exemplo, em um aplicativo de mídia social, ao recuperar os posts de um usuário e seus respectivos comentários, o MongoDB pode retornar todas as informações relevantes em uma única chamada de consulta, evitando múltiplas consultas e operações de junção;
  • 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). Por exemplo, em um sistema bancário online, quando um usuário realiza uma transferência de fundos entre contas, o MongoDB garante que a operação seja atomicamente executada, garantindo que o saldo de ambas as contas seja atualizado corretamente e evitando inconsistências de dados, mesmo em caso de falha ou erro durante o processo de transferência.
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. Por exemplo, se uma empresa utiliza o MongoDB para armazenar informações de clientes, mas não há um padrão definido para a estrutura dos documentos de clientes, cada documento pode ter campos diferentes e isso dificulta a consulta e manipulação dos dados;
  • 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. Por exemplo, se um aplicativo está armazenando vídeos no MongoDB e cada vídeo excede o limite de 16MB, é preciso dividir o vídeo em várias partes menores e armazená-las em documentos separados. Isso aumenta a complexidade e pode resultar em dificuldades na manipulação e recuperação dos dados;
  • Dificultadores do uso Open Source: muitas das ferramentas associadas recomendadas estão ligadas a plataformas comerciais, dificultando o uso Open Source. Por exemplo, algumas ferramentas de administração e monitoramento de banco de dados podem ter versões gratuitas limitadas ou estar disponíveis apenas para plataformas comerciais, o que pode restringir o acesso a recursos úteis para os usuários open source;
  • Rotinas de restauração e backup não são triviais para Shared Clusters e ReplicaSets: o processo de restauração e backup em ambientes de clusters compartilhados (Shared Clusters) e conjuntos de réplicas (ReplicaSets) no MongoDB pode ser mais complexo do que em um ambiente de servidor único. Por exemplo, ao restaurar um backup em um cluster compartilhado, é necessário garantir que a restauração seja aplicada corretamente em todos os membros do cluster, o que requer conhecimentos e cuidados adicionais para evitar falhas e perda de dados;
  • Intensidade de Memória: conforme o conjunto de dados armazenados no MongoDB cresce, ele pode exigir uma grande quantidade de memória para funcionar de forma eficiente. Por exemplo, se um banco de dados MongoDB está sendo usado para armazenar uma grande quantidade de dados, especialmente índices, a memória disponível no servidor precisa ser dimensionada adequadamente para garantir um bom desempenho. Caso contrário, a falta de memória pode levar a um aumento na latência das consultas e diminuição do desempenho geral do banco de dados;
  • Ausência de joins: O MongoDB não oferece suporte nativo a operações de junção (joins) entre coleções de dados, o que dificulta o trabalho com relações de dados complexas. Por exemplo, se há uma necessidade frequente de consultar dados de várias coleções relacionadas entre si, como um join em um banco de dados relacional, no MongoDB seria necessário realizar múltiplas consultas e manipular os resultados programaticamente para obter o mesmo resultado. Isso pode ser mais custoso em termos de desempenho e complexidade de código em comparação com um banco de dados relacional tradicional.

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