Mongo1
MongoDB - Slides
Ayrton da Costa Ganem Filho - 14560190 - Apresentação
João Pedro Alves Notari Godoy - 14582076 - Apresentação
Pedro Louro Fernandes - 13672446 - Apresentação
Bruno Basckeira Chinaglia 14562233 - Editor
Enzo Tonon Morente - 14568476 - Coordenador
Arthur Domingues Rios - 13731751
Letícia Barbosa Neves - 14588569
Miguel Rodrigues Tomazini 14599300
Pedro Bizon Dania - 11812667
Pedro Henrique Ferreira Silva - 14677526
Main DB Features
- Document-Oriented Data Model: MongoDB é um banco de dados de documentos NoSQL, utilizando coleções e documentos em vez de tabelas e linhas. Os documentos são estruturas JSON-like (armazenadas como BSON, Binary JSON), compostas por pares campo-valor. Possui um design sem esquema, permitindo que documentos na mesma coleção tenham campos diferentes, o que oferece flexibilidade e a capacidade de adicionar ou remover campos sem migrações de esquema custosas. O BSON suporta documentos aninhados e arrays, possibilitando estruturas de dados hierárquicas.
- Query Language and Indexing: Oferece a MongoDB Query Language (MQL) para consultas ad-hoc ricas, incluindo filtragem por campos, ranges, regex, pesquisa de texto e consultas geoespaciais. Suporta índices em qualquer campo para otimizar o desempenho de consultas e ordenação. Possui também um framework de agregação que permite pipelines de processamento de dados (similar a GROUP BY do SQL) para análises dentro do banco de dados.
- Architecture for Scalability and High Availability: A arquitetura do MongoDB é construída para escalar horizontalmente e tolerar falhas. Um cluster MongoDB é baseado em um modelo de replicação de mestre único (primário) e múltiplos secundários. Um conjunto de nós forma um replica set, onde um nó é eleito primário e recebe todas as escritas. Se o primário falha, os secundários automaticamente elegem um novo primário, proporcionando failover automático e tolerância a falhas. Para escalabilidade horizontal, o MongoDB oferece sharding, onde os dados de uma coleção podem ser particionados em múltiplos shards, cada um sendo tipicamente um replica set. Um serviço de roteamento (mongos) distribui automaticamente inserções e consultas com base em uma chave de shard escolhida pelo usuário.
- Data Consistency and Transactions: Historicamente, MongoDB seguia a filosofia BASE, garantindo atomicidade apenas em nível de documento único. No entanto, a partir do MongoDB 4.0, suporta transações ACID multi-documento, mesmo entre coleções ou shards (a partir do v4.2+).
- Ecosystem and Tools: É conhecido por ser amigável ao desenvolvedor, com drivers oficiais para diversas linguagens de programação e uma API de consulta intuitiva. Ferramentas como MongoDB Compass (GUI) e conectores BI facilitam a integração. MongoDB Atlas é um serviço de nuvem totalmente gerenciado que simplifica a implantação de clusters sharded e replicados.
Does It Implement CA, CP, or AP? Why?
MongoDB é classificado como CP (Consistency and Partition tolerance) de acordo com o teorema CAP.
- Por quê? MongoDB prioriza a consistência dos dados, mesmo que isso signifique sacrificar a disponibilidade durante uma partição de rede ou falha do primário. Ele usa uma abordagem de consenso por maioria para eleger um primário em um replica set: se uma minoria de nós for isolada, esses nós não aceitarão escritas, garantindo que não apareçam dois primários conflitantes e mantendo a consistência. Em caso de falha do primário, há um breve período de inatividade para escritas enquanto um novo primário é eleito, o que demonstra a preferência pela consistência sobre a disponibilidade imediata.
- PACELC Theorem: Sob o teorema PACELC, MongoDB é frequentemente descrito como "PC/EC" (Partition Consistent, Else Consistent), o que significa que ele prioriza a consistência tanto durante partições quanto em operações normais, à custa de alguma latência.
DB Advantages
- Flexible, Schema-Less Data Storage: Não exige um esquema fixo, permitindo o armazenamento de dados estruturados, semi-estruturados ou não estruturados, o que acelera a iteração e adaptação do modelo de dados. A adição de novos campos ou alterações na estrutura do documento não exige migrações caras.
- Document-Oriented & Developer-Friendly Model: O modelo de documentos JSON/BSON se alinha com a forma como as aplicações modelam dados em objetos, facilitando o desenvolvimento e minimizando a incompatibilidade de impedância. Dados relacionados podem ser aninhados em um único documento, reduzindo a necessidade de joins complexos.
- Horizontal Scalability: Suporta sharding nativamente, distribuindo dados e carga entre múltiplos servidores para lidar com grandes volumes e alto throughput. O sharding é automático do ponto de vista da aplicação.
- High Availability via Replication: Replica sets fornecem tolerância a falhas e failover automático, mantendo múltiplas cópias de dados em nós diferentes.
- Rich Query Capabilities and Indexing: Suporta consultas avançadas em qualquer campo (ranges, regex, text search, geospatial queries) e oferece vários tipos de índices para otimização.
- Aggregation and Analytics Within the Database: O framework de agregação permite pipelines de processamento de dados para filtrar, agrupar e transformar dados no lado do servidor, facilitando relatórios e análises em tempo real.
- Strong Community and Ecosystem: Possui uma comunidade robusta, diversas bibliotecas, ferramentas e integrações. O serviço MongoDB Atlas simplifica a gestão de deployments.
- Performance for Read-Heavy Workloads: É performático para cenários com muitas leituras, especialmente quando os dados "quentes" cabem na memória. A incorporação de dados relacionados em um documento reduz a necessidade de múltiplas buscas em disco, melhorando o desempenho de leitura.
DB Disadvantages
- Single-Master Replication Constraints: O uso de um único nó primário para escritas limita o throughput de escrita à capacidade desse servidor. O processo de failover, embora automático, pode levar alguns segundos (até 60 segundos) de indisponibilidade para escritas.
- Eventual Consistency (if using Secondary Reads or Sharding): Ao ler de réplicas secundárias para escalabilidade, as leituras são eventualmente consistentes, o que significa que podem retornar dados desatualizados.
- No Joins or Foreign Key Constraints: Não suporta joins multi-coleção da mesma forma que SQL (com exceção do $lookup limitado em agregação) e não impõe chaves estrangeiras ou restrições relacionais. Isso pode levar a inconsistências de dados se não for gerenciado pela aplicação.
- Data Size and Memory Footprint: O design sem esquema e o formato BSON podem consumir mais espaço de armazenamento. O desempenho do MongoDB depende muito da memória RAM para caching de dados, o que pode aumentar os custos de hardware para grandes deployments. O tamanho do documento é limitado a 16 MB e o aninhamento a 100 níveis.
- Complexity in Distributed Configuration: Configurar e administrar um setup sharded e replicado introduz complexidade operacional. Diagnosticar problemas em um ambiente distribuído pode ser desafiador para administradores não familiarizados com o MongoDB.
- Limited Analytics and SQL Features (Compared to RDBMS): Embora tenha agregação, não é tão completo para relatórios complexos quanto um banco de dados SQL analítico dedicado.
- Potential for Data Duplication and Inconsistency: A denormalização (incorporação de dados) para performance pode levar à duplicação de informações e, consequentemente, a risco de inconsistência se não for cuidadosamente gerenciado pela aplicação.
Application Niches
- Content Management and Catalogs: Ideal para sistemas de gerenciamento de conteúdo, bibliotecas digitais, catálogos de produtos e armazenamento de mídia, devido à sua natureza sem esquema e capacidade de lidar com diversos tipos de conteúdo.
- E-Commerce and User Transactions: Adequado para plataformas de varejo online que enfrentam picos de tráfego e precisam lidar com grandes volumes de dados (informações de produtos, perfis de usuários, pedidos, inventário) devido à sua escalabilidade horizontal e alto desempenho de leitura/escrita.
- Real-Time Analytics and Operational Intelligence: Utilizado para dashboards de análise em tempo real e aplicações de visão única do cliente, onde a capacidade de ingerir dados de múltiplas fontes e processá-los com o pipeline de agregação é crucial.
- Internet of Things (IoT) and Sensor Data: Perfeito para sistemas IoT que geram fluxos massivos de dados semi-estruturados (leituras de sensores, logs de status de dispositivos), devido à flexibilidade de esquema e escalabilidade horizontal.
- Gaming and High-Concurrency Applications: Utilizado na indústria de jogos para gerenciar milhões de usuários concorrentes, perfis de jogadores, estados de jogo e atualizações em tempo real, aproveitando as operações atômicas de documentos e o alto throughput.
- Log Management and Event Sourcing: Frequente como backend para coleta e análise de logs de aplicação e sistema, que são caracterizados por alto volume e registros semi-estruturados.
- Customer Profiles, Personalization, and CRM: Beneficia aplicações que mantêm perfis detalhados de usuários ou dados de clientes, permitindo que um perfil inclua uma variedade de informações em um único documento rico.
- Big Data Hub and Polyglot Storage: Usado como um "data hub" central para consolidar dados de múltiplas fontes, devido à sua flexibilidade de esquema e escalabilidade, atuando como um grande data lake para dados semi-estruturados.
- Healthcare and IoT Health Data: A flexibilidade de esquema do MongoDB permite o armazenamento de registros médicos complexos, incluindo dados estruturados e notas não estruturadas, bem como dados de sensores de dispositivos vestíveis.