Ich bin neu in diesem ganzen NOSQL-Bereich und bin vor kurzem von mongoDB fasziniert worden. Ich erstelle eine neue Website von Grund auf neu und habe mich entschieden, MONGODB/NORM (für C#) als meine einzige Datenbank zu verwenden. Ich habe viel darüber gelesen, wie man seine Dokumentenmodell-Datenbank richtig gestaltet und denke, dass ich mein Design größtenteils gut ausgearbeitet habe. Ich bin ungefähr 6 Monate in meine neue Website und fange an, Probleme mit Daten-Duplizierung/Synchronisierung zu sehen, mit denen ich immer wieder umgehen muss. Aus dem, was ich gelesen habe, ist das in dem Dokumentenmodell zu erwarten und für die Leistung macht es Sinn. D.h. man fügt eingebettete Objekte in sein Dokument ein, damit es schnell zu lesen ist - keine Joins; aber natürlich kann man nicht immer einbetten, also hat mongodb dieses Konzept einer DbReference, das im Wesentlichen analog zu einem Fremdschlüssel in relationalen Datenbanken ist.
Also hier ist ein Beispiel: Ich habe Benutzer und Veranstaltungen; beide bekommen ihr eigenes Dokument, Benutzer nehmen an Veranstaltungen teil, Veranstaltungen haben Benutzer als Teilnehmer. Ich habe mich entschieden, eine Liste von Veranstaltungen mit begrenzten Daten in die Benutzerobjekte einzubetten. Ich habe auch eine Liste von Benutzern in die Veranstaltungsobjekte als ihre "Teilnehmer" eingebettet. Das Problem hier ist, dass ich jetzt die Benutzer mit der Liste von Benutzern, die auch im Veranstaltungsobjekt eingebettet ist, synchron halten muss. So wie ich es lese, scheint dies der bevorzugte Ansatz zu sein und die NOSQL-Art, Dinge zu tun. Das Abrufen ist schnell, aber der Nachteil ist, wenn ich das Hauptbenutzerdokument aktualisiere, muss ich auch in die Veranstaltungsobjekte gehen, möglicherweise alle Verweise auf diesen Benutzer finden und das ebenfalls aktualisieren.
Die Frage, die ich habe, ist, ob dies ein ziemlich häufiges Problem ist, mit dem die Leute umgehen müssen? Wie oft muss dieses Problem auftreten, bevor man sagt "vielleicht passt die NOSQL-Strategie nicht zu dem, was ich hier versuche zu tun"? Wann verwandelt sich der Leistungsvorteil, keine Joins machen zu müssen, in einen Nachteil, weil es schwierig wird, Daten in eingebetteten Objekten synchron zu halten und mehrere Lesevorgänge in die Datenbank durchzuführen, um dies zu erreichen?
0 Stimmen
Hier ist eine weitere Frage zur Datenredundanz in MongoDB. Meine Antwort dort schlägt vor, das Map-Reduce-Ergebnis als Zwischenspeicher zu verwenden, anstelle einer separaten Zwischenspeicherschicht. Dies kann nützlich sein, wenn Sie mit veralteten Daten leben können. Beachten Sie, dass die Aktualität der Daten davon abhängt, wie oft Sie den Map-Reduce-Job ausführen, z. B. alle 15 Minuten.
0 Stimmen
DBReference ist böse, es nimmt einen Großteil des NoSQL-Charmes weg
0 Stimmen
Es sind bereits zehn Jahre vergangen und diese Frage bleibt weiterhin bestehen :)