Domanda

Supponi che A segua 100 persone,

quindi saranno necessarie 100 istruzioni join,

che è orribile per il database credo.

O ci sono altri modi?

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top