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

Qual è una buona struttura del documento MongoDB per interrogare in modo più efficiente i follower/followee degli utenti?

Questo è un classico problema di follower-followee e non c'è nessuno che risponde.. Dai un'occhiata a questo link:

mongo db design of following e feed, dove dovrei incorporare?

In realtà questa situazione si presta molto bene a uno schema relazionale, se MongoDB e SQL server fossero le uniche scelte che avevi. Ma questo è un tipo speciale di problema relazionale in cui hai una relazione bidirezionale. Questo può forse essere gestito meglio da un database grafico:

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

Il fatto è che puoi mantenere follower o followe in un documento utente, ma non entrambi, per evitare problemi di doppia eliminazione. Quindi, se devi attenerti a MongoDB, una via d'uscita potrebbe essere... (supponendo che le persone non seguano/non seguano nessuno quello frequentemente),

Conserva solo i followe nel documento, perché quando visualizzo il mio profilo, sarei interessato alle persone che seguo.. ​​(questo è il motivo per cui le ho seguite in primo luogo, giusto?)..E poi fai una query come:

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

Questo dirà chi mi sta seguendo (diciamo che il mio ID è 'user_id').

Un altro motivo per cui non suggerisco il contrario è che.. uno può seguire al massimo 30-40 persone, quindi un documento utente che memorizza 30-40 follower dovrebbe andare bene rispetto a un documento utente che memorizza migliaia di follower! Con l'approccio followee-in-document, ottieni documenti utente di dimensioni pressoché uniformi in tutto.. Nell'approccio follower-in-document, avrai alcuni documenti molto piccoli ma anche molto ingombranti. E a seconda della quantità di dati dei follower inseriti (se presenti, a parte follower_id), potresti voglio fare attenzione al limite delle dimensioni del documento.