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?

Était-ce utile?

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top