Votre code ne me dit pas grand-chose; Je pense qu'il serait utile que vous puissiez présenter votre structure de données en JSON / SQL.
Quoi qu'il en soit, je sérialiserais le flux de chaque utilisateur vers MongoDB. Je ne stockerais pas le HTML dans la base de données pour diverses raisons (du moins pas à ce niveau du logiciel) ; à la place, vous devez enregistrer les données pertinentes dans une collection (éventuellement polymorphe). La récupération du fil d'actualité est alors très simple, l'indexation est simple, etc. La structure de la vue ne changerait essentiellement pas. Si vous souhaitez modifier ultérieurement le code HTML, c'est également facile.
L'inconvénient est que cela dupliquera beaucoup de données. Si les gens peuvent avoir beaucoup de followers, cela peut devenir un problème. L'utilisation de tableaux d'ID utilisateur au lieu d'un seul ID utilisateur peut être utile (si les informations sont les mêmes pour tous les abonnés), mais c'est également limité.
Pour les très grands problèmes d'association, il n'y a que la mise en cache. D'après ce que je comprends, la magie de Facebook et de Twitter est qu'ils n'utilisent pas la base de données très souvent et conservent beaucoup de données dans la RAM. Si vous associez des milliards d'éléments, cela représente un défi, même en RAM.
Les mises à jour doivent être écrites en continu plutôt que sur une base horaire. Supposons que vous ayez beaucoup de trafic et que la mise à jour horaire prenne 30 minutes. Maintenant, le pire des cas est un 90 min. retard. Si vous traitez les modifications juste-à-temps, vous pouvez probablement réduire ce délai à 5 minutes.
Vous devrez émettre des hypothèses à un moment donné, utiliser la mise en cache et certaines heuristiques. Quelques exemples :
- Plus un tweet est récent, plus il verra de trafic. Il a plus de chances d'être retweeté et il est vu beaucoup plus souvent. Gardez-le dans la RAM.
- Votre page de présentation de la chronologie Facebook de 1991 ne changera probablement pas quotidiennement, c'est donc un candidat pour la mise en cache de sortie à long terme.
- L'activité actuelle sur Facebook est susceptible de subir de nombreuses écritures. La mise en cache de sortie n'aidera pas beaucoup ici. Encore une fois, l'objet doit être conservé dans la RAM.