Il mio obiettivo è quello di tenere traccia dei post popolari su diversi siti di blog basati sull'attività dei social network in qualsiasi momento. L'obiettivo non è semplicemente ottenere il più popolare ora, ma invece trovare post che sono popolari rispetto ad altri post sullo stesso blog. Ad esempio, seguo un blog di tecnologia, un blog di sport e un blog di gossip. Il blog tecnologico ottiene più lettori degli altri due blog, quindi nei numeri grezzi ogni post sul blog della tecnologia vedrà sempre le visualizzazioni dei numeri sugli altri due. Quindi diciamo che il post del blog tecnologico medio ottiene 500 Mi piace su Facebook e gli altri due ricevono una media di 50 Mi piace per post. Poi, quando c'è un post sul blog sportivo che ha 200 Mi piace e un post sul blog di gossip con 300 mentre i post del blog tecnologico hanno 500 mi piace voglio evidenziare i post sul blog di sport e pettegolezzi (più Mi piace rispetto al blog medio con più # di Mi piace ma solo nella media per il blog)
L'approccio che sto pensando di fare è creare una voce in un database per ogni post del blog. Ogni x minuti (diciamo ogni 15 minuti) controllerò quanti like / condivisioni / commenti hanno ricevuto una voce su tutti i social network (facebook, twitter, google +, linkeIn). Quindi nel tempo ci sarà una storia di Mi piace per ogni post del blog, cioè
post 1234
after 15 min: 10 fb likes, 4 tweets, 6 g+
after 30 min: 15 fb likes, 15 tweets, 10 g+
...
...
after 48 hours: 200 fb likes, 25 tweets, 15 g+
Tenendo una cronologia come questa per ogni post del blog, posso conoscere il numero medio di Mi piace / condivisioni / tweet in qualsiasi intervallo di tempo. Quindi, ad esempio, il numero medio di Mi piace per tutti i post del blog 48 ore dopo la pubblicazione è 50, e un particolare post ne ha 200 Posso contrassegnarlo come post popolare e metterlo in evidenza / evidenziarlo. Una considerazione nel design è di essere in grado di interrogare facilmente i valori (Mi piace / condivisioni) per uno specifico intervallo di tempo, ad esempio fb likes dopo 30 minuti o tweets dopo 24 ore per calcolare medie con cui confrontarsi (o le medie sono memorizzate nella propria tabella?)
Se questo approccio è difettoso o potrebbe migliorare, per favore fatemelo sapere, ma non è la mia domanda principale. La mia domanda principale è che cosa dovrebbe essere uno schema di database per la memorizzazione di queste informazioni?
Supponendo che l'approccio sopra sia preso, sto cercando di capire come sarebbe uno schema di database per la memorizzazione dei Mi piace nel tempo. Sono nuovo di zecca per i database, nel fare alcune letture di base vedo che è consigliabile creare un database 3NF. Ho trovato il seguente schema possibile.
Schema 1
DB Popular Posts
Table: Post
post_id ( primary key(pk) )
url
title
Table: Social Activity
activity_id (pk)
url (fk)
type (i.e. facebook,twitter,g+)
value
timestamp
Questo è stato il mio istinto iniziale (basato sulla mia conoscenza db molto limitata). Per quanto ho capito questo schema sarebbe 3NF? Ho cercato disegni di modelli di database simili e ho trovato questa domanda su stackoverflow, link . Lo scenario in questa domanda è simile (registrazione peso / altezza degli utenti straordinari). Prendendo la risposta accettata per quella domanda e applicandola al mio modello si ottiene qualcosa del tipo:
Schema 2 (come sopra, ma analizza l'attività sociale in 2 tabelle)
DB Popular Posts
Table: Post
post_id (pk)
url
title
Table: Social Measurement
measurement_id (pk)
post_id (fk)
timestamp
Table: Social stat
stat_id (pk)
measurement_id (fk)
type (i.e. facebook,twitter,g+)
value
Il vantaggio che vedo nello schema 2 è che probabilmente vorrò accedere a tutti i valori per un dato tempo, cioè quando effettui una misurazione a 30 minuti dopo la pubblicazione di un post, verificherò simultaneamente il numero di fb likes, le condivisioni fb, commenti fb, tweet, g +, linkedIn. Quindi con questo schema può essere più facile ottenere tutte le statistiche per un measurement_id corrispondente ad una certa ora, cioè tutte le statistiche sociali per il post 1234 alla volta x.
Un altro pensiero è che non ha senso confrontare il numero di Mi piace con il numero di tweet o di condivisioni g +, forse ha senso separare ogni misura sociale nella propria tabella?
Schema 3
DB Popular Posts
Table: Post
post_id (pk)
url
title
Table: fb_likes
fb_like_id (pk)
post_id (fk)
timestamp
value
Table: fb_shares
fb_shares_id (pk)
post_id (fk)
timestamp
value
Table: tweets
tweets__id (pk)
post_id (fk)
timestamp
value
Table: google_plus
google_plus_id (pk)
post_id (fk)
timestamp
value
Come puoi vedere, sono generalmente perso / incerto su quale approccio adottare.
Sono sicuro che questo tipico tipo di problema del database (memorizzazione delle misurazioni straordinarie, vale a dire la statistica della temperatura) che deve avere una soluzione comune. C'è un modello / modello di design per questo, ha un nome? Ho provato a cercare "raccolta periodica di dati del database" o "misurazioni di database nel tempo", ma non ho trovato nulla di specifico.
Quale sarebbe un modello appropriato per risolvere i bisogni di questo problema?