Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

As 4 principais razões pelas quais você deve usar o MongoDB

Lauren Schaefer9 min read • Published Feb 12, 2022 • Updated Sep 23, 2022
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Bem-vindo (ou bem-vindo de volta): à série SQL para MongoDB. No primeiro post desta série, eu mapeei termos e conceitos de SQL para o MongoDB.
Também apresentei você ao Ron. Vamos parar um momento e retornar ao Ron. Ron é bastante rígido em seus hábitos. Por exemplo, ele ama sua máquina de escrever. Não importa que os computadores sejam um milhão de vezes mais poderosos do que as máquinas de escrever. Até que alguém o convença do contrário, ele continuará com sua máquina de escrever.
Ron se senta em sua máquina de escrever e diz: “Vou digitar todas as palavras que conheço”
Talvez você não goste muito de máquinas de escrever. Mas talvez você goste de bancos de dados SQL. Você os usa há anos, aprendeu a fazê-los funcionarem bem o suficiente para você e sabe que, para aprender MongoDB, será necessário mudar sua mentalidade. O esforço realmente vale a pena?
Sim!
Nesta postagem, examinaremos os quatro principais motivos pelos quais você deve usar o MongoDB:
Este artigo é baseado em uma apresentação que fiz na MongoDB World e no MongoDB.local Houston chamada "Do SQL ao NoSQL: mudando sua mentalidade."
Se você preferir vídeos a artigos, confira a gravação. Os slides estão disponíveis aqui.

Dimensionar mais barato

Você pode dimensionar de forma mais barata com o MongoDB. Por quê?
Vamos começar falando sobre o dimensionamento de bancos de dados SQL. Normalmente, os bancos de dados SQL são dimensionados verticalmente - quando um banco de dados se torna muito grande para seu servidor, ele é migrado para um servidor maior.
Dimensionamento vertical migrando para servidores maiores
Dimensionamento vertical migrando para servidores maiores
Alguns problemas importantes surgem com o dimensionamento vertical:
  • Servidores grandes tendem a ser mais caros do que dois servidores menores com a mesma capacidade total.
  • Servidores grandes podem não estar disponíveis devido a limitações de custo, limitações do provedor de nuvem ou limitações tecnológicas (pode não existir um servidor do tamanho que você precisa).
  • A migração para um servidor maior pode exigir tempo de inatividade do aplicativo.
Ao usar o MongoDB, você tem a flexibilidade de dimensionar horizontalmente por meio da fragmentação. A fragmentação é um método para distribuição de dados entre vários servidores. Quando seu banco de dados exceder a capacidade do servidor atual, você poderá começar a fragmentá-lo e dividi-lo em dois servidores. À medida que seu banco de dados continua a crescer, você pode continuar adicionando mais servidores. A vantagem é que esses novos servidores não precisam ser grandes e caros – podem ser hardwares mais baratos e comuns. Além disso, nenhum tempo de inatividade é necessário.
Dimensionamento horizontal com a adição de mais servidores de commodities
Dimensionamento horizontal com a adição de mais servidores de commodities

Queries mais rápidas

Suas queries serão mais rápidas com o MongoDB. Vamos examinar o motivo.
Mesmo em nosso exemplo simples na publicação anterior em que modelamos os dados de Leslie no SQL, vimos que suas informações estavam distribuídas em três tabelas. Sempre que quisermos executar uma query das informações de Leslie, precisaremos unir três tabelas.
Nestas três tabelas pequenas, a união será muito rápida. No entanto, à medida que as tabelas crescem e nossas queries se tornam mais complexas, a união de tabelas se torna muito cara.
Representação da união de tabelas em um banco de dados SQL
Lembre-se da nossa regra de ouro ao modelar dados no MongoDB: os dados que são acessados juntos devem ser armazenados juntos. Quando você segue essa regra, a maioria das queries não exigirá que você junte nenhum dado.
Continuando com nosso exemplo anterior, se quisermos recuperar as informações de Leslie do MongoDB, podemos simplesmente consultar um único documento na coleção Users. Como resultado, nossa query será muito rápida.
À medida que nossos documentos e coleções aumentam, não precisamos nos preocupar com a lentidão das consultas, desde que usemos índices e continuemos a seguir nossa regra prática: os dados que são acessados juntos devem ser armazenados juntos.
Representação de uma query do MongoDB sem junções

Pivot mais fácil

Mudança de requisitos. Às vezes, as mudanças são simples e exigem apenas alguns ajustes na interface do usuário. Mas, às vezes, as alterações vão até o banco de dados.
Na postagem anterior desta série, descobrimos - depois de implementar nosso aplicativo - que precisávamos armazenar informações sobre a escola de Lauren. Vamos dar uma olhada nesse exemplo um pouco mais de perto.
Para adicionar uma nova coluna school em nosso banco de dados SQL, teremos de alterar a tabela Users. A execução do comandoAlter Table pode levar algumas horas, dependendo da quantidade de dados existentes na tabela. O desempenho do nosso aplicativo pode ser reduzido enquanto a tabela estiver sendo alterada, e talvez seja necessário programar um tempo de inatividade para o aplicativo.
Comando Alter Table
Agora vamos examinar como podemos fazer algo semelhante no MongoDB. Quando nossos requisitos mudam e precisamos começar a armazenar o nome da escola de um usuário em um documento User, podemos simplesmente começar a fazer isso. Podemos escolher se e quando atualizar os documentos existentes na coleção.
Se tivéssemos implementado a validação de esquema, teríamos a opção de aplicar a validação a todas as inserções e atualizações ou apenas a inserções e atualizações de documentos que já atendem aos requisitos de esquema. Também teríamos a opção de lançar um erro ou um aviso se uma regra de validação fosse violada.
Com o MongoDB, você pode alterar facilmente a forma dos seus dados à medida que o aplicativo evolui.
Altere a forma dos seus dados no MongoDB sem executar um comando Alter Table

Programe mais rápido

Para ser honesto com você, essa vantagem é uma das maiores surpresas para mim. Achei que não importava o que você usasse como banco de dados de back-end - o código que interage com ele seria basicamente o mesmo. Eu estava errado.
Quando percebi como é mais fácil codificar com o MongoDB.
Quando percebi como é mais fácil codificar com o MongoDB.
Os documentos do MongoDB são mapeados para estruturas de dados nas linguagens de programação mais populares. Parece uma coisa simples, mas faz uma diferença enorme ao gravar um código.
Um amigo me incentivou a testar isso, então eu testei. Implementei o código para recuperar e atualizar as informações do perfil do usuário. Meu código tem algumas simplificações para permitir que eu me concentre nas interações com o banco de dados em vez da interface do usuário. Também limitei as informações do perfil do usuário a apenas informações de contato e hobbies.
Abaixo está uma comparação da minha implementação usando MySQL e MongoDB.
Eu escrevi o código em Python, mas, não se preocupe se você não está familiarizado com Python, vou orientá-lo passo a passo. Os conceitos serão aplicáveis independentemente da linguagem de programação escolhida.

Conecte-se aos bancos de dados

Vamos começar com as coisas típicas do topo do arquivo. Importaremos o que precisamos, nos conectaremos ao banco de dados e declararemos nossas variáveis. Tentarei simplificar as coisas codificando o ID de usuário do usuário cujo perfil recuperaremos, em vez de extraí-lo dinamicamente do código frontend.
MySQL
1import mysql.connector
2
3# CONNECT TO THE DB
4mydb = mysql.connector.connect(
5 host="localhost",
6 user="root",
7 passwd="rootroot",
8 database="CityHall"
9)
10mycursor = mydb.cursor(dictionary=True)
11
12# THE ID OF THE USER WHOSE PROFILE WE WILL BE RETRIEVING AND UPDATING
13userId = 1
Passaremos a opção dictionary=True quando criarmos o cursor para que cada linha seja retornada como um dicionário.
MongoDB
1import pymongo
2from pymongo import MongoClient
3
4# CONNECT TO THE DB
5client = MongoClient()
6client = pymongo.MongoClient("mongodb+srv://root:rootroot@mycluster.mongodb.net/test?retryWrites=true&w=majority")
7db = client.CityHall
8
9# THE ID OF THE USER WHOSE PROFILE WE WILL BE RETRIEVING AND UPDATING
10userId = 1
Até agora, o código é praticamente o mesmo.

Obtenha as informações de perfil do usuário

Agora que temos as conexões do banco de dados prontas, vamos usá-las para recuperar as informações do perfil do usuário. Armazenaremos as informações de perfil em um Dicionário Python. Dicionários são uma estrutura de dados comum no Python e fornecem uma maneira fácil de trabalhar com seus dados.
Vamos começar implementando o código para o MySQL.
Como as informações do perfil do usuário estão espalhadas pela tabela Users e pela tabela Hobbies, precisaremos uni-las em nossa query. Podemos usar declarações preparadas para garantir que nossos dados permaneçam seguros.
MySQL
1sql = "SELECT * FROM Users LEFT JOIN Hobbies ON Users.ID = Hobbies.user_id WHERE Users.id=%s"
2values = (userId,)
3my cursor.execute(sql, values)
4user = mycursor.fetchone()
Quando executamos a query, um resultado é retornado para cada combinação de usuário/hobby. Quando cham amos fetchone(), obtemos um dicionário como o seguinte:
1{u'city': u'Pawnee', u'first_name': u'Leslie', u'last_name': u'Yepp', u'user_id': 1, u'school': None, u'longitude': -86.5366, u'cell': u'8125552344', u'latitude': 39.1703, u'hobby': u'scrapbooking', u'ID': 10}
Como juntamos as tabelas Users e Hobbies, temos um resultado para cada hobby que esse usuário tem. Para recuperar todos os hobbies, precisamos iterar o cursor. Anexaremos cada hobby a um novo array hobbies e, em seguida, adicionaremos o array hobbies ao nosso dicionário user.
MySQL
1hobbies = []
2if (user["hobby"]):
3 hobbies.append(user["hobby"])
4del user["hobby"]
5del user["ID"]
6for result in mycursor:
7 hobbies.append(result["hobby"])
8user["hobbies"] = hobbies
Agora vamos implementar essa mesma funcionalidade para o MongoDB.
Como armazenamos todas as informações do perfil do usuário no documento User, não precisamos fazer nenhuma junção. Podemos simplesmente recuperar um único documento em nossa coleção.
É aqui que entra a grande vantagem de os documentos do MongoDB mapearem estruturas de dados nas linguagens de programação mais populares. Não preciso fazer nenhum trabalho para colocar meus dados em um Dicionário Python fácil de trabalhar. O MongoDB me fornece automaticamente todos os resultados em um dicionário Python.
MongoDB
1user = db['Users'].find_one({"_id": userId})
E é isso, estamos prontos. O que nos levou 12 linhas para o MySQL, implementamos em 1 linha para MongoDB.
Nossos dicionários user agora são bem semelhantes em ambas as partes do código.
MySQL
1{
2 'city': 'Pawnee',
3 'first_name': 'Leslie',
4 'last_name': 'Yepp',
5 'school': None,
6 'cell': '8125552344',
7 'latitude': 39.1703,
8 'longitude': -86.5366,3
9 'hobbies': ['scrapbooking', 'eating waffles', 'working'],
10 'user_id': 1
11}
MongoDB
1{
2 'city': 'Pawnee',
3 'first_name': 'Leslie',
4 'last_name': 'Yepp',
5 'cell': '8125552344',
6 'location': [-86.536632, 39.170344],
7 'hobbies': ['scrapbooking', 'eating waffles', 'working'],
8 '_id': 1
9}
Agora que recuperamos as informações do perfil do usuário, provavelmente enviaremos essas informações para o código da interface do usuário de front-end.

Atualizar as informações de perfil do usuário

Quando Leslie visualiza as informações de seu perfil em nosso aplicativo, ela pode descobrir que precisa atualizá-las. O código da interface do usuário de front-end enviaria essas informações atualizadas em um dicionário Python para os arquivos Python que estamos escrevendo.
Para simular a atualização de Leslie de suas informações de perfil, atualizaremos manualmente o dicionário Python para MySQL e MongoDB.
MySQL
1user.update( {
2 "city": "Washington, DC",
3 "latitude": 38.897760,
4 "longitude": -77.036809,
5 "hobbies": ["scrapbooking", "eating waffles", "signing bills"]
6 } )
MongoDB
1user.update( {
2 "city": "Washington, DC",
3 "location": [-77.036809, 38.897760],
4 "hobbies": ["scrapbooking", "eating waffles", "signing bills"]
5 } )
Agora que nosso dicionário user está atualizado, vamos enviar as informações atualizadas para nossos bancos de dados.
Vamos começar com o MySQL. Primeiro, precisamos atualizar as informações que estão armazenadas na tabela Users.
MySQL
1sql = "UPDATE Users SET first_name=%s, last_name=%s, cell=%s, city=%s, latitude=%s, longitude=%s, school=%s WHERE (ID=%s)"
2values = (user["first_name"], user["last_name"], user["cell"], user["city"], user["latitude"], user["longitude"], user["school"], userId)
3mycursor.execute(sql, values)
4mydb.commit()
Depois, precisamos atualizar nossos hobbies. Para simplificar, excluiremos todos os hobbies existentes na tabela Hobbies para esse usuário e, em seguida, inseriremos os novos hobbies na tabela Hobbies.
MySQL
1sql = "DELETE FROM Hobbies WHERE user_id=%s"
2values = (userId,)
3mycursor.execute(sql, values)
4mydb.commit()
5
6if(len(user["hobbies"]) > 0):
7 sql = "INSERT INTO Hobbies (user_id, hobby) VALUES (%s, %s)"
8 values = []
9 for hobby in user["hobbies"]:
10 values.append((userId, hobby))
11 mycursor.executemany(sql,values)
12 mydb.commit()
Agora vamos atualizar as informações do perfil do usuário no MongoDB. Como as informações do perfil do usuário são armazenadas em um único documento, só precisamos fazer uma única atualização. Mais uma vez, nos beneficiaremos do mapeamento de documentos do MongoDB para estruturas de dados nas linguagens de programação mais populares. Podemos enviar nosso user Python quando chamarmos update_one(), o que simplifica significativamente nosso código.
MongoDB
1result = db['Users'].update_one({"_id": userId}, {"$set": user})
O que nos levou 15 linhas para MySQL, implementamos em 1 linha para MongoDB.

Resumo da programação mais rápida

Neste exemplo, escrevemos 27 linhas de código para interagir com nossos dados no MySQL e 2 linhas de código para interagir com nossos dados no MongoDB. Embora menos linhas de código nem sempre seja indicativo de código melhor, nesse caso, provavelmente podemos concordar que menos linhas de código levarão a uma manutenção mais fácil e menos bugs.
Os exemplos acima eram relativamente simples, com queries pequenas. Imagine como seria a diferença para queries maiores e mais complexas.
O mapeamento de documentos do MongoDB para estruturas de dados nas linguagens de programação mais populares pode ser uma grande vantagem em termos de tempo para gravar, depurar e manter o código.
O código acima foi escrito em Python e aproveitou o Driver Python MongoDB. Para obter uma lista completa de todas as linguagens de programação que têm drivers do MongoDB, acesse o Manual do MongoDB.
Se você quiser obter uma cópia do código dos exemplos acima, visite meu repositório no GitHub.

Embrulhar

Nesta publicação, examinamos as quatro principais razões pelas quais você deve usar o MongoDB:
Não se esqueça de conferir a última publicação desta série, que abordará as três principais coisas que você precisa saber ao mudar do SQL para o MongoDB.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Início rápido

PyMongoArrow: fazendo a ponte entre o MongoDB e seu aplicativo de análise de dados


Aug 01, 2024 | 7 min read
Tutorial

Aproveite o Atlas Vector Search com o HashiCorp Terraform: capacitando a pesquisa semântica em aplicativos modernos


May 02, 2024 | 4 min read
Início rápido

Início rápido: tipos de dados BSON - Decimal128


Sep 23, 2022 | 2 min read
Início rápido

Java – Criptografia no nível do campo do lado do cliente


Mar 01, 2024 | 14 min read
Sumário