Domanda

sto costruendo un sito web con contenuti generati dagli utenti. Nella home page voglio mostrare un elenco di tutti gli elementi creati, e voglio essere in grado di ordinarli da un contatore vista. Ecco sembrare facile, ma voglio più contatori. Voglio sapere che era l'elemento più visitato negli ultimi giorni, la scorsa settimana o ultimi mesi o nel complesso.

La mia prima idea era quella di creare 4 colonne contatore nel dell'elemento DB-Table. Uno per ciascuno dei giornaliera, settimanale, mensile e in generale, e il creare un job cron, che azzera il contatore giornaliero ogni 24 ore, il contatore settimanale ogni 7 giorni e così via.

Ma il mio problema è, che cosa succede se voglio sapere quale era la voce più visti della settimana, appena dopo il contatore settimanale ottenuto cancellata?

Che cosa ho bisogno è un modo efficace per creare un contatore continuo, che si e 'ridotto per ogni visualizzazione di una pagina che è troppo vecchio, e aumentato per ogni nuova visualizzazione della pagina.

In questo momento sto pensando a una soluzione con la Redis server di , ma io ma non hanno alcuna soluzione.

Sono solo in cerca di un'idea generale qui, ma FYI sto sviluppando questa applicazione in Ruby on Rails.

È stato utile?

Soluzione

Quello che vorrei suggerire al monitoraggio visite per ogni pagina, con solo un timestamp e qualsiasi ID utente o che cosa mai si può salvare, allora è possibile calcolare i contatori come ti piace e cambiare in un secondo momento perché avete i dati in modo semplice per utilizzare il formato. Una tabella con entità (pagina) userid e timestamp dovrebbe essere buona. Basta aggiungere che, quando mai la pagina viene richiesta.

Per ridurre il numero di inserti è possibile li lotto insieme nel software. Costruire un inserto più fila come qui per MySQL farà risparmiare sovraccarico. Avrete solo bisogno vostre classi per costruire l'inserto come descritto e memorizzare fino finché l'inserto. Un'idea è quella di non solo tempo, ma fissare un numero di righe a lotto che consente di dire al massimo se il server va si fa solo il numero x perdere di righe di colpi.

C'è un trigger MySQL che è possibile causare a correre solo dopo che il lotto completo di inserti è fatto che si potrebbe usare per aggiornare le tabelle di reporting in modo da non dover continuamente colpire il tavolo colpo di monitoraggio principale.

Anche se questo ha bisogno di essere veramente un throughput elevato potrebbe essere interrotto nella propria shard e vi si accede tramite Ajax chiama a fare il tracking colpo e ottenere i conteggi.

Altri suggerimenti

Che cosa si può fare è negozio di quello che viene visitato e in quale data (timestamp) e si dovrebbe fare questo per ogni volta la cosa viene visitato. Quando si vuole recuperare ciò che è stato visitato il, si dovrebbe scegliere quelli all'interno di un intervallo di date (timestamp) e aggiungere insieme.

o

Ogni dei tuoi link avrà la propria rispettiva riga per ogni giorno in cui vengono visitati. Se essi sono visitati più di una volta in un giorno e poi si aggiunge +1 al valore già esistente.

Si potrebbe utilizzare il secondo esempio e fare lo stoccaggio settimanale, invece di tutti i giorni, se le vostre settimane sono qualcosa come domenica-sabato e non 7 giorni prima di oggi. Quindi sostituire il giorno le parole con la settimana di parola avendo così piccole quantità di memorizzazione dei dati.

Vedo che si vuole evitare enormi archivi di dati, ma nella misura in cui si desidera che questo lavoro non vedo molto meglio di this.You potrebbe utilizzare il secondo esempio e fare lo stoccaggio settimanale, invece di tutti i giorni, se le vostre settimane sono qualcosa di simile a domenica-sabato e non 7 giorni prima di oggi.

Ecco una possibilità per il server regis dopo aver guardato un po 'di documentazione.

SET link_id|date => "visit_count"

Questo memorizza la link_id o comunque si chiami con il date separati da | o che cosa mai il carattere che si desidera utilizzare. In quel valore-chiave si memorizza il visit_count.

Dire che si desidera aggiungere un colpo a quel link in questa data. Si potrebbe GET link_id|date e quindi aggiungere +1 al visit_count ritorna e quindi memorizzare nuovamente il modo in cui ho mostrato sopra.

Se si vuole ottenere la quantità di risultati per una data specifica, si potrebbe con il GET link_id|date di nuovo.

Si sarebbe solo usare ruby-on-rails per sostituire link_id, date e visit_count con i valori appropriati.

Spero che questo ti aiuta.

Che cosa si potrebbe fare è creare una tabella chiamata ViewCounters.

Ci sarebbe una colonna 'pageId', una colonna 'giorno', e una colonna 'vista'. Il pageId corrisponderebbe alla pagina visualizzata, e il 'giorno' corrisponderebbe al giorno che è stato visualizzato su.

Ogni volta che una pagina viene visualizzata, che trova (o crea se non esiste ancora una) la riga nella tabella ViewCounters con la sua pageId, e con il giorno corrente. Sarebbe quindi incrementare la colonna 'viste' per quella riga.

Questo ti dà la massima flessibilità per quanto riguarda la creazione di nuovi sportelli e l'accesso storia. Inoltre, il numero di visualizzazioni per, settimanali e quotidiani contatori mensili sono tutti molto a buon mercato per generare.

Un altro grande vantaggio di questo è che è solo riga per pagina al giorno, che non è poi così male.

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