MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo-DB-Design von Followern und Feeds, wo soll ich sie einbetten?

Im Allgemeinen ist es aus mehreren Gründen keine gute Idee, Following/Followed-by-Beziehungen in Benutzerdokumente einzubetten:

(1) Es gibt eine maximale Dokumentgröße von 16 MB, und es ist plausibel, dass ein beliebter Benutzer einer gut abonnierten Website möglicherweise Hunderttausende von Followern hat, was sich der maximalen Dokumentgröße annähert,

(2) Follower-Beziehungen ändern sich häufig, und wenn ein Benutzer viele Follower gewinnt, führt dies zu einem wiederholten Dokumentenwachstum, wenn Sie Follower einbetten. Häufiges Dokumentwachstum wird die Leistung von MongoDB erheblich beeinträchtigen und sollte daher vermieden werden (gelegentliches Dokumentwachstum, insbesondere wenn Dokumente dazu neigen, eine stabile Endgröße zu erreichen, ist weniger ein Leistungseinbuße).

Also, ja, es ist am besten, die Beziehung „Folge/Gefolgt von“ in eine separate Sammlung von Datensätzen aufzuteilen, die jeweils zwei Felder haben, z. " Abfrage) und oid (für die Abfrage "Wer folgt mir?"). Jede einzelne Zustandsänderung wird durch das Hinzufügen oder Entfernen eines einzelnen Dokuments modelliert. Wenn Sie jedoch auch Dinge wie die Anzahl der Follower anzeigen, sollten Sie wahrscheinlich separate Zähler führen, die Sie nach dem Einfügen/Löschen von Kanten aktualisieren.

(Dies setzt natürlich voraus, dass Ihre Geschäftsanforderungen Ihnen eine gewisse Flexibilität bei den Konsistenzdetails ermöglichen:Wenn Ihr Anzeigecode einem Benutzer mitteilt, dass er 304 Follower hat, und dann mit der Aufzählung fortfährt, wird nur der pingeligste Benutzer überprüfen, ob die Follower aufgezählt sind Zählen Sie bis zu 304. Wenn geschäftliche Anforderungen absolute Konsistenz erfordern, benötigen Sie entweder eine Datenbank, die Transaktionen für Sie isoliert, oder Sie müssen das Zählen selbst durchführen, um alle Benutzeridentitäten anzuzeigen.)