Group Discussion: NoSQL and CAP Theorem
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).
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.