@Gareth , tienes varias formas legítimas de hacerlo. Por lo tanto, la principal preocupación es cómo planea consultar los datos (es decir, qué consultas deben ser rápidas )
Aquí hay un par de métodos.
Método #1:la colección de "enlaces"
Podría crear una colección que simplemente contenga asignaciones entre las colecciones.
Pros:
- Admite actualizaciones atómicas para que los datos no se pierdan
Desventajas:
- Consulta adicional al intentar moverse entre colecciones
Método n.° 2:almacenar copias de asignaciones más pequeñas en una colección más grande
Por ejemplo:tienes millones de Products
, pero solo cien Categories
. Entonces almacenarías las Categories
como una matriz dentro de cada Product
.
Pros:
- Huella más pequeña
- Solo necesita una actualización
Desventajas:
- Consulta adicional si va por el "camino equivocado"
Método #3:almacenar copias de todas las asignaciones en ambas colecciones
(lo que estás sugiriendo)
Pros:
- Acceso de consulta única para moverse entre cualquiera de las colecciones
Desventajas:
- Índices potencialmente grandes
- Necesita transacciones (?)
Hablemos de "transacciones de necesidades". Hay varias formas de realizar transacciones y realmente depende del tipo de seguridad que necesite.
Definitivamente puedes hacer esto. Tendrás que preguntarte, ¿qué es lo peor que sucede si solo falla uno de los guardados?
Método #4:poner en cola el cambio
No sé si alguna vez has trabajado con colas, pero si tienes un margen de maniobra puedes construir una cola simple y tener diferentes trabajos que actualicen sus respectivas colecciones.
Esta es una solución mucho más avanzada. Me inclinaría por el n.° 2 o el n.° 3.