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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top