Come vengono implementate applicazioni come Twitter?
Domanda
Supponi che A segua 100 persone,
quindi saranno necessarie 100 istruzioni join,
che è orribile per il database credo.
O ci sono altri modi?
Soluzione
Perché dovresti aver bisogno di 100 join?
Avresti una semplice tabella " Segue " con il tuo ID e l'ID delle altre persone in esso ...
Quindi recuperi il " Tweets " unendosi a qualcosa del genere:
Select top 100
tweet.*
from
tweet
inner join
followers on follower.id = tweet.AuthorID
where
followers.masterID = yourID
Ora hai solo bisogno di una discreta memorizzazione nella cache e assicurati di utilizzare una query non bloccante e di avere tutte le informazioni ... (Beh, forse aggiungi alcuni userdata nel mix)
Modifica:
Tweet
ID - tweetid
AuthorID - ID of the poster
seguito
MasterID - (Basically your ID)
FollowerID - (ID of the person following you)
La tabella Followers
ha un ID composito basato su master e followerID
Dovrebbe avere 2 indici - uno su & Quot; masterID - followerID & Quot; e uno su " FollowerID e MasterID "
Altri suggerimenti
Il vero trucco è ridurre al minimo l'utilizzo del database (ad es. cache, cache, cache) e comprendere i modelli di utilizzo. Nel caso specifico di Twitter, usano un sacco di tecniche diverse dalla messa in coda, una quantità folle di cache in memoria e alcune ottimizzazioni del flusso di dati davvero intelligenti. Dai a Scalare Twitter: rendere Twitter il 10000 percento più veloce e l'altro articoli associati una lettura. La tua domanda su come implementare & Quot; seguendo & Quot; consiste nel denormalizzare i dati (precalcolare e gestire le tabelle dei join invece di eseguire i join al volo) o non usare affatto un database . < - Assicurati di leggere questo!