Unire le attività degli utenti in un unico stream con una rappresentazione comune

0

Il mio sito web di social network attualmente ha

  • thread e post sul forum
  • galleria di immagini
  • album sui profili degli utenti
  • discussioni di gruppo
  • Annunci

Vorrei creare un "flusso" di attività. Sarebbe basato su relazioni di amicizia o come abbonamento. Una volta che sei un amico con un altro membro o ti iscrivi al proprio account, tutte le attività di questo membro verranno visualizzate nel tuo stream.

Ci sono un paio di problemi con questo. Deve essere un problema abbastanza comune, suppongo, anche se la maggior parte delle app si occupa solo di un tipo di dati (immagini, post del forum, ...).

  1. Le informazioni attualmente sono memorizzate in tabelle MySQL separate. C'è una tabella per i caricamenti nelle foto dell'album (e una tabella correlata sugli album), uno per i thread, uno per i post, ecc. Avrei bisogno di interrogare tutte le attività di ogni utente a cui un iscritto è iscritto. Ho provato a creare una VISTA con UNION, come menzionato qui . Ma questo creerà una query enorme e il tempo di caricamento della pagina sarà insufficiente per supportare questa funzionalità. Qual è il modo migliore e più efficace per unire tutte queste attività di un utente?

  2. Da una prospettiva di progettazione grafica, qual è il modo migliore per unire questi diversi set di dati in una rappresentazione comune? Le immagini sono ovviamente rappresentate al meglio con una miniatura. Potrei mostrarli in una galleria in stile pinterest. I post del forum, d'altra parte, possono contenere solo testo. Ciò interromperà il layout.

posta reggie 28.01.2015 - 11:59
fonte

1 risposta

1

Per il lato dei dati di questo. Dovrai decidere se utilizzare un database relazionale? Alcune altre varianti di database potrebbero essere più adatte.

Se si sceglie di utilizzare un database relazionale, è possibile utilizzare le seguenti tabelle:

  1. Una tabella che modella la dimensione temporale del flusso di attività, ad es .:

    <activity_id, user_id, timestamp>

  2. Una tabella che contiene tombe / frammenti da mostrare come sommario nella sequenza temporale / flusso di attività. Utilizzo di BLOB o riferimenti al file system per archiviare i tumbnails. Checkout la domanda - Memorizzazione di documenti come BLOB in un database - Qualsiasi svantaggi? su Stackoverflow. La tabella dovrebbe essere:

    <activity_id, mime_type, summary_blob>

    Il tipo mime è usato per interpretare e rendere il summary_blob. Permette di supportare un insieme ampio ed estensibile di tipi di attività e di archiviarli tutti nella stessa tabella.

  3. Una tabella contenente le attività completo (ad esempio, i messaggi testuali, immagini full size, video, ecc) come chiazze o come riferimenti di sistema di file, cioè:.

    <activity_id, mime_type, full_blob>

Sono disponibili le seguenti considerazioni e opzioni:

  • Combina la tabella timestamp con la tabella summary_blob . La soluzione proposta ha queste come tabelle separate per consentire altre relazioni oltre al flusso di attività temporali (ad esempio, attività per argomento, conversazioni tra persone e attività che si collegano esplicitamente ad altri). Ma se vuoi solo flussi di attività basati sul tempo, le tabelle timestamp e summary_blob possono essere combinate in un'unica tabella.

  • Le tabelle riepilogo e full_blob sono separate per evitare di caricare full_blob in memoria quando è richiesto solo il riepilogo. Se usi le risorse del filesystem per full_blob s, queste tabelle possono essere combinate.

In alternativa è possibile utilizzare una tabella del flusso di attività con tabelle separate per ciascun tipo di attività facendo riferimento alle chiavi del flusso di attività. Potrebbe essere simile a quello attuale che non si sta verificando nella soluzione dei requisiti, a seconda dell'attuale implementazione. Anche in questo caso è possibile utilizzare i riepiloghi per caricare il caricamento. Acquista domanda oop - Database SQL Progettazione per rappresentare OO gerarchia di classe su stackoverflow. Ad esempio:

Activitystream table: <activity_id, activity_type, user_id, timestamp>
Image uploads table: <activity_id, image_data>
Text posts table: <activity_id, post>

Qui devi ancora cercare tra tutte le tabelle per creare il flusso di attività, ma solo nella tabella activitystream devi cercare tra i timestamp, nelle altre tabelle puoi scegliere i record rilevanti per chiave. Non provare a unire tutte le tabelle, ma consenti al routing di rendering delle immagini di utilizzare le tabelle upload di immagini , lasciare che il visualizzatore di messaggi di testo utilizzi la tabella messaggi di testo , ecc.

    
risposta data 28.01.2015 - 16:21
fonte

Leggi altre domande sui tag