@Gareth , hai diversi modi legittimi per farlo. Quindi la loro preoccupazione principale è come prevedi di eseguire query per i dati, (ad esempio:quali query devono essere veloci )
Ecco un paio di metodi.
Metodo n. 1:la raccolta dei "link"
Potresti creare una raccolta che contenga semplicemente mappature tra le raccolte.
Pro:
- Supporta gli aggiornamenti atomici in modo che i dati non vengano persi
Contro:
- Richiesta aggiuntiva quando si tenta di spostarsi tra le raccolte
Metodo n. 2:archivia copie di mappature più piccole in una raccolta più ampia
Ad esempio:hai milioni di Products
, ma solo un centinaio di Categories
. Quindi memorizzeresti le Categories
come matrice all'interno di ogni Product
.
Pro:
- Ingombro minimo
- Solo un aggiornamento
Contro:
- Domanda aggiuntiva se hai sbagliato strada
Metodo n. 3:archivia copie di tutte le mappature in entrambe le raccolte
(cosa stai suggerendo)
Pro:
- Accesso a una singola query per spostarsi tra una delle due raccolte
Contro:
- Indici potenzialmente grandi
- Richiede transazioni (?)
Parliamo di "transazioni di bisogni". Esistono diversi modi per effettuare transazioni e dipende molto dal tipo di sicurezza di cui hai bisogno.
Puoi sicuramente farlo. Dovrai chiederti, qual è la cosa peggiore che succede se solo uno dei salvataggi fallisce?
Metodo n. 4:accoda la modifica
Non so se hai mai lavorato con le code, ma se hai un margine di manovra puoi creare una coda semplice e avere diversi lavori che aggiornano le rispettive raccolte.
Questa è una soluzione molto più avanzata. Tenderei a scegliere il n. 2 o il n. 3.