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

Come creare un feed di file dalle persone che un utente sta seguendo?

Questo è il problema tra fan-in e fan-out. Ti suggerirei di provare il fan-out:

Conserva un feed raccolta per i tuoi utenti. Quando un utente carica un documento, inserisci un nuovo elemento del feed in ciascuna delle raccolte di elementi del feed dei suoi amici. La collezione potrebbe assomigliare a questa:

{
    "_id": (some id)
    "UserId": (id of the user who 'owns', i.e. reads this feed)
    "FriendId": (if of the friend who posted the file)
    "FriendName": "John Doe" (name of the fried, denormalized)
    "Timestamp": ...
}

Utilizza un indice composto {UserId, Timestamp} .

Questo approccio è pesante per la scrittura:se Jane ha centinaia di amici, queste centinaia di inserti richiederanno il loro tempo. D'altra parte, il caricamento di un file generalmente richiede comunque molto tempo, quindi l'overhead è trascurabile e le tue letture saranno ridicolmente semplici.

Naturalmente, questo può essere ulteriormente ottimizzato con uno sforzo maggiore, ma dovrebbe andare bene per un bel po' di traffico.