Come contare gli hit in un'API HTTP senza appesantire il DB

2

Sto costruendo un'API e voglio contare gli hit per ogni utente. È un'API HTTP implementata in Python. Potrei mantenere il conteggio in un database (usando PostGreSQL) ma sarà un'API molto impegnata, quindi non voglio il sovraccarico nel DB. Sto guardando Redis o sto semplicemente scrivendo dei semplici log di testo. Ma c'è un approccio migliore?

È un servizio di tessere mappa, quindi esplosioni di centinaia di visite al secondo. Voglio segnalare l'utilizzo al mese all'utente: non conservare il conteggio totale degli accessi.

    
posta mhoegh 18.03.2013 - 17:09
fonte

1 risposta

1

Se stai scrivendo comunque i registri, consiglierei di usare un lavoro in background per estrarre periodicamente i conteggi dai log e aggiornare i conteggi nel tuo DB. Prendi in considerazione l'utilizzo di uno script logrotate postrotate per estrarre i dati al fine di evitare problemi dovuti ai registri in rotazione.
In questo scenario qualsiasi DB è ok, quindi segui qualsiasi DB che stai già utilizzando.

Se, tuttavia, non scrivi i log, andrei con la proposta di @ Shinary (vedi i commenti) per scrivere gli hit su redis (o simili) e aggiornare periodicamente da lì. Poiché hai bisogno di questa funzionalità nel contesto di un'app web, consiglierei di implementarla come middleware (e in base a (a) lo store che hai scelto e (b) la gravità dei singoli hit in corso di perdita - utilizzando scritture / mandate asincrone per evitare di rallentare l'app principale.)

    
risposta data 19.03.2013 - 07:54
fonte

Leggi altre domande sui tag