Was ist eine gute MongoDB-Dokumentstruktur für die effizienteste Abfrage von Benutzer-Followern / Followern?

Ich habe mich über die ideale Dokumentenstruktur für maximale Abfrageeffizienz in verschiedenen Situationen gewundert und es gibt eine, nach der ich fragen möchte. Ich weiß nicht genau, wie sich MongoDB in diesem speziellen Fall im Gedächtnis verhält. Lassen Sie mich Ihnen ein hypothetisches Szenario geben.

Stellen Sie sich ein Twitter-ähnliches System von Followern und Followern vor. Nach einem zugegebenermaßen flüchtigen Blick scheinen die Hauptoptionen zu sein:

In jedem Benutzerdokument ein "Follower" -Array, das Verweise auf alle Dokumente anderer Benutzer enthält, denen sie folgen. Die Empfänger werden gefunden, indem unser aktueller Benutzer im Array "user.followers" anderer Benutzer gefunden wird. Der Hauptnachteil scheint der potenzielle Abfrageaufwand der Followee-Suche zu sein. Bei einer Abfrage speziell für den Inhalt von "user.followers" greift MongoDB nur auf das erforderliche Feld in den Benutzerdokumenten zu, oder wird das gesamte Benutzerdokument gefunden und dann werden die erforderlichen Feldwerte von dort aus nachgeschlagen. Ist dies zwischengespeichert / so gespeichert, dass eine Abfrage über eine große Benutzerbasis deutlich mehr Speicherplatz benötigt?

In jedem Benutzerdokument werden sowohl "Follower" als auch "Follower" gespeichert, um einen schnelleren Zugriff auf die einzelnen Dokumente zu ermöglichen. Dies hat offensichtlich den Nachteil von doppelten Daten in dem Sinne, dass ein Eintrag für Benutzer A, der Benutzer B folgt, in beiden Benutzerdokumenten in dem jeweiligen Feld vorhanden ist und das Löschen von von eine übereinstimmende Löschung in dem anderen erfordert. Technisch könnte dies eine Verdoppelung der Anzahl potenzieller Fehlerpunkte für eine einfache Löschung in Betracht ziehen. Und leidet MongoDB immer noch unter dem, was ich als "Swiss Cheesing" seiner im Speicher abgelegten Daten beschrieben habe, wenn Löschvorgänge auftreten, und daher verdoppelt das Entfernen von 2 Feldern anstelle von 1 den Effekt dieses Speicherlochproblems?

Eine separate Sammlung zum Speichern der Follower von Benutzern, die in ähnlicher Weise wie die Benutzerdokumente in 1 abgefragt werden, mit der Ausnahme, dass offensichtlich nur auf Follower zugegriffen wird. Wenn die Benutzerdokumente also eine ganze Reihe anderer Daten enthalten, die für jeden Benutzer relevant sind, vermeiden wir dies Zugriff auf diese Daten. Dies scheint jedoch etwas relationales Datenbank-Feeling zu haben, und obwohl ich weiß, dass dies nicht immer nur prinzipiell ein schrecklicher Ansatz ist, ist einer der anderen genannten Ansätze (oder einer, über den ich nicht nachgedacht habe) unter Mongos Architektur I besser würde gerne lernen!

Wenn jemand irgendwelche Gedanken dazu hat oder mir mitteilen möchte, dass ich irgendwo eine sehr relevante und offensichtliche Dokumentseite verpasst habe, oder mir sogar sagen möchte, dass ich nur dumm bin (mit einer Erklärung, warum, bitte; )) Ich würde gerne von dir hören!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage