Grundsätzlich gibt es zwei Szenarien:frisch und veraltet .
Neue Daten
Das Speichern doppelter Daten ist einfach. Die Pflege der doppelten Daten ist der schwierige Teil. Am einfachsten ist es also, Wartungsarbeiten zu vermeiden, indem man von vornherein keine doppelten Daten speichert. Dies ist hauptsächlich nützlich, wenn Sie aktuelle Daten benötigen . Speichern Sie nur die Referenzen und fragen Sie die Sammlungen ab, wenn Sie Informationen abrufen müssen.
In diesem Szenario entsteht aufgrund der zusätzlichen Abfragen ein gewisser Mehraufwand. Die Alternative besteht darin, alle Speicherorte doppelter Daten zu verfolgen und alle Instanzen bei jeder Aktualisierung zu aktualisieren. Dies ist auch mit Overhead verbunden, insbesondere bei N-zu-M-Beziehungen wie der von Ihnen erwähnten. So oder so, Sie werden haben etwas Overhead, wenn Sie aktuelle Daten benötigen. Sie können nicht das Beste aus beiden Welten haben.
Veraltete Daten
Wenn Sie es sich leisten können, veraltete Daten zu haben, werden die Dinge viel einfacher. Um den Abfrageaufwand zu vermeiden, können Sie doppelte Daten speichern. Um zu vermeiden, doppelte Daten pflegen zu müssen, werden Sie keine doppelten Daten speichern. Zumindest nicht aktiv .
In diesem Szenario möchten Sie auch nur die Verweise zwischen Dokumenten speichern. Verwenden Sie dann einen regelmäßigen Map-Reduce-Job, um die doppelten Daten zu generieren. Sie können dann das einzelne Map-Reduce-Ergebnis abfragen, anstatt separate Sammlungen. Auf diese Weise vermeiden Sie den Abfrage-Overhead, müssen aber auch nicht nach Datenänderungen suchen.
Zusammenfassung
Speichern Sie nur Verweise auf andere Dokumente. Wenn Sie sich veraltete Daten leisten können, verwenden Sie regelmäßige Map-Reduce-Jobs zum Generieren doppelte Daten. Vermeiden Sie die Pflege doppelte Daten; es ist komplex und fehleranfällig.