Come monitorare le visite della settimana passata in un'app Web?

0

Sto sviluppando una webapp MVC simile a un giornale con un tipo di contenuto article che ha un campo visits . Il database è mysql.

Ogni volta che un visitatore richiede un articolo, il campo visits dell'articolo viene incrementato di 1. Così posso facilmente interrogare article tabella in base alle loro visite complessive.

Ma quello che voglio è ordinare gli articoli in base al numero di visite che ogni articolo ha ricevuto la scorsa settimana.

Ho pensato di avere una tabella separata come weekly-stats in cui posso inserire e incrementare gli articoli con le loro visite recenti su ogni richiesta, ma poi ho bisogno di svuotare la tabella settimanalmente come cron job, che non è l'ideale, e lascia le statistiche svuotate dopo che il tavolo è stato svuotato.

Ho anche pensato di fare in modo che le visite degli articoli vengano salvate in una cache in scadenza come redis e impostare i record della cache scaduti dopo una settimana, ma in questo modo vengono introdotte tutte le complessità dell'inserimento e dell'interrogazione degli elementi hash redis.

Quindi ho pensato che potrebbero esserci alcune strategie di progettazione più semplici che mi mancano. Come posso ottenere questo con il minimo fastidio?

    
posta Babr 04.03.2018 - 01:54
fonte

2 risposte

2

Avere una tabella in cui registri per ogni articolo un timestamp di quando l'articolo è stato visitato.

Per contare la frequenza con cui un articolo è stato visitato nell'ultima settimana, puoi eseguire una query SQL che conta il numero di record corrispondenti, in cui una corrispondenza è basata sia sull'articolo che sui timestamp registrati.

Se sei preoccupato per lo spazio di archiviazione di questa tabella, disponi di un lavoro periodico che rimuove tutte le voci più vecchie dell'intervallo di tempo più lungo su cui potresti volere generare rapporti.

    
risposta data 04.03.2018 - 13:10
fonte
0

Registra le visite al giorno e sommale negli ultimi 7 giorni.

Evita la manutenzione perché la tua query di inserimento cancella anche le righe più vecchie di 7 giorni

EDIT: tabella e un po 'di codice

DailyVisitCount
    Date
    articleId
    count

public class VisitRepo
{
    public List<DailyVisitCount> GetVisits()
    {
        //select * from DailyVisitCount table and cache
    }

    private void UpdateCount(DateTime date, string articleId)
    {
        var sql = "Update DailyVisitCount set count = count +1 where aricleId=@articleId && date=@date;";
        var sql  += "Delete from DailyVisitCount where date < @sevendaysago;"

        //run sql
    }

    public void RecordVisit(DateTime date, string articleId)
    {
        if(GetVisits().Any(i=>i.Date == date.Date && i.ArticleId == articleId)
        {
            UpdateCount(date, articleId)
        }
        else
        {
            try
            {
                var sql = "insert into DailyVisitCount ...."
                //...
            }
            catch()
            {
                //collision with another insert, run update
            }
        }
    }
}
    
risposta data 04.03.2018 - 11:34
fonte

Leggi altre domande sui tag