sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur skapar man ett flöde med filer från personer som en användare följer?

Detta är problemet med fan-in vs. fan-out. Jag skulle föreslå att du provar fan-out:

Håll ett feed samling för dina användare. När en användare laddar upp ett dokument, infoga ett nytt flödesobjekt i var och en av hennes vänners flödesobjektsamling. Samlingen kan se ut så här:

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

Använd ett sammansatt index {UserId, Timestamp} .

Det här tillvägagångssättet är skrivtungt:Om Jane har hundratals vänner kommer dessa hundratals inlägg att ta sin tid. Å andra sidan tar det i allmänhet mycket tid att ladda upp en fil, så omkostnaderna är försumbara och dina läsningar blir löjligt enkla.

Naturligtvis kan detta optimeras ytterligare med mer ansträngning, men det borde fungera bra för en hel del trafik.




  1. Laravel Echo Server, Redis, Socket.IO:Kan inte få dem att fungera

  2. MongoDB-as-a-Service i ditt eget Amazon AWS-konto

  3. MongoDB:Dra komplett Key:Array Pair

  4. Får ett felmeddelande när du infogar i en meteorsamling