MongoDB para desenvolvedores: Uma ferramenta de alta performance
Certamente você já deve ter escutado algo sobre essa ferramenta que está presente no dia a dia de muitos Devs, correto? A seguir, darei um breve resumo sobre MongoDB, abordando também a linguagem C#. Vamos?!
Primeiramente, quando falamos em MongoDB, temos que pensar diretamente que ele não é um banco relacional, por isso, utilizamos a sigla NoSQL(Not Only SQL, no português, Não Somente Relacional)
Os Bancos NoSQL possuem mecanismos diferentes dos relacionais, que utilizam relações tabulares.
Alguns exemplos de bancos SQL ou bancos relacionais: Oracle, SQLServer, MySQL e PostgreSQL.
Exemplos de bancos que não armazenam dados em tabelas e são chamados de NoSQL: MongoDB, Cassandra DB, Redis e Neo4J.
Classes ou Tipos de Bancos NoSQL
- Chave/Valor (Key-Value ) - Redis
- Colunas (Colums Family) - CassandraDB
- Documento (Document Model) - MongoDB
- Grafos (Graph) - Neo4J
Por que usar o NoSQL? Quais suas vantagens?
A seguir, vou listar algumas vantagens em utilizar um banco NoSQL no dia a dia de desenvolvimento.
Performance
Para começar, Nós utilizamos os bancos de dados para armazenar os dados da aplicação, certo? eventualmente iremos manipular e obter os dados da aplicação, é aí que entra a performance, a maneira em que os bancos NoSQL trabalham os dados, eles se tornam mais performáticos em relação aos bancos SQL, levando em consideração a maneira de se trabalhar com esse banco.
Escalabilidade
É de extrema importância que consigamos escalar a nossa aplicação. O banco acompanha essa escalabilidade, pois com ele nós temos a oportunidade de escalar. Os bancos NoSQL trabalham muito com a escalabilidade em cluster, isto é, capacidade do sistema distribuído. O modo com que os bancos SQL trabalham em cluster são diferentes dos NoSQL.
Flexibilidade
Os bancos NoSQL te dão uma maior flexibilidade na hora de modelar os dados, fazendo com que não haja tantas restrições, entretanto, isso não quer dizer que devemos ir contra as regras, por isso é importante sempre ficarmos atentos, pois com grandes poderes, vem grandes responsabilidades.
Também é importante falarmos na agilidade do desenvolvimento, pois não há necessidade de definir as tabelas e toda a questão que está envolvida nos bancos SQL.
Por que e quando usar NoSQL?
Em quais casos devemos usar o NoSQL e por quê? Veja abaixo:
- Aplicações que mudam constantemente.
- Quando se tem menor necessidade de uma modelagem pré-definida, o modelo e o banco vão acompanhar a mudança.
- Não há necessidade de transações, de separação das documentações, pode ser colocado tudo dentro de uma mesma estrutura.
- Suporta alto volume de leitura/escrita.
MongoDB
Agora que sabemos o que é NoSQL e como funciona, vamos entrar mais afundo no MongoDB.
O MongoDB é um Document Model, mas também podemos trabalhar com Multi-Model. Ele também é Open Source, e multiplataforma(possibilitando a sua utilidade nos SO). Ele possui a capacidade de armazenar e retornar os dados em formato JSON, entretanto, também armazena dados em formato BSON(Binary Json).
Modelagem de Dados no MongoDB
Na imagem acima, começando pela Base de Dados, podemos ver que no MongoDB também é chamado assim, já a tabela, onde estão armazenados todos os dados é chamada de Collection (Coleção). O registro, que é o equivalente a uma linha da tabela no banco relacional, é chamado de Documento, e fica dentro da Collection. A coluna é chamada de Atributo.
Devemos sempre considerar o uso dos dados pela aplicação (consultas, atualizações e processamento). Ao contrário do “mundo relacional”, ao qual temos que pré-definir para criar um banco, uma tabela, antes de inserir os dados, nas coleções do MongoDB não exigem que seus documentos sejam pré-definidos, porém isso não anula o fato de que nós devemos tratar isso na aplicação. Nesse caso, tem a opção de declarar Schema Validations. Com ele conseguimos criar regras, assim, quando houver alguma alteração em um documento, terá uma validação prévia.
Aplicação com .NET e CRUD com MongoDB
A seguir, irei mostrar de maneira resumida, um projeto de uma API para manter restaurantes e avaliações, utilizando .Net e MongoDB.
Exemplificando
Nas imagens abaixo, onde mostro parte da camada de uma API, Temos:
- Modelei o domínio(Domain), ao qual temos as regras de validação/negócio da aplicação.
- A Controller, onde estão os Endpoints e o modelo de input/output da API.
- Temos o Banco com os Schemas e os Repositórios, representando o Banco de Dados, fazendo o Mapping(mapeamento) de um para o outro (da Controller para o modelo e do modelo para Banco).
- E para o gerenciamento do MongoDB, utilizei o Robo 3T.
Camadas
Conexão com o MongoDB
Testando a API
Robo 3T
A seguir, vou mostrar o CRUD com MongoDB, mas não irei entrar detalhadamente no código, somente funcionando. As requisições foram feitas pelo Postman.
Para buscar todos os restaurantes
Rota usando método GET: https://localhost:5001/restaurante/todos
Robo 3T
Buscar restaurante por Id
Rota usando método GET: https://localhost:5001/restaurante/624e0bd91d08c5566d67956b
Postman
Alterar restaurante
Rota usando método PUT: https://localhost:5001/restaurante
Postman
Robo 3T
Buscar restaurantes por nome
Rota usando método GET: https://localhost:5001/restaurante?nome=taverna
Postman
Incluir avaliação para um restaurante
Rota usando método PATCH: https://localhost:5001/restaurante/624e5a796a70c78de540716a/avaliar
Postman
Robo 3T
Buscar restaurante melhor avaliado
Rota usando o método GET: https://localhost:5001/restaurante/top1
Postman
Robo 3T
Remover Restaurante
Rota usando método DELETE: https://localhost:5001/restaurante/624e0bd91d08c5566d67956b
Postman
Links úteis para estudo:
MongoDB: A Plataforma De Aplicação De Dados | MongoDB
MongoDB para Desenvolvedores .NET | Udemy
Esse foi o resumo sobre o MongoDB. Agradeço pelo tempo, e espero ter ajudado de alguma maneira. É compartilhando conhecimento que aprendemos, e fico feliz em fazer isso. Até uma próxima e bons estudos. Enjoy!