sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvad er en god MongoDB-dokumentstruktur til den mest effektive forespørgsel til brugerens følgere/følgere?

Dette er et klassisk følger-følger problem, og der er ingen svar på det.. Tjek dette link:

mongo db design af følgende og feeds, hvor skal jeg indlejre?

Faktisk egner denne situation sig meget godt til et relationelt skema, hvis MongoDB og SQL server var de eneste valg, du havde. Men dette er en speciel type relationsproblem, hvor du har et tovejsforhold. Dette kan måske bedre håndteres af en grafdatabase:

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

Sagen er, at du enten kan beholde følgere eller følgere i et brugerdokument, men ikke begge dele, for at undgå problemer med dobbelt sletning. Så hvis du skal holde dig til MongoDB, kunne en udvej være ..(forudsat at folk ikke følger/ikke følger nogen der ofte),

Behold kun følgerne i dokumentet, for når jeg ser min profil, ville jeg være interesseret i de personer, jeg følger.. (det er grunden til, at jeg fulgte dem i første omgang, ikke?)..Og foretag derefter en forespørgsel som:

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

Dette vil fortælle, hvem der alle følger mig (sig, at mit id er 'user_id').

En anden grund til, at jeg ikke foreslår den anden vej rundt, er, at... man må højst følge 30-40 personer, så brugerdokumenter, der gemmer 30-40 følgere, burde være i orden i forhold til et brugerdokument, der gemmer tusindvis af følgere! Med followee-in-document tilgangen får du nogenlunde lige størrelse brugerdokumenter hele vejen igennem.. I followee-in-document tilgangen vil du også have nogle meget små, men nogle meget omfangsrige dokumenter. Og afhængigt af mængden af ​​følgerdata, du indsætter (hvis nogen, bortset fra follower_id), kan ønsker at være forsigtig med dokumentstørrelsesgrænsen.



  1. Mongodb gruppe og projektoperatører

  2. Hvad er fordelen ved at bruge et ObjectId i stedet for en almindelig streng?

  3. Hvordan gendannes redis-data fra snapshot (rdb-fil) kopieret fra en anden maskine?

  4. Forsøger at starte redis og resque scheduler inden for en rake-opgave