Manipular dados duplicados
Nesta página
Ao incorporar dados relacionados em um único documento, você pode duplicar dados entre duas collections. A duplicação de dados permite que o seu aplicativo consulte informações relacionadas a várias entidades em uma única query, separando logicamente as entidades no seu modelo.
Sobre esta tarefa
Uma preocupação com a duplicação de dados é o aumento dos custos de armazenamento. No entanto, os benefícios da otimização dos padrões de acesso geralmente superam os possíveis aumentos de custos do armazenamento.
Antes de duplicar dados, considere os seguintes fatores:
Com que frequência os dados duplicados precisam ser atualizados. A atualização frequente de dados duplicados pode causar cargas de trabalho pesadas e problemas de desempenho. No entanto, a lógica extra necessária para lidar com atualizações pouco frequentes é menos dispendiosa do que a execução de junções (pesquisas) em operações de leitura.
O benefício em desempenho das leituras quando os dados estiverem duplicados. A duplicação de dados pode eliminar a necessidade de realizar junções em várias coleções, o que pode melhorar o desempenho do aplicativo.
Exemplo: dados duplicados em um esquema de comércio eletrônico
O exemplo a seguir mostra como duplicar dados em um esquema de aplicativo de comércio eletrônico para melhorar o acesso aos dados e o desempenho.
Passos
Preencher o banco de dados
Crie as seguintes coleções no banco de dados eCommerce
:
Nome da collection | Descrição | Documento de amostra | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Armazena informações do cliente, como nome, e-mail e número de telefone. |
| ||||||||||||||||||||||||||
| Armazena informações do produto, como preço, tamanho e material. |
| ||||||||||||||||||||||||||
| Armazena informações do pedido, como data e preço total. Os documentos na coleção |
|
As seguintes propriedades da coleção products
são duplicadas na coleção orders
:
productId
product
price
size
Benefícios da duplicação de dados
Quando o aplicação exibe informações do pedido, ele exibe os itens de linha do pedido correspondente. Se o pedido e as informações do produto fossem armazenados em collections separadas, o aplicação precisaria executar um $lookup
para unir dados de duas collections. As operações de pesquisa geralmente são caras e têm desempenho ruim.
A razão para duplicar informações de produto em vez de incorporar apenas itens de linha na coleção orders
é que o aplicativo só precisa de um subconjunto de informações de produto ao exibir pedidos. Ao incorporar apenas os campos obrigatórios, o aplicativo pode armazenar detalhes adicionais do produto sem adicionar inchaço desnecessário à coleção orders
.
Exemplo: dados duplicados para avaliações de produtos
O exemplo a seguir usa opadrão de subconjunto para otimizar padrões de acesso para uma loja online.
Considere um aplicativo em que, quando o usuário visualiza um produto, são exibidas as informações do produto e as cinco avaliações mais recentes. As avaliações são armazenadas em uma coleção products
e em uma coleção reviews
.
Quando uma nova revisão é escrita, ocorrem as seguintes gravações:
A avaliação é inserida na collection
reviews
.A array de avaliações recentes na coleção
products
é atualizada com$pop
e$push
.
Passos
Preencher o banco de dados
Crie as seguintes coleções no banco de dados productsAndReviews
:
Nome da collection | Descrição | Documento de amostra | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| armazena informações do produto. Os documentos da coleção |
| |||||||||||||||||||||
| Armazena todas as avaliações de produtos (não apenas avaliações recentes). Os documentos na coleção |
|
Benefícios da duplicação de dados
O aplicativo só precisa fazer uma chamada para o banco de dados para retornar todas as informações que precisa exibir. Se os dados fossem armazenados inteiramente em coleções separadas, o aplicativo precisaria unir dados da coleção products
e reviews
, o que poderia causar problemas de desempenho.
As avaliações raramente são atualizadas, portanto, não é caro armazenar dados duplicados e manter os dados consistentes entre as coleções não é um desafio.
Saiba mais
Para saber como manter dados duplicados consistentes, consulte Consistência de dados.