Qual è un buon approccio per la classifica dei punti dei premi Rewards (giornaliera / settimanale / mensile)?

0

Voglio creare un sistema di ricompensa nella mia applicazione, dove

  1. Ogni utente otterrà alcuni punti per ogni attività in app, ad es. risolvere un enigma, rispondere a una risposta, ecc.
  2. Voglio mostrare i percettori di punti in una classifica (come classifica Overflow stack )
  3. 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:

  1. 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.

  2. 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.

  3. 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.

  4. 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:

  1. C'è un approccio migliore che posso usare?
  2. Questi dati sono più adatti per database relazionali o noSQL?
posta Ashish Rathee 06.01.2018 - 19:32
fonte

1 risposta

3

Se vuoi poter accedere o riprodurre i punteggi storici, devi creare una tabella PointsEarned in cui ogni record ha

  • un timestamp
  • un valore (i punti guadagnati per aver completato un'attività)
  • un riferimento a chiave esterna alla tabella utente

Questa tabella ti permetterà di sommare facilmente i punti totali, o i punti per qualsiasi altro intervallo di tempo che ti piace in fase di esecuzione, e non ci sarà immediatamente bisogno di aggiungere altre colonne per periodi fissi predefiniti come "ultimo settimana "," ultimo mese "," ultimo giorno tra alcune ore arbitrarie "al tuo database.

Ovviamente, più punti ottiene l'utente, più tempo ci vorrà per determinare il numero totale di punti e se quel valore è spesso necessario, potrebbe essere una buona idea aggiungere qualcosa come (ridondante!) colonna "total points" per la tabella degli utenti per gli scopi caching . Ma raccomanderei di misurare o osservare prima se ciò è veramente necessario.

    
risposta data 06.01.2018 - 19:58
fonte

Leggi altre domande sui tag