Comment les applications comme Twitter sont-elles mises en œuvre
Question
Supposons que A suive 100 personnes,
aura alors besoin de 100 instructions de jointure,
qui est horrible pour la base de données, je pense.
Ou y a-t-il d'autres moyens?
La solution
Pourquoi auriez-vous besoin de 100 jointures?
Vous auriez un tableau simple & "Suit <>>"; avec votre identifiant et l'identifiant des autres personnes dedans ...
Ensuite, vous récupérez les " Tweets & "; en rejoignant quelque chose comme ceci:
Select top 100
tweet.*
from
tweet
inner join
followers on follower.id = tweet.AuthorID
where
followers.masterID = yourID
Maintenant, vous avez juste besoin d'une mise en cache décente et assurez-vous que vous utilisez une requête non verrouillable et que vous avez toutes les informations ... (eh bien, ajoutez peut-être des données utilisateur dans le mélange)
Modifier:
tweet
ID - tweetid
AuthorID - ID of the poster
Abonnés
MasterID - (Basically your ID)
FollowerID - (ID of the person following you)
La table Followers
a un ID composite basé sur maître et followerID
Il devrait avoir 2 index - un sur & "; MasterID - followerID &"; et un sur & "; FollowerID et MasterID &";
Autres conseils
Le vrai truc consiste à minimiser l’utilisation de votre base de données (cache, cache, cache, par exemple) et à comprendre les modèles d’utilisation. Dans le cas spécifique de Twitter, ils utilisent diverses techniques de mise en file d'attente, une quantité insensée de mémoire cache en mémoire et des optimisations vraiment intelligentes des flux de données. Donnez à la mise à l'échelle de Twitter: rendre Twitter 10000% plus rapide et l'autre articles associés à lire. Votre question sur la manière dont vous implémentez & Quot; après & Quot; dénormaliser les données (précalculer et maintenir les tables de jointure au lieu d’effectuer des jointures à la volée) ou n'utilisez pas de base de données . < - Assurez-vous de lire ceci!