Se você chegou até aqui, você deve estar se perguntando o que é MongoDB e como utilizar. Entretanto, não é possível tratar desse assunto sem antes falar sobre NoSQL.
NoSQL (sigla para Not Only SQL) é um termo utilizado para referir-se a bancos de dados não relacionais criados a partir da Web 2.0 para lidar com um grande volume infomações em bancos de dados sem perda de performance. O MongoDB é um exemplo de NoSQL e, atualmente, é o mais popular do mercado e nesse artigo você vai entender o porquê.
Bancos NoSQL possuem muitas vantagens e são de suma importância para todas as pessoas que estão inseridas nesse mercado. Neste artigo, explicaremos mais sobre isso! Confira:
- O que é um Banco de Dados Orientado a Documentos?
- O que é MongoDB?
- Compatibilidade com linguagens e frameworks
- Quais as principais características do MongoDB?
- Porque usar MongoDB e quais as principais aplicações?
- Quais as principais diferenças entre MongoDB e MySQL?
- Quais as vantagens do MongoDB?
- Quais as desvantagens do MongoDB?
- Como instalar o MongoDB?
- Criando uma aplicação com mongoDB
- Confira 8 boas práticas do MongoDB!
O que é um Banco de Dados Orientado a Documentos?
É um banco de dados que armazena e gerencia informações que são orientadas a documentos, que são formas de comprimir e codificar dados em formatos como JSON, BSON, XML e até mesmo PDF.
O conceito de Banco de Dados Orientado a Documentos diverge completamente da forma com que os bancos SQL lidam com os dados. Na prática, a orientação a documentos é que traz o ganho de desempenho dos bancos NoSQL.
Enquanto os bancos de dados relacionais guardam seus dados em diferentes tabelas que necessitam de relacionamentos entre si para serem gerenciados, os bancos orientados a documentos armazenam os dados em uma única estância ganhando velocidade tanto no acesso às informações quanto na manutenção.
Outras características são:
- Esquemas flexíveis;
- Identificadores Únicos Universais (UUID);
- Filtragem e Agrupamento Avançados;
- Redundância e Inconsistência dos dados.
O que é MongoDB?
O MongoDB é o banco de dados não relacional (orientado a documentos) mais utilizado no mercado. É escrito em C++, fato que o torna bastante portável a vários sistemas operacionais. Foi lançado em fevereiro de 2009 pela empresa 10gen, a atual MongoDB Inc.
No início, o MongoDB servia como um banco de dados interno de uma aplicação PaaS (Platform as a Service), porém, em 2009, a 10gen lançou o MongoDB 1.0 que vem recebendo atualizações desde então.
Compatibilidade com linguagens e frameworks
O MongoDB é compatível com diversas linguagens e frameworks, por exemplo:
Quais as principais características do MongoDB?
O MongoDB possui características importantes que o coloca na posição de banco de dados NoSQL mais popular do mercado, entre elas:
- Documentos parecidos com JSON, tornando o seu gerenciamento fácil pela aplicação;
- Facilidade para filtrar e classificar dados devido a sua poderosa linguagem de busca;
- Suporte para junções em consultas (Aggregation Framework);
- Atlas — o MongoDB em nuvem disponível para Google Cloud, AWS e Azure;
- Não possui esquema (schema).
Porque usar MongoDB e quais as principais aplicações?
Apesar de tantas características vantajosas, precisamos saber quando devemos usar o MongoDB.
Por ser um banco de dados NoSQL, o ideal é que ele seja utilizado sempre que os bancos tradicionais forem incapazes ou inviáveis para realizar algum tipo de serviço, por exemplo, quando precisamos inserir um grande volume de dados em velocidade muito rápida (cenário comum em aplicações web).
Além disso, quando precisamos escalar uma aplicação, o uso de bancos de dados tradicionais aumenta a complexidade do sistema, obrigando a criar cada vez mais relacionamentos entre as tabelas, com isso perdendo desempenho e dificultando a manutenção.
Por não possuir ‘esquema’, o mongoDB garante um crescimento horizontal do banco de forma muito mais ágil, sendo perfeito para aplicações como:
- E-Commerces que dependem de grande volume de dados (por exemplo, taxas, valores de produtos, endereços de clientes, métodos de pagamento, etc.);
- Aplicações que usem NodeJS ou Redis no backend devido à facilidade de manutenção, altíssima performance e integração com Javascript;
- Sistemas de gerenciamento de conteúdos baseadas em Big Data.
Quais as principais diferenças entre MongoDB e MySQL?
Vimos as principais diferenças entre os bancos NoSQL e SQL, agora vamos ver um pouco de sua diferença estrutural:
SQL
- Database (Base de dados);
- Tabela;
- Linha;
- Índice;
- Coluna;
- União.
MongoDB
- Database (Base de dados);
- Coleção (Collection);
- Documento;
- Índice;
- Campo (Field);
- Link e Incorporação.
Outro ponto que deve ser considerado é que os documentos do MongoDB podem se diferenciar entre si em sua estrutura devido serem auto descritivos o que no SQL não ocorre.
Quais as vantagens do MongoDB?
As vantagens do MongoDB são relacionadas principalmente a performance. Uma única consulta pode trazer uma enorme massa de dados em pouco tempo comparado aos bancos tradicionais.
Além da performance, a sua escalabilidade também é superior. O sharding (técnica de manipulação que consiste em dividir os dados em máquinas diferentes para aumentar o espaço e melhorar o rendimento) é bem configurado no MongoDB.
Outra grande vantagem é a manutenção, devido os seus documentos serem parecidos com JSON, é fácil integrar com qualquer aplicação. O próprio sharding para ser feito em um banco de dados tradicional é muito mais trabalhoso.
Outras características vantajosas são:
- Cache de memória para pesquisar dados armazenados;
- Suporte a índice primário ou secundário em qualquer campo;
- Armazenamento de arquivos utilizando GridFS;
- Uso de objetos JavaScript ao invés de ‘procedimentos’ (Procedures);
- Compass uma ‘interface’ gráfica fácil e bem estruturada;
- Integração com Docker.
Quais as desvantagens do MongoDB?
- Suporte menos ágil comparado a grandes empresas como Oracle e Microsoft;
- Apesar de dar suporte a agregação de coleções, sua aplicação pode ser bastante complexa;
- O MongoDB é baseado no Teorema de CAP, o que o torna fraco para aplicações que precisem de transações ACID.
Como instalar o MongoDB?
1- Primeiro, vamos ao site oficial do MongoDB e então clicaremos opção Try Free (no canto superior direito) e depois em Mongo Community.
2- Depois disso você deve escolher a versão do seu Sistema Operacional na caixa do lado direito.
3- Se você estiver utilizando Windows, basta descompactar o arquivo baixado, ir até à pasta ‘bin’ e executar o arquivo ‘mongod.exe’.
4- Pronto este é o Shell do Mongo e ele já está pronto para ser utilizado!
Criando uma aplicação com mongoDB
- Vamos fazer nossa primeira API usando MongoDB, para isso vamos iniciar o NodeJS digitando o comando abaixo no terminal (você deve ter o Node instalado na sua máquina):
npm init -y
- Agora vamos instalar o driver que o NodeJS utilizará para acessar o MongoDB
npm install mongodb
- Com a aplicação inicializada, vamos criar um arquivo connection.js.
const { MongoClient } = require('mongodb');
const OPTIONS = {
useNewUrlParser: true,
useUnifiedTopology: true,
}
const MONGO_DB_URL = 'mongodb://127.0.0.1:27017';
let db = null;
const connection = () => {
return db
? Promise.resolve(db)
: MongoClient.connect(MONGO_DB_URL, OPTIONS)
.then((conn) => {
db = conn.db('model_example');
return db;
})
};
module.exports = connection;
- Agora vamos iniciar o Shell do Mongo e popular nosso banco de dados com o seguinte comando:
use model_examples
db.devs.insertMany([
{ "Name": "Cairo", "lastName": "Noleto", "nationality": "brasileiro" },
{ "Name": "Igor", "lastName": "Giamoniano", "nationality": "brasileiro" },
{ "Name": "Allen", "lastName": "Jorge", "nationality": "brasileiro" },
{ "Name": "Steve", "lastName": "Jobs", "nationality": "norte-americano" },
])
Feito isso, o banco model_examples será criado com a coleção devs. Então, para acessar os dados, usaremos o seguinte código em um arquivo devs.js:
const connection = require('./connection');
// Busca todos os devs do banco.
const getAll = async () => {
return connection()
.then((db) => db.collection('devs').find().toArray())
.then((devs) =>
devs.map(({ _id, firstName, lastName }) =>
getNewAuthor({
id: _id,
firstName,
lastName,
})
)
);
}
module.exports = {
getAll,
};
- Agora, para finalizar, vamos somente criar um arquivo index.js para acessarmos estes dados através de uma rota /devs
const express = require('express');
const Author = require('./models/Author');
const app = express();
app.get('/devs, async (_req, res) => {
const authors = await Author.getAll();
res.status(200).json(authors);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Ouvindo a porta ${PORT}`);
});
Confira 8 boas práticas do MongoDB!
Use compressão e otimize recursos
O MongoDB possui um serviço de compressão robusto implementado no seu motor de armazenamento WiredTiger que encurta nomes, mas se você quiser melhorar ainda mais a performance, evite campos com nomes grandes.
Outra boa prática para otimização de recursos é separar o armazenamento, a maior parte do acesso aos dados terá um desempenho melhor em discos de acesso aleatório como SSDs porém, o Mongo armazena os ‘logs’ de forma sequencial podendo estes serem armazenados em discos tradicionais como RAID.
Execute um único MongoDB por servidor
Aqui é preciso deixar expícito que não estamos falando sobre clusterização ou sharding como já foi falado nesse artigo. O que estamos falando aqui é da execução do mesmo processo mongod executado lado a lado no mesmo servidor.
Isso é considerado uma má prática, pois haverá um tipo de ‘concorrência’ pelos recursos do servidor resultando em uma perda geral de desempenho.
Armazene os dados do registro em um único documento
Uma das fraquezas do MongoDB é a inconsistência dos dados. Se eles estiverem espalhados em diferentes documentos, o risco de isso acontecer aumenta.
Além disso, as buscas tem uma performance muito melhor quando rodam em um único documento.
Evite documentos grandes
Apesar do MongoDB possuir uma boa compressão para gerenciamento de arquivos binários, esse tipo de armazenamento deve ser sempre evitado. Um dos motivos é justamente a limitação do tamanho de cada documento para 16 MB. A boa notícia é que documentos ocupam muito menos espaço que linhas e dificilmente uma linha chega a este tamanho.
Evite informações desnecessárias: índices, nomes, etc.
Existem vários problemas em utilizar informações desnecessárias em um banco de dados, desde perda de performance até complexidade de manutenção. Geralmente, um banco com muitos dados desnecessários é resultado de uma má modelagem. Na dúvida, vale rever a regra de negócio.
Use covered queries quando possível
Segundo a documentação do MongoDB, uma busca coberta (covered query) pode ser usada quando: ‘Todos os campos da consulta são partes do índice’ e ‘todos os campos na mesma consulta retornam o índice’.
Caso esses requisitos sejam atendidos, usar um índice pode dar um grande ganho de desempenho na busca, visto que o mongo não precisará mais ler estes dados, somente extraí-los do índice, o que é muito mais rápido.
Use inserções em massa quando necessário
Bancos NoSQL são otimizados para receberem uma grande quantidade de dados em alta velocidade, portanto, é uma boa prática aproveitar esse benefício.
Deve-se pensar nisso ao criar a regra de inserção de dados da aplicação de modo que esse recurso seja bem aproveitado.
Faça backups diários
Fazer backups é sempre importante, e, como o MongoDB lida com muitos dados, acidentes podem causar danos irreparáveis. A vantagem é que, como os documentos são geralmente leves, os backups são rápidos de serem realizados e recuperados, o que faz com que seja uma boa prática fazer backups diariamente.
Devemos sempre medir as necessidades do nosso negócio ao escolher qual tipo de banco de dados usar. O MongoDB veio como uma necessidade para suprir o grande fluxo de informações que veio com a Web 2.0, porém nem sempre é a melhor opção.
Algumas aplicações dependem de relacionamentos específicos que são mais consistentes em bancos SQL, aplicações mais simples ou legadas podem funcionar melhor com bancos tradicionais e uma migração pode se tornar um trabalho dispendioso ou desnecessário.
O ideal é que você faça suas próprias comparações e chegue a conclusão sobre qual usar.
Se você gostou desse conteúdo veja esse post sobre Comandos SQL e saiba como não se perder quando tiver que atualizar um banco relacional.