Jeffrey Erickson | Redator Sênior | 30 de outubro de 2024
MongoDB foi criado em 2007 por um casal de desenvolvedores que queriam rastrear números enormes - daí o nome - de pequenas transações no negócio de serviços de anúncios. O novo banco de dados, que inicialmente foi apelidado de 10gen, continha dados em um simples "bucket" de documentos de arquivos do tipo JSON, e era capaz de escalar muito rapidamente. Não precisava de muito de um modelo de dados ou simultaneidade de transação exata porque estava simplesmente contando impressões de anúncios e as apostas eram baixas.
No entanto, o MongoDB forneceu o tipo de simplicidade de banco de dados para o qual os desenvolvedores queriam. Foi lançado sob o modelo de desenvolvimento de código aberto em 2009, transferido para a SSPL (Server Side Public License) em 2018 e evoluiu para se tornar o armazenamento de dados padrão de fato para muitas pilhas de desenvolvimento de código aberto, com uma lista de clientes que inclui Expedia, Lyft, eBay e muito mais. Vamos ver o que faz isso funcionar.
MongoDB é um banco de dados de documentos de código aberto popular que é amplamente utilizado em aplicações web e móveis modernas. Ele é categorizado como um banco de dados NoSQL, o que significa que é preciso uma abordagem flexível e orientada a documentos para armazenar dados em vez de um método relacional tradicional baseado em tabela. Uma grande parte do apelo do MongoDB é sua simplicidade e foco no desenvolvedor. Por exemplo, as interações Mongo são definidas pela sigla CRUD, para criar, ler, atualizar, 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 de indexação para acesso e replicação de arquivos mais rápidos para proteção e disponibilidade de dados. Isso significa que os desenvolvedores podem projetar e criar 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, ele logo ganhou ampla popularidade como um armazenamento de dados flexível no desenvolvimento da web de código aberto. Ele evoluiu continuamente desde o 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 desenvolvedores é que, em relação aos bancos de dados relacionais mais populares, é intuitivo de usar e rápido de começar. O tipo de documentos JSON armazenados em MongoDB é mapeado para tipos de dados familiares encontrados em linguagens de programação populares, como dicionários JavaScript ou Python. Mongo também fornece um menu completo de bibliotecas de clientes com suporte ao driver para a maioria das linguagens de programação, incluindo PHP, .Net, Java, Python, Node.js e muitos outros.
Como todas as ferramentas de tecnologia, o MongoDB é forte em algumas áreas e fraco em outras. Ele foi projetado para rastrear a publicidade online, que exigia acesso rápido simultâneo, mas precisava apenas de precisão transacional solta e pouca análise em tempo real. Ainda hoje, o MongoDB é formado em torno dos princípios BASE, que representam disponibilidade, escalabilidade e eventual consistência. Como tal, o MongoDB geralmente é usado em cenários em que alta disponibilidade e escalabilidade são as principais considerações de design. Por outro lado, para trabalhos como operações financeiras ou em ambientes corporativos de missão crítica, os desenvolvedores geralmente optam por um banco de dados relacional. Eles oferecem transações ACID (atomicidade, consistência, isolamento e durabilidade) para ajudar a garantir a confiabilidade e a consistência das operações do banco de dados. Mais recentemente, no entanto, 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 vão 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
MongoDB é um banco de dados NoSQL que usa um modelo de dados orientado a documentos, em que cada registro é um documento armazenado em uma coleção, em vez das linhas e colunas comuns a bancos de dados relacionais populares, como MySQL.
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 de aplicações estruturados, bem como dados semiestruturados e não estruturados. Ao contrário dos bancos de dados relacionais, o MongoDB não usa esquemas rígidos. Em vez disso, os documentos são flexíveis e podem conter matrizes e documentos aninhados, permitindo o armazenamento de dados complexos e hierárquicos.
Ao tratar conjuntos de dados extremamente grandes, documente bancos de dados, como MongoDB, expanda ou distribua dados entre 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, já que o MongoDB foi criado para veiculação de anúncios, onde potencialmente milhões de anúncios podem precisar ser chamados em milhares de sites a qualquer momento. Não houve necessidade inerente de analisar um anúncio contra outro, o que permitiu que os dados fossem distribuídos e separados fisicamente.
Os bancos de dados de documentos hierárquicos são muito rápidos para operações de leitura, mas a análise de dados pode ser lenta porque os sistemas devem analisar 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. Dadas essas diferenças, as equipes de desenvolvimento geralmente optam pelo melhor sistema de gerenciamento de dados para as necessidades atuais de suas aplicações. Ou eles podem escolher um banco de dados multimodal que forneça acesso SQL completo a dados de documentos relacionais e JSON, bem como muitos outros tipos de dados.
ACID vs. BASE
O que você escolher depende das necessidades da sua aplicação.
| ACID (atomicidade, consistência, isolamento, durabilidade) | BASE (basicamente disponível, estado suave, eventualmente consistente) |
|---|---|
|
Atomicidade: garante que uma transação inteira seja tratada como uma única unidade. Todas as mudanças são bem-sucedidas ou nenhuma delas. Isso evita atualizações parciais que podem 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. Impõe as regras de negócios e a integridade dos dados. Isolamento: Garante que as transações simultâneas não interfiram entre si. Cada transação parece ser executada isoladamente, mesmo que várias transações ocorram simultaneamente. Durabilidade: Depois que uma transação é submetida a commit, as alterações são gravadas no armazenamento permanente e não serão afetadas por falhas do sistema, como falhas. |
Basicamente disponível: Foca na 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 prossiga. 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. Eventualmente consistente: Com o tempo, a consistência é obtida por meio de processos em segundo plano que sincronizam alterações entre réplicas. |
|
Prós: 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. |
Prós: Alta disponibilidade e escalabilidade tornam a BASE ideal para aplicações que exigem alto tempo de atividade e capacidade de resposta, especialmente em sistemas distribuídos. Os requisitos de consistência relaxada permitem velocidades de gravação mais rápidas e melhor escalabilidade. |
|
Contras: A sobrecarga de desempenho significa que manter as garantias ACID pode levar a velocidades de gravação mais lentas. Requisitos rigorosos de consistência podem se tornar desafiadores de gerenciar em ambientes altamente escaláveis. |
Contras: Incoerências temporárias podem ocorrer durante a sincronização de dados, tornando o BASE menos adequado para aplicações em que a integridade rigorosa dos dados e a consistência imediata são críticas. |
O MongoDB armazena dados em coleções, que são análogos às tabelas em bancos de dados relacionais. Cada coleção contém vários documentos, que podem variar em estrutura. Não há necessidade de declarar a estrutura de documentos para o sistema, pois os documentos são autodescritivos, o que significa que cada documento contém metadados que descrevem cada campo dentro do documento.
Para melhorar o desempenho, o MongoDB suporta indexação em qualquer campo de um documento. Os índices suportam a execução eficiente de consultas e podem incluir índices primários e secundários. A linguagem de consulta do MongoDB suporta operações CRUD (criar, ler, atualizar, excluir) e permite agregação complexa, 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 de dados complexos no lado do servidor. Isso significa que ele é capaz de fazer análises no cluster onde os dados residem, sem precisar movê-los para outra plataforma, como no Apache Spark ou Hadoop. Isso pode reduzir a quantidade de dados transferidos de e para clientes.
O MongoDB trabalha para fornecer alta disponibilidade e melhorar o desempenho suportando conjuntos de dados de réplica. As réplicas podem ser usadas para balanceamento de carga distribuindo operações de leitura e gravação em todas as instâncias. Esses conjuntos de réplicas também fornecem redundância e aumentam a disponibilidade de dados por meio de várias cópias de 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 entre vários bancos de dados em várias máquinas. Um cluster fragmentado pode consistir em muitos conjuntos de réplicas. O sharding é configurado pela definição de uma chave de shard, que determina como os dados são distribuídos entre os shards. Essa técnica pode ajudar a gerenciar grandes conjuntos de dados e operações de alto rendimento, dividindo o conjunto de dados e carregando em vários servidores.
Como o sharding funciona
Cada shard é uma instância de banco de dados independente que hospeda subconjuntos de dados de um banco de dados com sharding.
Cada tipo de banco de dados — relacional, como MySQL, Postgres e Oracle Database, ou orientado a documentos, como CouchDB, DynamoDB e MongoDB — tem pontos fortes e fracos, e a escolha entre eles geralmente depende dos requisitos específicos e das restrições da aplicação que está sendo desenvolvida.
Um sistema de gerenciamento de banco de dados relacional (RDBMS) usa uma SQL (Structured Query Language), enquanto o formato focado em documentos do MongoDB usa APIs de armazenamento de documentos. Mesmo assim, a Linguagem de Consulta (MQL) MongoDB usa um idioma semelhante a JavaScript com operações como criar, ler, atualizar e excluir documentos.
MongoDB não tem conceito de tabelas e linhas e não tem esquemas; portanto, há menos estrutura a ser definida para que o banco de dados possa ser usado. Sem esquema central, no entanto, 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 uma aplicação alterar o esquema, outras poderão ser quebradas. Em comparação com bancos de dados relacionais, em que um esquema é essencialmente um plano gráfico para o RDBMS e a organização de dados e a inter-relação são definidas explicitamente, o MongoDB não tem o conceito inerente de relacionamentos entre 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 com o tempo. Isso difere de um RDBMS, que usa definições rígidas, hierarquias e procedimentos de validação baseados neles para ajudar a garantir a integridade dos dados.
Embora a configuração de uma instância básica do MongoDB seja simples, a configuração e a manutenção de um cluster MongoDB distribuído em larga escala com sharding e réplicas podem ser complexas e exigem um bom entendimento de suas opções de arquitetura e 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 | Requer um esquema predefinido que deve ser configurado para que os dados possam ser adicionados. | Tem um esquema dinâmico. Novos campos podem ser adicionados a um documento sem afetar todos os outros documentos na 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. |
| Dimensionamento | Tradicionalmente, a escala é 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 | Suporta transações multilinha e é compatível com ACID, tornando-o adequado para aplicativos em que nenhum dado pode ser perdido ou corrompido. | Suporta transações de vários documentos, mas é conhecido por ser menos robusto do que a maioria dos bancos de dados relacionais tradicionais, especialmente em dados distribuídos. |
| Desempenho | Criado para garantir transações precisas, mas o desempenho pode ser menor para grandes volumes de dados. No entanto, o desempenho analítico geralmente é melhor. | Criado 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 um blog ou 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 uma pedra angular das pilhas de desenvolvimento populares de código aberto, como MEAN e MERN.
Escolha quando precisar:
O MongoDB tornou-se popular entre os desenvolvedores em parte devido à sua API intuitiva, modelo de dados flexível e recursos que incluem:
A popularidade do MongoDB com a comunidade de código aberto é atribuída às muitas maneiras pelas quais ele torna o desenvolvimento e a manutenção de aplicativos mais intuitivos e escaláveis. Essas vantagens incluem:
Embora o MongoDB ofereça muitas vantagens, especialmente para aplicações que exigem flexibilidade e alto desempenho em meio a grandes volumes de dados, ele apresenta muitas desvantagens potenciais.
MongoDB é um banco de dados NoSQL que funciona bem nesse ecossistema, mas também foi criado para interagir com outros tipos de sistemas de gerenciamento de banco de dados por meio de várias 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 e vice-versa. Isso é útil para enviar dados para um banco de dados relacional para relatórios e análises de dados complexas. As aplicações MongoDB também podem se comunicar em diferentes plataformas de banco de dados usando APIs REST.
Um bom exemplo de compatibilidade com MongoDB é a API do Oracle Database para MongoDB, que permite que os desenvolvedores usem as ferramentas de código aberto e os drivers do MongoDB conectados a um Oracle Autonomous JSON Database. Isso lhes dá acesso aos recursos multimodelo da Oracle e os ajuda a evitar a movimentação de dados para um banco de dados separado para análise, machine learning (ML) e análise espacial. Pense no Autonomous JSON Database como uma alternativa multimodal ao MongoDB Atlas. Muitas vezes, poucas ou nenhuma alteração é necessária para as aplicações existentes.
Em vez de acessar a funcionalidade 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 fornece um serviço de banco de dados de documentos em nuvem para aplicativos centrados em JSON que apresenta APIs de documentos no estilo NoSQL (Simple Oracle Document Access, ou SODA, e Oracle Database API for MongoDB), dimensionamento sem servidor, transações ACID de alto desempenho, segurança abrangente e baixo preço de pagamento por uso. Não há tempo de inatividade porque a migração de MongoDB para o Oracle Autonomous JSON Database é obtida 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 dos negócios usando uma única plataforma de dados que pode ajudar a atender a todas as suas necessidades, permitindo que os desenvolvedores usem SQL, documentos JSON, gráficos, geoespaciais, textos 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 de tabelas relacionais e documentos JSON, sem as compensações de qualquer modelo.
O Autonomous Database oferece serviços integrados de IA e machine learning (ML) no banco de dados para aprimorar aplicações com análise do texto e da imagem, reconhecimento da fala ou recomendações personalizadas. Além disso, o Autonomous Database Select AI traduz automaticamente o idioma natural em consultas de banco de dados e permite ter uma conversa contextual com o banco de dados, sem qualquer codificação personalizada ou operações manuais por meio da interface complexa. E como o banco de dados é totalmente autônomo, ele permite que as equipes de desenvolvimento se concentrem na criação de aplicações, 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 experimentar um workshop para aprender a usar SQL, JSON e Oracle Graph na mesma aplicação.
Com casos de uso que incluem plataformas de ecommerce, aplicativos IoT e muito mais, o MongoDB provou sua versatilidade em todos os setores. Sua capacidade de lidar com diversos tipos de dados e oferecer suporte a consultas complexas o posiciona como um componente capaz de pilhas de tecnologia modernas. À medida que as empresas buscam extrair o máximo valor de seus dados, o MongoDB será fundamental para o sucesso.
Os desenvolvedores e seus colegas de negócios podem se beneficiar de aplicações nativas da nuvem que são projetadas especificamente para maximizar a agilidade, a escalabilidade e a eficiência. Saiba mais e confira mais 10 maneiras pelas quais a nuvem está melhorando.
Qual a diferença entre o SQL e MongoDB?
O MongoDB salva dados não estruturados, que não são adequados para uma SQL (Structured Query Language).
MongoDB é uma linguagem de back-end?
Não, mas pode ser usado como parte de uma aplicação web de back-end.
O MongoDB é uma linguagem ou uma estrutura?
Trata-se de um sistema de gerenciamento de banco de dados que utiliza dados não estruturados armazenados em documentos, em vez de tabelas.