sql >> Databáze >  >> NoSQL >> MongoDB

Jak vytvořit zdroj souborů od lidí, které uživatel sleduje?

Toto je problém fan-in vs. fan-out. Navrhoval bych, abyste zkusili fan-out:

Udržujte feed kolekce pro vaše uživatele. Když uživatel nahraje dokument, vložte novou položku zdroje do každé kolekce položek zdroje jeho přátel. Sbírka může vypadat takto:

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

Použijte složený index {UserId, Timestamp} .

Tento přístup je náročný na psaní:Pokud má Jane stovky přátel, tyto stovky příloh zaberou čas. Na druhou stranu nahrání souboru obecně tak jako tak zabere spoustu času, takže režie je zanedbatelná a vaše čtení bude směšně jednoduché.

Samozřejmě to lze dále optimalizovat s větším úsilím, ale mělo by to fungovat dobře pro poměrně malý provoz.




  1. Jak `mongoose` zpracovává přidávání dokumentů, které mají POLE, která __NENÍ__ součástí schématu?

  2. Zpět Uvolněte se souhrnně v mongodb

  3. Změňte tvar všech dokumentů ve sbírce

  4. Agregační dotaz Mongodb k odečtení a seskupení kumulativní hodnoty