MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como criar um feed de arquivos de pessoas que um usuário está seguindo?


Este é o problema de fan-in vs. fan-out. Eu sugiro que você tente fan-out:

Mantenha um feed coleção para seus usuários. Quando um usuário carrega um documento, insira um novo item de feed em cada coleção de itens de feed de seus amigos. A coleção pode ficar assim:
{
    "_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 um índice composto {UserId, Timestamp} .

Essa abordagem exige muita escrita:se Jane tiver centenas de amigos, essas centenas de inserções levarão seu tempo. Por outro lado, o upload de um arquivo geralmente leva muito tempo, então a sobrecarga é insignificante e suas leituras serão ridiculamente simples.

Claro, isso pode ser mais otimizado com mais esforço, mas deve funcionar bem para um pouco de tráfego.