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

3 coisas que você deve saber ao migrar do SQL para o MongoDB

Lauren Schaefer6 min read • Published Feb 14, 2022 • Updated Oct 01, 2024
SQLMongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Bem-vindo à última postagem da minha série sobre como mudar de SQL para MongoDB. Na primeira postagem, mapeei termos e conceitos de SQL para MongoDB. Na segunda postagem, abordei as quatro principais razões pelas quais você deve usar o MongoDB.
Agora que entendemos a terminologia e por que vale a pena mudar sua mentalidade no MongoDB, vamos falar sobre três maneiras principais de mudar sua mentalidade.
Seu primeiro instinto pode ser o de converter as colunas e linhas existentes em campos e documentos e manter as formas antigas de modelagem de dados. Verificamos que as pessoas que tentam usar o MongoDB da mesma forma que usam um relational database lutam e, às vezes, falham.
Ron joga computador no lixo
Não queremos que isso aconteça com você.
Vamos discutir três maneiras principais de mudar sua mentalidade ao mudar do SQL para 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.

Abrace a diversidade de documentos

Como vimos na primeira publicação desta série quando modelamos documentos para leslie, ron e lauron, nem todos os documentos em uma collection precisam ter os mesmos campos.
Usuários
1{
2 "_id": 1,
3 "first_name": "Leslie",
4 "last_name": "Yepp",
5 "cell": "8125552344",
6 "city": "Pawnee",
7 "location": [ -86.536632, 39.170344 ],
8 "hobbies": ["scrapbooking", "eating waffles", "working"],
9 "jobHistory": [
10 {
11 "title": "Deputy Director",
12 "yearStarted": 2004
13 },
14 {
15 "title": "City Councillor",
16 "yearStarted": 2012
17 },
18 {
19 "title": "Director, National Parks Service, Midwest Branch",
20 "yearStarted": 2014
21 }
22 ]
23},
24
25{
26 "_id": 2,
27 "first_name": "Ron",
28 "last_name": "Swandaughter",
29 "cell": "8125559347",
30 "city": "Pawnee",
31 "hobbies": ["woodworking", "fishing"],
32 "jobHistory": [
33 {
34 "title": "Director",
35 "yearStarted": 2002
36 },
37 {
38 "title": "CEO, Kinda Good Building Company",
39 "yearStarted": 2014
40 },
41 {
42 "title": "Superintendent, Pawnee National Park",
43 "yearStarted": 2018
44 }
45 ]
46},
47
48{
49 "_id": 3,
50 "first_name": "Lauren",
51 "last_name": "Burhug",
52 "city": "Pawnee",
53 "hobbies": ["soccer"],
54 "school": "Pawnee Elementary"
55}
Para aqueles de nós com experiência em SQL, isso vai se parecer desconforme e provavelmente um pouco estranho no início. Prometo que vai ficar tudo bem. Abrace a diversidade de documentos. Isso nos dá muita flexibilidade e poder para modelar nossos dados.
Na verdade, o MongoDB tem um padrão de modelagem de dados especificamente para quando seus documentos não têm os mesmos campos. É chamado de Padrão Polimórfico. Usamos o padrão polimórfico quando os documentos em uma coleção são de estruturas semelhantes, mas não idênticas.
Vamos dar uma olhada em um exemplo baseado no Padrão Polimórfico. Digamos que decidimos manter uma lista dos seguidores de mídia social de cada usuário dentro de cada documentoUser . Lauren e Leslie não têm muitos seguidores, então poderíamos facilmente listar seus seguidores em seus documentos. Por exemplo, o documento de Lauren pode ser parecido com isto:
1{
2 "_id": 3,
3 "first_name": "Lauren",
4 "last_name": "Burhug",
5 "city": "Pawnee",
6 "hobbies": ["soccer"],
7 "school": "Pawnee Elementary",
8 "followers": [
9 "Brandon",
10 "Wesley",
11 "Ciara",
12 ...
13 ]
14}
Essa abordagem provavelmente funcionaria para a maioria dos nossos usuários. No entanto, desde que Ron criou uma assento que apareceu na popular Bloosh Store, Ron tem milhões de membros. Se tentarmos listar todos os seus membros em seu document modelUser, ele poderá exceder o limite de tamanho do documento16 megabyte. Coloca-se a questão: queremos otimizar nosso document model para o caso de uso típico em que um usuário tem algumas centenas de membros ou para o caso de uso fora do comum em que um usuário tem milhões de membros?
Podemos utilizar o Padrão Outlier para resolver este problema. O Padrão Outlier nos permite modelar nossos dados para o caso de uso típico, mas ainda lidar com casos de uso outliers.
Podemos começar a modelar o documento do Ron como o da Lauren e incluir uma lista de seguidores. Quando começarmos a nos aproximar do limite de tamanho do documento, podemos adicionar um novo campohas_extrasao documento do Ron. (O campo pode ter o nome que quisermos).
1{
2 "_id": 2,
3 "first_name": "Ron",
4 "last_name": "Swandaughter",
5 "cell": "8125559347",
6 "city": "Pawnee",
7 "hobbies": ["woodworking", "fishing"],
8 "jobHistory": [
9 {
10 "title": "Director",
11 "yearStarted": 2002
12 },
13 ...
14 ],
15 "followers": [
16 "Leslie",
17 "Donna",
18 "Tom"
19 ...
20 ],
21 "has_extras": true
22}
Em seguida, podemos criar um novo documento no qual armazenaremos o restante dos seguidores de Ron.
1{
2 "_id": 2.1,
3 "followers": [
4 "Jerry",
5 "Ann",
6 "Ben"
7 ...
8 ],
9 "is_overflow": true
10}
Se Ron continuar a ganhar mais seguidores, poderíamos criar outro documento de estouro para ele.
O melhor do padrão Outlier é que estamos otimizando para o caso de uso típico, mas temos a flexibilidade de lidar com outliers.
Então, abrace a variedade de documentos. Resista ao impulso de forçar todos os seus documentos a terem estruturas idênticas só porque é o que você sempre fez.
Para obter mais informações sobre os padrões de design de modelagem de dados do MongoDB , consulte Construindo com padrões: um resumo e o curso gratuito da MongoDB University Caminho de modelagem de MongoDBdo MongoDB.

Dados que são acessados juntos devem ser armazenados juntos

Se você tem experiência com bancos de dados SQL, alguém provavelmente enfiou na sua cabeça que você deve normalizar seus dados. A normalização é considerada boa porque evita a duplicação de dados. Vamos dar um passo para trás e examinar a razão para a normalização do banco de dados.
Quando os bancos de dados relacionais se tornaram populares, o espaço em disco era extremamente caro. Do ponto de vista financeiro, fazia sentido normalizar os dados e economizar espaço em disco. Dê uma olhada no gráfico abaixo que mostra o custo por megabyte ao longo do tempo.
O custo baixou drasticamente. Nossos telefones, tablets, laptops e pen drives têm mais capacidade de armazenamento hoje do que há cinco ou dez anos por uma fração do custo. Quando foi a última vez que você excluiu uma imagem? Não me recordo quando o foi. Eu mantenho até as fotos realmente terrivelmente feias. E atualmente faço backup de todas as minhas fotos em dois discos rígidos externos e vários serviços de nuvem. O armazenamento é tão barato.
O armazenamento se tornou tão barato que vimos uma mudança no custo do desenvolvimento de software. Há trinta ou quarenta anos, o armazenamento era um custo enorme no desenvolvimento de software e os desenvolvedores eram relativamente baratos. Hoje, os custos se inverteram: o armazenamento é um custo pequeno do desenvolvimento de software e os desenvolvedores são caros.
Em vez de otimizar o armazenamento, precisamos otimizar o tempo e a produtividade dos desenvolvedores.
Como desenvolvedor, curto essa mudança. Quero poder me concentrar na implementação da lógica de negócios e iterar rapidamente. Essas são as coisas que importam para os negócios e que impulsionam as carreiras dos desenvolvedores. Não gostaria de ser prejudicado por especificações de armazenamento de dados.
Pense no exemplo da postagem anterior em que codifiquei a recuperação e a atualização das informações de perfil de um usuário. Mesmo nesse exemplo simples, conseguiu escrever menos linhas de código e mover-se mais rapidamente quando usei o MongoDB.
Portanto, otimize seu modelo de dados para a produtividade do desenvolvedor e a otimização de queries. resistir à tentação de normalizar seus dados por normalizar seus dados.
Os dados acessados juntos devem ser armazenados juntos. Se você acabar repetindo dados em seu banco de dados, tudo bem, especialmente se você não atualizará os dados com muita frequência.

Tenha cuidado com transações

Discutimos em uma publicação anterior que o MongoDB suporta transações. A equipe de engenharia do MongoDB fez um trabalho surpreendente na implementação de transações. Eles funcionam tão bem!
Mas aqui está a coisa. Depender de transações é um mau cheiro de design.
Ben fica impactado com o fedor da Fragrância de Tom.
Por quê? Isso baseia-se em nossos dois primeiros pontos nesta seção.
Primeiro, nem todos os documentos precisam ter os mesmos campos. Talvez você esteja dividindo os dados entre várias collections porque nem todos têm a mesma estrutura. Se esse for o único motivo pelo qual você separou os dados, provavelmente poderá reuni-los novamente em uma única collection.
Em segundo lugar, os dados acessados juntos devem ser armazenados juntos. Se você estiver seguindo esse princípio, não precisará usar transações. Alguns casos de uso exigem transações. A maioria não. Se você se encontrar usando transações com frequência, dê uma olhada em seu modelo de dados e considere se precisa reestrutura-lo.
Para obter mais informações sobre transações e quando elas devem ser usadas, consulte o whitepaper MongoDB MongoDB Multi-Document ACID Transactions.

Embrulhar

Hoje, discutimos as três coisas que você precisa saber ao mudar do SQL para o MongoDB:
Espero que você aproveite o MongoDB! Se você quiser entrar e começar a programar, meus membros de equipe e eu escrevemos Tutoriais de início rápido para várias linguagens de programação. Também recomendamos os cursos gratuitos da MongoDB University.
Em resumo, não seja como Ron. (Quero dizer, não seja como ele neste caso em particular, porque Ron é demais.)
Ron joga computador no lixo
Mude sua mentalidade e aproveite todo o valor do MongoDB.
Ron dança alegremente com um pequeno chapéu preto preso à cabeça

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Enriquecimento de documentos e atualizações de esquemas


Aug 13, 2024 | 2 min read
Tutorial

Armazenamento de objetos e arquivos grandes no MongoDB


May 13, 2022 | 1 min read
Tutorial

Introdução à paginação de dados com o Quarkus e o MongoDB: um tutorial abrangente


Apr 25, 2024 | 7 min read
Artigo

Estruturando dados com Serde em Rust


Apr 23, 2024 | 5 min read
Sumário
  • Abrace a diversidade de documentos
  • Dados que são acessados juntos devem ser armazenados juntos
  • Tenha cuidado com transações