Jeffrey Erickson | Redator Sênior | 30 de outubro de 2024
O MongoDB foi criado em 2007 por alguns desenvolvedores que queriam rastrear um grande número de pequenas transações no setor de serviços de publicidade. O novo banco de dados, inicialmente chamado de 10gen, armazenava dados em um "bucket" simples de arquivos do tipo JSON e era capaz de escalar de forma muito rápida. Não precisava de um modelo de dados complexo ou de uma concorrência de transações rigorosa, pois simplesmente contabilizava impressões de anúncios e os riscos eram baixos.
No entanto, o MongoDB acabou oferecendo exatamente a simplicidade de banco de dados que os desenvolvedores tanto desejavam. O sistema foi lançado em 2009 como um modelo de desenvolvimento de código aberto em 2009, migrou para a SSPL (Server Side Public License) em 2018 e se tornou o padrão para armazenamento de dados em diversas plataformas de desenvolvimento de código aberto, incluindo Expedia, Lyft e eBay. Vamos ver como ele funciona.
O MongoDB é um banco de dados de documentos de código aberto popular que é amplamente utilizado em aplicações modernas para web e dispositivos móveis. É classificado como um banco de dados NoSQL, o que significa que adota uma abordagem flexível e orientada a documentos para armazenar dados, em vez do método relacional tradicional baseado em tabelas. Grande parte do diferencial do MongoDB é sua simplicidade e foco no desenvolvedor. Por exemplo, as interações Mongo são definidas pela sigla CRUD, que significa criar, ler, atualizar e excluir.
O MongoDB salva dados em documentos JSON que facilitam o uso de dados armazenados, sejam eles estruturados, não estruturados ou semiestruturados, para diferentes tipos de aplicações. O modelo de dados flexível do MongoDB permite que os desenvolvedores armazenem dados não estruturados, oferecendo suporte à indexação para acesso mais rápido aos arquivos e replicação para proteção e disponibilidade dos dados. Isso significa que os desenvolvedores podem projetar e construir aplicações sofisticadas usando o MongoDB.
Embora o MongoDB tenha sido desenvolvido para rastrear impressões em milhares de sites de veiculação de anúncios, logo ganhou grande popularidade como um armazenamento de dados flexível no desenvolvimento web de código aberto. Ele tem evoluído continuamente desde seu lançamento em 2007, acumulando um conjunto robusto de recursos que inclui consultas ad hoc, indexação e agregação em tempo real. Um dos principais benefícios do MongoDB para os desenvolvedores é que, em comparação com a maioria dos bancos de dados relacionais populares, ele é intuitivo e fácil de usar. O tipo de documentos JSON armazenados no MongoDB corresponde a tipos de dados familiares encontrados em linguagens de programação populares, como dicionários em JavaScript ou Python. O MongoDB também oferece um menu completo de bibliotecas de cliente com suporte a drivers para a maioria das linguagens de programação, incluindo PHP, .NET, Java, Python, Node.js e muitas outras.
Como todas as ferramentas de tecnologia, o MongoDB tem suas vantagens em certos aspectos e algumas limitações em outros. Foi projetado para monitorar publicidade online, o que exigia acesso simultâneo rápido, mas precisava apenas de precisão transacional razoável e pouca análise em tempo real. Ainda hoje, o MongoDB é baseado nos princípios BASE, que significam disponibilidade, escalabilidade e consistência eventual. Sendo assim, o MongoDB é normalmente usado em cenários onde alta disponibilidade e escalabilidade são considerações primordiais de projeto. Em contraste, para tarefas como operações financeiras ou em ambientes corporativos de missão crítica, os desenvolvedores geralmente optam por um banco de dados relacional. Estes oferecem transações ACID (atomicidade, consistência, isolamento e durabilidade) para garantir a confiabilidade e a consistência das operações do banco de dados. No entanto, mais recentemente, o setor de tecnologia está oferecendo soluções que podem dar aos desenvolvedores o melhor dos dois mundos por meio da simplicidade de desenvolvimento do JSON e dos benefícios do SQL.
Como os dados são transferidos das aplicações para o banco de dados MongoDB?
O MongoDB vem em uma variedade de configurações e níveis de serviço para atender às necessidades dos desenvolvedores que trabalham em projetos de pequenas, médias e até grandes empresas.
Principais conclusões
O MongoDB é um banco de dados NoSQL que usa um modelo de dados orientado a documentos, no qual cada registro é um documento armazenado em uma coleção, em vez das linhas e colunas comuns em bancos de dados relacionais populares, como MySQL.
O MongoDB armazena os documentos JSON usando um formato chamado BSON, ou JSON binário. A natureza não relacional desses documentos significa que eles podem armazenar (e o banco de dados pode processar) dados estruturados de aplicativos, bem como dados semiestruturados e não estruturados. Ao contrário dos bancos de dados relacionais, o MongoDB não usa esquemas rígidos. Por outro lado, os documentos são flexíveis e podem conter matrizes e documentos aninhados, suportando armazenamento de dados hierárquico e complexo.
Ao lidar com conjuntos de dados extremamente grandes, bancos de dados de documentos, como o MongoDB, escalam horizontalmente ou distribuem os dados por vários nós ou clusters usando uma técnica chamada sharding. Esse modelo permite armazenamento e recuperação rápidos. Essa arquitetura faz sentido, visto que o MongoDB foi criado para veiculação de anúncios, onde potencialmente milhões de anúncios podem precisar ser exibidos em milhares de sites a qualquer momento. Não foi necessária uma análise direta entre anúncios, o que permitiu uma distribuição física dos dados.
Bancos de dados hierárquicos de documentos são extremamente rápidos para operações de leitura, mas a análise de dados pode ser lenta porque os sistemas precisam analisar os dados em todas as entidades aninhadas. Por outro lado, os bancos de dados relacionais armazenam seus dados em tabelas separadas, e um único "objeto" pode ser referenciado em muitas tabelas dentro do banco de dados, permitindo operações analíticas mais eficientes em escala. Considerando essas diferentes vantagens, as equipes de desenvolvimento geralmente optam pelo melhor sistema de gerenciamento de dados para as necessidades atuais de sua aplicação. Ou podem escolher um banco de dados multimodal que forneça acesso SQL completo a dados de documentos relacionais e JSON, bem como a muitos outros tipos de dados.
ACID vs. BASE
A escolha dependerá das necessidades da sua aplicação.
| ACID (atomicidade, consistência, isolamento, durabilidade) | BASE (disponibilidade básica, estado flexível, consistência eventual) |
|---|---|
|
Atomicidade: garante que uma transação inteira seja tratada como uma única unidade. Ou todas as alterações são bem-sucedidas, ou nenhuma delas é. Isso evita atualizações parciais que poderiam deixar seus dados em um estado inconsistente. Consistência: garante que o banco de dados faça a transição de um estado válido para outro após uma transação. Reforça as regras comerciais e a integridade dos dados. Isolamento: garante que transações simultâneas não interfiram umas nas outras. Cada transação parece ser executada isoladamente, mesmo que várias transações ocorram simultaneamente. Durabilidade: depois que uma transação é confirmada, as alterações são gravadas em armazenamento permanente e não são afetadas por falhas do sistema, como interrupções. |
Disponibilidade básica: prioriza a maximização da disponibilidade de dados. O sistema se esforça para permanecer operacional mesmo durante falhas parciais, permitindo que a maioria das operações de leitura e gravação sejam concluídas. Estado flexível: a consistência dos dados não é garantida imediatamente após uma operação de gravação. Pode haver um pequeno atraso antes que as alterações sejam refletidas em todas as réplicas, levando a inconsistências temporárias. Consistência eventual: com o tempo, a consistência é alcançada por meio de processos em segundo plano que sincronizam as alterações entre as réplicas. |
|
Vantagens: A alta integridade dos dados e a forte consistência tornam o ACID ideal para aplicações que exigem precisão, como transações financeiras. |
Vantagens: A alta disponibilidade e escalabilidade tornam o BASE ideal para aplicações que exigem alto tempo de atividade e capacidade de resposta, especialmente em sistemas distribuídos. Requisitos de consistência mais flexíveis permitem velocidades de gravação mais rápidas e melhor escalabilidade. |
|
Desvantagens: A sobrecarga de desempenho significa que manter as garantias ACID pode levar a velocidades de gravação mais lentas. Em ambientes altamente escaláveis, os requisitos de consistência rigorosos podem se tornar difíceis de gerenciar. |
Desvantagens: Inconsistências temporárias podem ocorrer durante a sincronização de dados, tornando o BASE menos adequado para aplicações onde a integridade estrita dos dados e a consistência imediata são essenciais. |
O MongoDB armazena dados em coleções, que são análogas às tabelas em bancos de dados relacionais. Cada coleção contém vários documentos, que podem variar em estrutura. Não é necessário declarar a estrutura dos documentos para o sistema, pois eles são autodescritivos, o que significa que cada documento contém metadados que descrevem cada um dos campos.
Para melhorar o desempenho, o MongoDB oferece suporte à indexação em qualquer campo de um documento. Os índices permitem a execução eficiente de consultas e podem incluir índices primários e secundários. A linguagem de consulta do MongoDB oferece suporte a operações CRUD (criar, ler, atualizar, excluir) e permite agregações complexas, pesquisa de texto e consultas geoespaciais. Para ajudar a melhorar os tempos de resposta, o MongoDB fornece uma estrutura de agregação, que permite aos desenvolvedores configurar o processamento complexo de dados no lado do servidor. Isso significa que ele é capaz de fazer análises no cluster onde os dados residem, sem ter que movê-los para outra plataforma, como no Apache Spark ou Hadoop. Isso pode reduzir a quantidade de dados transferidos de e para os clientes.
O MongoDB funciona para fornecer alta disponibilidade e melhorar o desempenho, oferecendo suporte a conjuntos de dados replicados. As réplicas podem ser usadas para balanceamento de carga, distribuindo operações de leitura e gravação entre todas as instâncias. Esses conjuntos de réplicas também fornecem redundância e aumentam a disponibilidade dos dados por meio de várias cópias dos dados em diferentes servidores de banco de dados. Em caso de falha ou manutenção de hardware, os conjuntos de réplicas permitem que o MongoDB forneça failover automático e redundância de dados.
Para escalabilidade, o MongoDB oferece suporte ao dimensionamento horizontal por meio do sharding, que é uma maneira de distribuir dados por vários bancos de dados em várias máquinas. Um cluster fragmentado pode consistir em muitos conjuntos de réplicas. O sharding é configurado definindo uma chave de fragmentação, que determina como os dados são distribuídos pelos fragmentos. Essa técnica pode ajudar a gerenciar grandes conjuntos de dados e operações de alto rendimento, dividindo o conjunto de dados e a carga em vários servidores.
Como o sharding funciona
Cada shard é uma instância de banco de dados independente que hospeda subconjuntos dos dados de um banco de dados fragmentado.
Cada tipo de banco de dados (relacional, como MySQL, Postgres e Oracle Database, ou orientado a documentos, como CouchDB, DynamoDB e MongoDB) possui pontos fortes e fracos, e a escolha entre eles geralmente depende dos requisitos e restrições específicos da aplicação que está sendo desenvolvida.
Um sistema de gerenciamento de banco de dados relacional (RDBMS) usa um SQL (Structured Query Language), enquanto o formato orientado a documentos do MongoDB usa APIs de armazenamento de documentos. Mesmo assim, o MongoDB Query Language (MQL) utiliza uma linguagem semelhante a JavaScript com operações como criar, ler, atualizar e excluir documentos.
O MongoDB não possui o conceito de tabelas e linhas e não tem esquemas, portanto, há menos estrutura a ser definida antes que o banco de dados possa ser utilizado. No entanto, sem um esquema central, cada aplicação que acessa as coleções precisa entender o documento. Portanto, o "esquema" está no código da aplicação e não está definido no banco de dados. Se um aplicativo alterar o esquema, outros aplicativos podem apresentar problemas. Em comparação com bancos de dados relacionais, onde um esquema é essencialmente um modelo para o SGBD relacional e os relacionamentos entre os dados são definidas claramente, o MongoDB não possui o conceito inerente de relacionamentos entre os dados.
A flexibilidade dos armazenamentos de dados é notável, pois o MongoDB usa diferentes formatos para dados, como armazenamentos de chave-valor, gráficos e documentos, e as estruturas de dados podem mudar ao longo do tempo. Isso difere de um RDBMS, que usa definições rígidas, hierarquias e procedimentos de validação baseados nelas para ajudar a garantir a integridade dos dados.
Embora a configuração de uma instância básica do MongoDB seja simples, configurar e manter um cluster MongoDB distribuído em grande escala com fragmentação e réplicas pode ser complexo e requer um bom entendimento de sua arquitetura e opções de configuração.
| Relacional | MongoDB | |
|---|---|---|
| Modelo de dados | Usa tabelas com linhas e colunas fixas, e os dados são estruturados em um esquema predefinido. | Usa coleções de documentos, que são estruturas semelhantes a JSON com esquemas dinâmicos. |
| Flexibilidade do esquema | Exige um esquema predefinido que deve ser configurado antes que os dados possam ser adicionados. | Tem um esquema dinâmico. É possível adicionar novos campos a um documento sem afetar os demais documentos da coleção. |
| Linguagem de consulta | Usa SQL, que é muito eficiente para consultas complexas, para definir e manipular dados. | Usa uma linguagem de consulta baseada em documentos que é considerada mais intuitiva, mas menos completa e versátil do que o SQL. |
| Escalonamento | Tradicionalmente, a escalabilidade é vertical, adicionando mais potência à máquina existente, embora recursos maduros, como sharding e Oracle Real Application Clusters, ofereçam suporte para dimensionamento horizontal. | Projetado para escalar horizontalmente em várias máquinas usando sharding, que distribui dados em um cluster de máquinas. |
| Transações | Oferece suporte a transações com múltiplas linhas e é compatível com ACID, tornando-o adequado para aplicações onde a perda ou corrupção de dados é inadmissível. | Oferece suporte a transações de múltiplos documentos, mas é conhecido por ser menos robusto do que a maioria dos bancos de dados relacionais tradicionais, especialmente em dados distribuídos. |
| Desempenho | Projetado para garantir transações precisas, mas o desempenho pode ser inferior para grandes volumes de dados. No entanto, o desempenho analítico geralmente é melhor. | Projetado para alto desempenho de leitura em grandes volumes de dados. |
O MongoDB é adequado para uma ampla gama de usos, desde aplicações CRUD simples, como blogs ou um aplicativo de anotações, até plataformas complexas, como o Amazon Prime. O MongoDB é frequentemente selecionado para sistemas de gerenciamento de conteúdo (CMSes), aplicativos de jogos em que a sincronização de dados deve ser rápida e dados biométricos de assistência médica, entre muitos outros casos de uso. Sua versatilidade o tornou um elemento fundamental de conjuntos de ferramentas de desenvolvimento de código aberto populares MEAN e MERN.
Escolha quando precisar de:
O MongoDB se tornou popular entre os desenvolvedores em parte devido à sua API intuitiva, modelo de dados flexível e recursos que incluem:
A popularidade do MongoDB na comunidade de código aberto se deve às diversas maneiras pelas quais ele torna o desenvolvimento e a manutenção de aplicações mais intuitivos e escaláveis. Essas vantagens incluem:
Embora o MongoDB ofereça muitas vantagens, principalmente para aplicações que exigem flexibilidade e alto desempenho em meio a grandes volumes de dados, ele também pode apresentar muitas desvantagens.
O MongoDB é um banco de dados NoSQL que funciona bem dentro desse ecossistema, mas também foi desenvolvido para interagir com outros tipos de sistemas de gerenciamento de banco de dados por meio de diversas ferramentas e conectores de integração de dados. Esse conjunto de ferramentas inclui uma infraestrutura ETL (extrair, transformar, carregar) para extrair e migrar dados do MongoDB. Isso é útil para enviar dados para um banco de dados relacional para relatórios e análises de dados complexas. As aplicações do MongoDB também podem se comunicar entre diferentes plataformas de banco de dados usando APIs REST.
Um bom exemplo de compatibilidade com o MongoDB é a API de banco de dados Oracle para MongoDB, que permite aos desenvolvedores usar as ferramentas e drivers de código aberto do MongoDB conectados a um Oracle Autonomous JSON Database. Isso permite o acesso aos recursos multimodelo da Oracle e os ajuda a evitar a migração de dados para um banco de dados separado para análises, machine learning (ML) e análise espacial. Considere o Autonomous JSON Database como uma alternativa multimodal ao MongoDB Atlas. Geralmente, são necessárias poucas ou nenhuma alteração nas aplicações existentes.
Em vez de acessar a funcionalidade do MongoDB por meio de APIs, os desenvolvedores podem simplesmente migrar suas cargas de trabalho centradas em JSON para um Oracle Autonomous JSON Database na Oracle Cloud Infrastructure (OCI). Isso proporciona um serviço de banco de dados de documentos em nuvem para aplicações centradas em JSON, que apresenta APIs de documentos no estilo NoSQL (Simple Oracle Document Access, ou SODA, e Oracle Database API for MongoDB), escalabilidade sem servidor, transações ACID de alto desempenho, segurança abrangente e preços baixos conforme o uso. Não há tempo de inatividade porque a migração de MongoDB para o Oracle Autonomous JSON Database é realizada com o Oracle Cloud Infrastructure (OCI) GoldenGate.
Os usuários do MongoDB agora têm uma maneira mais versátil de criar aplicações centradas em JSON. O Oracle Autonomous Database oferece aos desenvolvedores a flexibilidade de reagir às demandas de negócios usando uma única plataforma de dados que pode atender a todas as suas necessidades — permitindo que os desenvolvedores usem SQL, documentos JSON, grafos, dados geoespaciais, texto e vetores em um único banco de dados para criar rapidamente novos recursos.
Além disso, um novo recurso revolucionário no Oracle Database, o JSON Relational Duality, oferece os benefícios das tabelas relacionais e dos documentos JSON, sem as desvantagens de nenhum dos dois modelos.
O Autonomous Database oferece serviços de IA integrados e machine learning (ML) no banco de dados para aprimorar aplicativos com análise de texto e imagem, reconhecimento de fala ou recomendações personalizadas. Além disso, o Autonomous Database Select AI traduz automaticamente a linguagem natural em consultas ao banco de dados e permite que você tenha uma conversa contextual com o banco de dados, sem qualquer codificação personalizada ou operações manuais por meio de uma interface complexa. E como o banco de dados é totalmente autônomo, ele permite que as equipes de desenvolvimento se concentrem na criação de aplicativos, garantindo o tempo de atividade e protegendo os dados por meio de medidas de segurança automatizadas e monitoramento contínuo.
Você pode comece hoje gratuitamente e até mesmo participar de um workshop para aprender a usar SQL, JSON e Oracle Graph no mesmo aplicativo.
Com casos de uso que incluem plataformas de comércio eletrônico, aplicações de IoT e muito mais, o MongoDB comprovou sua versatilidade em diversos setores. Sua capacidade de lidar com diferentes tipos de dados e suportar consultas complexas o posiciona como um componente essencial das modernas arquiteturas de tecnologia. À medida que as empresas buscam extrair o máximo valor de seus dados, o MongoDB será fundamental para o sucesso.
Os desenvolvedores e outros colaboradores podem se beneficiar de aplicações nativas da nuvem, projetadas especificamente para maximizar a agilidade, a escalabilidade e a eficiência. Saiba mais e confira outras 10 maneiras pelas quais a nuvem está cada vez melhor.
Qual a diferença entre o MongoDB e SQL?
O MongoDB salva dados não estruturados, que não são adequados para um SQL (Structured Query Language).
O MongoDB é um idioma de backend?
Não, mas pode ser usado como parte de uma aplicação web de backend.
O MongoDB é uma linguagem ou uma estrutura?
É um sistema de gerenciamento de banco de dados que usa dados não estruturados armazenados em documentos em vez de tabelas.