sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo crear un feed de archivos de personas a las que sigue un usuario?

Este es el problema de fan-in vs fan-out. Te sugiero que pruebes la distribución:

Mantener un feed colección para sus usuarios. Cuando un usuario carga un documento, inserte un nuevo elemento de fuente en la colección de elementos de fuente de cada uno de sus amigos. La colección podría verse así:

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

Use un índice compuesto {UserId, Timestamp} .

Este enfoque requiere mucha escritura:si Jane tiene cientos de amigos, estos cientos de inserciones tomarán su tiempo. Por otro lado, cargar un archivo generalmente lleva mucho tiempo de todos modos, por lo que la sobrecarga es insignificante y sus lecturas serán ridículamente simples.

Por supuesto, esto se puede optimizar aún más con más esfuerzo, pero debería funcionar bien para un poco de tráfico.