A Voyage AI se une ao MongoDB para impulsionar aplicativos de AI mais precisos e confiáveis no Atlas.

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 .

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

Lauren Schaefer9 min read • Published Feb 12, 2022 • Updated Sep 23, 2022
Facebook Icontwitter iconlinkedin icon
Classifique este artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Bem-vindo (ou bem-vindo de volta! ) à série SQL para MongoDB. Na primeira publicação desta série,mapeei termos e conceitos de SQL para 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 sits at his typewriter and says 'I'm gonna type every word I know'
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.
Vertical scaling by migrating to larger servers
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 de fragmentação. A fragmentação é um método para distribuir dados em vários servidores. Quando seu banco de dados excede a capacidade do servidor atual, você pode começar a fragmentá-lo e dividi-lo em dois servidores. À medida que seu banco de dados continua crescendo, você pode continuar adicionando mais servidores. A vantagem é que esses novos servidores não precisam ser máquinas grandes e caras — eles podem ser hardwares mais baratos e comuns. Além disso, nenhum tempo de inatividade é necessário.
Horizonal scaling by adding more commodity servers
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 postagem 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 fazer uma query para as 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.
Representation of joining tables in a SQL database
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 fazer query em um único documento na coleção Users. Assim, 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.
Representation of a MongoDB query with no joins

Pivot mais fácil

Mudança de requisitos. Às vezes, as alterações são simples e exigem apenas alguns ajustes na interface do usuário. Mas, às vezes, as alterações se estendem até o banco de dados.
Na publicação 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 neste 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.
Alter Table command
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 às inserções e atualizações em documentos que já atendem aos requisitos do esquema. Nós 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 de seus dados à medida que seu aplicativo evolui.
Change the shape of your data in MongoDB without executing an Alter Table command

Programe mais rápido

Para ser sincero, essa vantagem é uma das maiores surpresas para mim. Achei que não importasse o que fosse usado como banco de dados de back-end: o código que interage com ele seria basicamente o mesmo. Eu estava errado.
MFW I realized how much easier it is to code with 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 o MySQL e o 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 nossas conexões de banco de dados prontas, vamos usá-las para recuperar as informações do nosso perfil de usuário. Armazenaremos as informações de perfil em um dicionário Python. Os dicionários são uma estrutura de dados comum em Python e oferecem 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 sejam um sinal de um código melhor, neste 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 foram 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 conhecidas pode ser uma grande vantagem em termos de tempo para escrever, 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 nos exemplos acima, acesse meu repositório do 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.

Facebook Icontwitter iconlinkedin icon
Classifique este artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Construindo com padrões: o padrão Subset


Sep 23, 2022 | 3 min read
Tutorial

Teste e empacotamento de uma biblioteca Python


Jan 13, 2025 | 8 min read
Artigo

Funções de janela e coleções de séries temporais


Aug 13, 2024 | 7 min read
exemplo de código

Crie uma ferramenta de linha de comando com Swift e MongoDB


Sep 11, 2024 | 13 min read