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

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

Dies ist ein klassisches Follower-Followee-Problem und es gibt keine einzige Antwort darauf. Sehen Sie sich diesen Link an:

mongo db design of following und feeds, wo soll ich einbetten?

Eigentlich eignet sich diese Situation sehr gut für ein relationales Schema, wenn MongoDB und SQL Server die einzigen Möglichkeiten wären, die Sie hätten. Aber dies ist eine besondere Art von Beziehungsproblem, bei dem Sie eine wechselseitige Beziehung haben. Dies kann vielleicht besser durch eine Graph-Datenbank gehandhabt werden:

http://forum.kohanaframework.org/discussion/10130/followers-and-following-database-design-like-twitter/p1

Die Sache ist die, dass Sie entweder Follower oder Follower in einem Benutzerdokument behalten können, aber nicht beides, um doppelte Löschprobleme zu vermeiden. Wenn Sie sich also an MongoDB halten müssen, könnte ein Ausweg sein ... (vorausgesetzt, die Leute folgen niemandem dem häufig),

Behalte nur die Follower im Dokument, denn wenn ich mein Profil ansehe, würde ich mich für die Leute interessieren, denen ich folge.. (das ist der Grund, warum ich ihnen überhaupt gefolgt bin, Richtig?)..Und führen Sie dann eine Abfrage aus wie:

db.Users.find({ user_id : { $in : followees })

Dies wird sagen, wer mir alle folgt (sagen wir, meine ID ist 'user_id').

Ein weiterer Grund, warum ich das Gegenteil nicht vorschlage, ist, dass.. man darf höchstens 30-40 Personen folgen, also sollte ein Benutzerdokument, das 30-40 Follower speichert, im Gegensatz zu einem Benutzerdokument, das Tausende von Followern speichert, in Ordnung sein! Mit dem Followee-in-Document-Ansatz erhalten Sie durchgehend ungefähr gleich große Benutzerdokumente. Beim Follower-in-Document-Ansatz haben Sie einige sehr kleine, aber auch einige sehr umfangreiche Dokumente. Und abhängig von der Menge an Follower-Daten, die Sie eingeben (falls vorhanden, abgesehen von follower_id), könnten Sie auf die Begrenzung der Dokumentgröße achten möchten.