Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Reforçar a consistência de dados com a incorporação

Nesta página

  • Sobre esta tarefa
  • Antes de começar
  • Passos
  • Resultados
  • Próximos passos
  • Saiba mais

Se seu esquema armazenar os mesmos dados em várias coleções, você poderá incorporar dados relacionados para remover a duplicação. O esquema atualizado e desnormalizado mantém os dados consistentes ao manter os valores dos dados em um único local.

A incorporação de dados relacionados simplifica seu esquema e garante que o usuário sempre leia os dados mais atuais. No entanto, a incorporação pode não ser a melhor opção para representar relações complexas, por exemplo, relações muitos-para-muitos.

Como incorporar dados relacionados de forma otimizada depende das queries executadas pelo seu aplicativo. Ao incorporar dados em uma única coleção, considere os índices que permitem queries de desempenho e estruturam seu esquema para permitir índices lógicos eficientes.

Para comparar os benefícios da incorporação de documentos e referências, consulte Dados incorporados versus referências.

Analise os diferentes métodos para forçar a consistência dos dados para garantir que a incorporação seja a melhor abordagem para seu aplicativo. Para saber mais, consulte Consistência de dados.

Atualizar a forma como os dados são armazenados em seu banco de dados pode impactar os índices e as consultas existentes. Ao atualizar seu esquema, atualize também os índices e as consultas do seu aplicativo para contabilizar as alterações do esquema.

O exemplo a seguir impõe consistência de dados em um aplicativo de e-commerce. No esquema inicial, as informações do produto são duplicadas na collection products e sellers . O campo sellerId na collection products é uma referência à collection sellers e vincula os dados entre si.

// products collection
[
{
_id: 111,
sellerId: 456,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
_id: 222,
sellerId: 456,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
_id: 333,
sellerId: 456,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
// sellers collection
[
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30
},
{
id: 222,
name: "t-shirt",
price: 10
},
{
id: 333
name: "vest",
price: 20
}
]
}
]

Para desnormalizar o esquema e forçar a consistência, incorpore as informações do produto dentro da coleção sellers :

db.sellers.insertOne(
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
id: 222,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
id: 333,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
}
)

O esquema atualizado retorna todas as informações do produto quando um usuário faz uma query a um vendedor específico. O esquema atualizado não requer lógica ou manutenção adicionais para manter os dados consistentes, pois os dados são desnormalizados em uma única coleção.

Depois de reestruturar o esquema, você pode criar índices para oferecer suporte a queries comuns. Por exemplo, se os usuários costumam consultar produtos por cor, você pode criar um índice no campo products.color :

db.sellers.createIndex( { "products.color": 1 } )

Voltar

Usar transações