Ich bin neu in diesem ganzen NOSQL-Zeug und war kürzlich fasziniert von mongoDB. Ich erstelle eine neue Website von Grund auf neu und habe mich für MONGODB / NORM (für C #) als meine einzige Datenbank entschieden. Ich habe viel darüber gelesen, wie Sie Ihre Dokumentmodelldatenbank richtig gestalten können, und ich denke, dass mein Entwurf größtenteils ziemlich gut funktioniert hat. Ich bin ungefähr 6 Monate in meiner neuen Site und sehe allmählich Probleme mit der Vervielfältigung / Synchronisierung von Daten, mit denen ich mich immer wieder befassen muss. Nach dem, was ich gelesen habe, wird dies im Dokumentmodell erwartet, und für die Leistung ist es sinnvoll. IE Sie kleben eingebettete Objekte in Ihr Dokument, damit es schnell gelesen werden kann - keine Verknüpfungen; Aber natürlich kann man nicht immer einbetten, also hat Mongodb dieses Konzept einer DbReference, das im Grunde analog zu einem Fremdschlüssel in relationalen DBs ist.
Hier ist ein Beispiel: Ich habe Benutzer und Ereignisse; Beide erhalten ihr eigenes Dokument. Benutzer nehmen an Veranstaltungen teil. Bei Veranstaltungen haben Benutzer Teilnehmer. Ich habe beschlossen, eine Liste von Ereignissen mit begrenzten Daten in die Benutzerobjekte einzubetten. Ich habe eine Liste von Benutzern auch als "Teilnehmer" in die Ereignisobjekte eingebettet. Das Problem hier ist jetzt, dass ich die Benutzer mit der Liste der Benutzer synchron halten muss, die auch in das Ereignisobjekt eingebettet ist. Während ich es lese, scheint dies der bevorzugte Ansatz und die NOSQL-Methode zu sein. Das Abrufen ist schnell, aber der Fallback ist, wenn ich das Hauptbenutzerdokument aktualisiere. Ich muss auch in die Ereignisobjekte gehen, möglicherweise alle Verweise auf diesen Benutzer finden und diese ebenfalls aktualisieren.
Die Frage, die ich habe, ist also, ob dies ein ziemlich häufiges Problem ist, mit dem sich die Leute befassen müssen. Wie viel muss dieses Problem passieren, bevor Sie sagen "Vielleicht passt die NOSQL-Strategie nicht zu dem, was ich hier versuche"? Wann wird der Leistungsvorteil, keine Verknüpfungen durchführen zu müssen, zu einem Nachteil, da es schwierig ist, Daten in eingebetteten Objekten synchron zu halten und dafür mehrere Lesevorgänge in der Datenbank durchzuführen?