Ho un server di social network con un DB MySql. Voglio mostrare i feed degli utenti come fatto in Facebook. Esempio - UtenteX ora Amico con utenteY, utenteX ha fatto come su postX ecc.
Attualmente ho tabella: C1: UserId C2: LogType (ora amico, ha fatto come ecc.) C3: ObjectId (può essere userId o postId) - imposta in base al tipo di log.
Attualmente per ottenere tutti i registri correlati da mostrare all'utente faccio le seguenti domande: 1. Ottieni tutti gli utenti Amici userIds 2. Esegui una query su tutte le righe che C1 è in userIds (query completata) 3. Scansiona il DB e vedi - se LogType è uguale a DidLike, controlla se OwnerId del post è userId - se sì aggiungilo ai log.
E così via.
Ovvio che non è affatto efficiente.
Sto cercando un modo migliore. Pensavo di aver pensato: Crea una nuova tabella (oltre alla tabella Log) C1: UserId C2: LogId (dalla tabella Log) C3: ID utente di colui che ha eseguito l'azione Quando ha eseguito una query sui log: guarda nella tabella e ottieni Log correlati (da LogId) da LogTable.
Aggiornamento della tabella: ogni volta che l'utente esegue un'azione che dovrebbe essere nel registro: 1. Aggiungere la voce di registro a LogTable. 2. Scansionare il DB e vedere quali utenti sono interessati al Log (Chi sono i miei amici, Chi è il proprietario del post) e aggiungere voci correlate alla nuova tabella. (deve essere fatto in BG). 3. Se l'utente NON CONSENTE un altro utente, cerca nei file tutti i file dove C3 == ID utente NON CONSENTITO ed eliminali.
Qualche opinione? Altri suggerimenti?