Non esiste un modo "giusto" per usare MongoDB, solo trade-off. Facciamo un semplice esempio:
Opzione 1: avere tutto in un documento e $push
pacchetti in un array
Opzione 2: crea un nuovo documento per ogni pacchetto. Ciascuno punta al proprio oggetto "padre".
I compromessi:
-
Durante la ricerca di un pacchetto, l'opzione 1 restituirà l'intero documento e non ti dirà dove si trova il pacchetto nell'array. L'opzione 2 restituirà il pacchetto specifico.
-
L'opzione 1 fallirà e morirà se hai troppi pacchetti (a causa del limite di 16 MB sulle dimensioni del documento)
-
L'opzione 1 è molto più veloce se si elencano sempre tutti i pacchetti per un oggetto specifico. L'opzione 2 richiede molti dischi cerca di caricare tutti i pacchetti. Sui moderni dischi rigidi, le ricerche disco sono 100 volte più lente delle letture sequenziali su disco.
-
L'opzione 2 richiede un po 'più di spazio su disco (perché tutti devono collegarsi al genitore, invece che implicitamente come nell'opzione 1).
-
L'opzione 2 ha un tempo di scrittura approssimativamente costante, ma l'opzione 1 avrà un tempo di scrittura variabile. Nell'opzione 1, si espande un documento esistente quando si aggiungono pacchetti. A volte non si adatta e deve essere spostato da qualche altra parte. Questo può rallentare il sistema. Ma se aggiungi costantemente pacchetti a un documento alla volta, probabilmente verrà spostato verso la fine, dove può espandersi senza essere spostato, quindi è leggermente migliore.
La regola generale è la seguente: presumere sempre che memorizzerai tutto in un documento finché non trovi un motivo per romperlo. Ma attenzione ai trade-off in ogni modo.