Ho un problema con un sistema di classificazione che sto usando.
Scenario:
Un gioco online con circa 10k giocatori calcola una classifica dei punti in tempo reale quando si verifica un determinato evento. Gli eventi non si verificano spesso, circa 1 volta al minuto. Questa classifica viene mantenuta nella cache per calcoli, ordinamenti e accessi rapidi.
Ora i giocatori possono formare gruppi e giocare uno contro l'altro, ma il sistema di punteggio è lo stesso, solo la classifica è basata per i giocatori di quel gruppo.
All'inizio ho creato per ogni gruppo una classifica separata, con gli stessi punteggi della classifica completa, ma con posizioni diverse nella classifica.
Questo è banale perché ci sono oltre 1.000 gruppi e ogni volta che si verifica un evento, tutti i gruppi dovrebbero essere aggiornati.
Quindi quello che ho fatto ora è quando la classifica di gruppo è richiesta, prendere solo i giocatori che si trovano in quel gruppo dalla classifica completa e mostrarli. Le posizioni dovrebbero essere ricontestualizzate.
Il riconteggio è dove si trova il problema. Poiché la sotto-lista è per riferimento dalla graduatoria completa non posso modificare la posizione del giocatore nella sottocategoria senza aggiornarla nella classifica completa, perché è solo un riferimento.
Ho trovato due soluzioni:
- Crea una copia dal record ogni volta che viene richiesta e fai un po 'di output nella cache (non molto desiderabile perché le classifiche sono live)
- Crea una copia e memorizzala in una cache che viene ripristinata quando si verifica un evento.
- Crea una sottocategoria con solo le posizioni che vengono aggiornate quando si verifica un evento.
E l'ultima soluzione: fare il conteggio delle posizioni nell'output invece nel lato business. Questa sarebbe la soluzione migliore, il solo problema è che su alcune pagine appare questo testo: "Sei sulla posizione # nella classifica" dove # è la tua posizione in classifica. Questo numero sarebbe noioso da ottenere allora.
Qualcuno ha qualche suggerimento su questo problema?