MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment créer un flux de fichiers à partir de personnes qu'un utilisateur suit ?

C'est le problème du fan-in vs. fan-out. Je vous suggère d'essayer la distribution :

Conserver un feed collecte pour vos utilisateurs. Lorsqu'un utilisateur télécharge un document, insérez un nouvel élément de fil dans chacune des collections d'éléments de fil de ses amis. La collection pourrait ressembler à ceci :

{
    "_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": ...
}

Utiliser un index composé {UserId, Timestamp} .

Cette approche est lourde en écriture :si Jane a des centaines d'amis, ces centaines d'insertions prendront leur temps. D'un autre côté, le téléchargement d'un fichier prend généralement beaucoup de temps de toute façon, donc la surcharge est négligeable et vos lectures seront ridiculement simples.

Bien sûr, cela peut être plus optimisé avec plus d'effort, mais cela devrait suffire pour un peu de trafic.