@Gareth , você tem várias maneiras legítimas de fazer isso. Portanto, a principal preocupação é como você planeja consultar os dados (ou seja:quais consultas precisam ser rápidas )
Aqui estão alguns métodos.
Método nº 1:a coleção de "links"
Você pode criar uma coleção que simplesmente contenha mapeamentos entre as coleções.
Prós:
- Suporta atualizações atômicas para que os dados não sejam perdidos
Contras:
- Consulta extra ao tentar mover entre coleções
Método nº 2:armazene cópias de mapeamentos menores em uma coleção maior
Por exemplo:você tem milhões de
Products
, mas apenas uma centena de Categories
. Então você armazenaria as Categories
como uma matriz dentro de cada Product
. Prós:
- A menor pegada
- Só precisa de uma atualização
Contras:
- Consulta extra se você seguir o "caminho errado"
Método nº 3:armazene cópias de todos os mapeamentos em ambas as coleções
(o que você está sugerindo)
Prós:
- Acesso de consulta única para mover entre uma coleção
Contras:
- Índices potencialmente grandes
- Precisa de transações (?)
Vamos falar sobre "necessidades de transações". Existem várias maneiras de fazer transações e isso realmente depende do tipo de segurança que você precisa.
Você definitivamente pode fazer isso. Você terá que se perguntar, qual é a pior coisa que acontece se apenas um dos salvamentos falhar?
Método nº 4:enfileirar a mudança
Não sei se você já trabalhou com filas, mas se tiver alguma margem de manobra você pode construir uma fila simples e ter trabalhos diferentes que atualizem suas respectivas coleções.
Esta é uma solução muito mais avançada. Eu tenderia a ir com #2 ou #3.