@Gareth , vous avez plusieurs façons légitimes de le faire. Leur principale préoccupation est donc de savoir comment vous prévoyez d'interroger les données (c'est-à-dire :quelles requêtes doivent être rapides )
Voici quelques méthodes.
Méthode n°1 :la collecte des "liens"
Vous pouvez créer une collection qui contient simplement des correspondances entre les collections.
Avantages :
- Prend en charge les mises à jour atomiques afin que les données ne soient pas perdues
Inconvénients :
- Requête supplémentaire lors de la tentative de déplacement entre les collections
Méthode n° 2 :stocker des copies de mappages plus petits dans une collection plus grande
Par exemple :vous avez des millions de Products
, mais seulement une centaine de Categories
. Ensuite, vous stockeriez les Categories
sous forme de tableau à l'intérieur de chaque Product
.
Avantages :
- Encombrement réduit
- Une seule mise à jour nécessaire
Inconvénients :
- Requête supplémentaire si vous vous trompez de chemin
Méthode n° 3 :stocker des copies de tous les mappages dans les deux collections
(ce que vous suggérez)
Avantages :
- Accès à requête unique pour passer d'une collection à l'autre
Inconvénients :
- Index potentiellement volumineux
- Nécessite des transactions (?)
Parlons des "besoins de transactions". Il existe plusieurs façons d'effectuer des transactions et cela dépend vraiment du type de sécurité dont vous avez besoin.
Vous pouvez certainement le faire. Vous devrez vous demander quel est le pire qui se passe si une seule des sauvegardes échoue ?
Méthode n° 4 :mettre la modification en file d'attente
Je ne sais pas si vous avez déjà travaillé avec des files d'attente, mais si vous avez une marge de manœuvre, vous pouvez créer une file d'attente simple et avoir différents travaux qui mettent à jour leurs collections respectives.
C'est une solution beaucoup plus avancée. J'aurais tendance à choisir le n° 2 ou le n° 3.