Seu código não me diz muito; Acho que seria útil se você pudesse apresentar sua estrutura de dados em JSON/SQL simples.
De qualquer forma, eu serializaria o fluxo de cada usuário para o MongoDB. Eu não armazenaria o HTML no banco de dados por vários motivos (pelo menos não nesse nível do software); em vez disso, você deve salvar os dados relevantes em uma coleção (possivelmente polimórfica). Buscar o feed de notícias é muito fácil então, a indexação é direta, etc. A estrutura da visão essencialmente não mudaria. Se mais tarde você quiser alterar o HTML, isso também é fácil.
A desvantagem é que isso duplicará muitos dados. Se as pessoas podem ter muitos seguidores, isso pode se tornar um problema. Usar matrizes de IDs de usuário em vez de um único ID de usuário pode ajudar (se as informações forem as mesmas para todos os seguidores), mas também é limitado.
Para problemas de associação muito grandes, há apenas armazenamento em cache. Do jeito que eu entendo, a mágica tanto no facebook quanto no twitter é que eles não atingem o banco de dados com muita frequência e mantêm muitos dados na RAM. Se você está associando bilhões de itens, fazer isso é um desafio mesmo na RAM.
As atualizações devem ser escritas continuamente em vez de de hora em hora. Suponha que você tenha muito tráfego e a atualização de hora em hora leve 30 minutos. Agora, o pior caso é um 90 min. atraso. Se você processar as alterações just-in-time, poderá reduzir isso para provavelmente 5 minutos.
Você terá que lançar suposições em algum momento, usar cache e algumas heurísticas. Alguns exemplos:
- Quanto mais recente for um tweet, mais tráfego ele verá. Ele tem uma chance maior de ser retuitado e é visto com muito mais frequência. Mantenha-o na RAM.
- Sua página de visão geral da linha do tempo do Facebook de 1991 provavelmente não mudará diariamente, então esta é uma candidata para cache de saída de longo prazo.
- A atividade atual do Facebook provavelmente sofrerá muitas gravações. O cache de saída não ajudará muito aqui. Novamente, o objeto deve ser mantido na RAM.