Sto sviluppando un'applicazione mobile Android che potenzialmente ha un sacco di utenti (diciamo circa 1 milione). Questi utenti possono seguire altri utenti (come Twitter). L'app sincronizza i dati dell'utente tramite un backend remoto REST. I dati dell'utente stesso sono mantenuti in un database orientato ai documenti (nel mio caso è un MongoDB).MongoDB: come progettare follower in stile twitter/seguendo il modello di relazione in MongoDB?
Attualmente mi chiedo del modo migliore di progettare il modello utente, inclusi i suoi follower e le seguenti relazioni. Il primo pensiero è stato quello di incorporare le relazioni all'interno del documento dell'utente.
Esempio documento utente:
{
"_id":"50fd6bb530043e3c569af288",
"name":"Marsha Garcia",
"follower"["50fd6bb530043e3c569af287","50fd6bb530043e3c569af289","50fd6bb530043e3c569af28c"],
"following":["70fd6bb530043e3c569af289","10fd6bb530043e3c569af222","89fd6bb530043e3c569af45o"]
}
La cosa positiva è che il seguito/seguenti rapporti sono già uniti con l'utente. Tuttavia diciamo che un utente segue circa 100.000 o più altri utenti. Quindi la dimensione del documento diventerà molto grande. Se carico questo oggetto utente tramite il servizio REST nella mia app mobile, potrebbe volerci un po 'di tempo. Inoltre, nel peggiore dei casi il documento dell'utente potrebbe superare il limite del documento di MongoDb 16MB.
Quindi il mio secondo pensiero era di modellare il seguace e seguire le relazioni in un modo più classico: un documento in più contenente le seguenti relazioni di ciascun utente.
'relazione utente' documentoEsempio:
La cosa positiva è che la dimensione di ciascun documento utente rimarrà costante. Il rovescio della medaglia è che con molti utenti e con le seguenti relazioni posso facilmente ottenere milioni di voci nella mia raccolta 'user relationship' di MongoDB. Ovviamente imposterò un indice sui campi ma non sono abbastanza sicuro che questa soluzione si riduca molto bene per quanto riguarda il caso d'uso di un utente di app che chiede i suoi/suoi attuali follower.
Apprezzerei qualsiasi pensiero, esperienza sul mio problema di modellazione. Forse qualcuno ha anche un approccio di soluzione migliore.
Thx molto in anticipo.
Su un altro pensiero, come hai intenzione di visualizzare 1 milione di follower su un dispositivo mobile? –
Ovviamente non ho intenzione di mostrarli tutti in una volta.Probabilmente userò un meccanismo di impaginazione. per esempio. caricare i primi 50 follower. Se l'utente vuole vedere più carico prossimo 50 seguaci e così via. – user1425635