Voglio creare un sistema di ricompensa nella mia applicazione, dove
- Ogni utente otterrà alcuni punti per ogni attività in app, ad es. risolvere un enigma, rispondere a una risposta, ecc.
- Voglio mostrare i percettori di punti in una classifica (come classifica Overflow stack )
- La classifica dovrebbe avere la possibilità di mostrare giornalmente, settimanalmente, mensilmente e amp; tutti i percettori di punti top time.
Al momento, sto pensando ad un approccio molto approssimativo:
-
Nella Tabella utenti crea una nuova colonna punti totali che memorizzerà i punti di tutti i tempi di un utente.
Ogni volta che l'utente guadagna punti, incrementeremo il suo valore.
-
Nella Tabella utenti crea una nuova colonna punti giornalieri che memorizzerà i punti giornalieri guadagnati da un utente.
Nella mia app voglio dare dei premi ai primi 3 utenti con il punteggio più alto guadagnato in quel giorno. Memorerà Punti solo tra le 12:15 AM alle 11:45 PM. Il tempo di Buffer sarà utilizzato per memorizzare i primi 3 vincitori e dopo aver trovato i primi 3 vincitori, annuncia i vincitori alle 12:00 & resetta il contatore di ogni utente a 0 e di nuovo inizia ad aggiungere punti nella tabella dopo le 12:15.
-
Allo stesso modo, per Weekly Leader Board crea una nuova colonna nella tabella utente Weekly_Points & usa lo stesso approccio come al punto 2, cioè memorizzerà i punti solo dalle 12:15 del lunedì alle 23:45 della domenica.
-
Allo stesso modo, per la Classifica mensile, crea una nuova colonna nella tabella utente Monthly_Points
Ma l'approccio sopra riportato ha un grosso svantaggio, ovvero l'utente non sarà in grado di vedere la classifica dei giorni precedenti, delle settimane precedenti, dei mesi precedenti.
Le mie domande sono:
- C'è un approccio migliore che posso usare?
- Questi dati sono più adatti per database relazionali o noSQL?