Como aplicação como o twitter são implementadas?
Pergunta
Suponha que A segue 100 pessoa,
, em seguida, terá 100 juntar declaração,
que é horrível para banco de dados que eu penso.
Ou há outras maneiras?
Solução
Por que você precisa de 100 junta-se?
Você teria uma tabela simples "segue" com o seu ID ea ID outras pessoas nela ...
Em seguida, você recuperar os "tweets" juntando-se algo como isto:
Select top 100
tweet.*
from
tweet
inner join
followers on follower.id = tweet.AuthorID
where
followers.masterID = yourID
Agora você só precisa de um cache decente e certifique-se de usar uma consulta não bloqueio e você tem todas as informações ... (Bem, talvez adicionar algum userdata na mistura)
Editar:
Tweet
ID - tweetid
AuthorID - ID of the poster
Seguidores
MasterID - (Basically your ID)
FollowerID - (ID of the person following you)
A tabela Followers
tem um ID compósito à base de mestre e followerID
Ele deve ter 2 índices - um em "masterID - followerID" e um no "FollowerID e MasterID"
Outras dicas
O verdadeiro truque é minimizar o uso de banco de dados (por exemplo, cache, cache, cache) e compreender os padrões de uso. No caso específico do Twitter, eles usam um monte de diferentes técnicas de filas, uma quantidade insana de cache em memória, e alguns dados realmente inteligentes fluir otimizações. Dê Scaling Twitter: Fazendo Twitter 10000 por cento mais rápido eo outro artigos associados a ler. Sua pergunta sobre como implementar "seguinte" é desnormalizar os dados (precalculate e manter unir tabelas em vez de executar junta on the fly) ou não usam um banco de dados em todos os . Certifique-se de ler este