Ci sono fondamentalmente due scenari:fresco e obsoleto .
Dati aggiornati
La memorizzazione di dati duplicati è facile. Mantenere i dati duplicati è la parte difficile. Quindi la cosa più semplice da fare è evitare la manutenzione, semplicemente non archiviando dati duplicati per cominciare. Ciò è utile principalmente se hai bisogno di dati aggiornati . Archivia i riferimenti e interroga le raccolte solo quando è necessario recuperare le informazioni.
In questo scenario, avrai un sovraccarico dovuto alle query aggiuntive. L'alternativa è tenere traccia di tutte le posizioni dei dati duplicati e aggiornare tutte le istanze a ogni aggiornamento. Ciò comporta anche un sovraccarico, specialmente nelle relazioni N-to-M come quella che hai menzionato. Quindi, in ogni caso, farai avere un po' di sovraccarico, se hai bisogno di nuovi dati. Non puoi avere il meglio di entrambi i mondi.
Dati obsoleti
Se puoi permetterti di avere dati obsoleti, le cose diventano molto più semplici. Per evitare il sovraccarico delle query, puoi archiviare dati duplicati. Per evitare di dover mantenere dati duplicati, non memorizzerai dati duplicati. Almeno non attivamente .
In questo scenario vorrai anche memorizzare solo i riferimenti tra documenti. Quindi utilizzare un lavoro periodico di riduzione della mappa per generare i dati duplicati. È quindi possibile eseguire query sul singolo risultato di riduzione della mappa, anziché su raccolte separate. In questo modo eviti il sovraccarico della query, ma non devi nemmeno dare la caccia alle modifiche ai dati.
Riepilogo
Memorizza solo riferimenti ad altri documenti. Se puoi permetterti dati obsoleti, usa i lavori periodici di riduzione della mappa per generare dati duplicati. Evita di mantenere dati duplicati; è complesso e soggetto a errori.