Descrizione della competizione:
- Ci sono circa 10 squadre in competizione l'una contro l'altra per un periodo di 6 settimane.
- Il punteggio totale di ogni squadra (su un totale di 1000 punti disponibili) si basa sul totale dei suoi punteggi in circa 25.000 diversi elementi di punteggio.
- La maggior parte degli elementi di punteggio vale una piccola frazione di punto e ci saranno circa 10 X 25.000 = 250.000 punti di dati di input grezzi totali.
- I punti per alcuni elementi di punteggio vengono assegnati a intervalli regolari frequenti durante la competizione. I punti per gli altri elementi di punteggio vengono assegnati a intervalli di tempo irregolari o in un solo istante.
- Esistono circa 20 diversi tipi di elementi di punteggio.
- Ciascuno dei 20 tipi di elementi di punteggio ha un diverso insieme di input, un diverso algoritmo per calcolare il punteggio guadagnato dagli input grezzi e un diverso numero di punti totali disponibili. Gli algoritmi più semplici richiedono un input e un semplice calcolo. Gli algoritmi più complessi consistono in centinaia o migliaia di input grezzi e un calcolo più complicato.
- Alcuni tipi di input non elaborati vengono generati automaticamente. Altri tipi di input non elaborati vengono inseriti manualmente. Tutti gli input grezzi sono soggetti a possibili aggiustamenti retroattivi manuali da parte dei funzionari della concorrenza.
Requisiti principali:
- L'interfaccia utente del sistema di punteggio per i concorrenti e gli altri follower della competizione mostrerà i punteggi totali attuali e storici della squadra, le classifiche della squadra, i punteggi delle squadre per elemento di punteggio, i dati grezzi di input (a diversi livelli di aggregazione, ad esempio giornalieri, settimanali, ecc.), e altre metriche.
- Ci saranno grafici, tabelle e altri widget per la visualizzazione di input e punteggi storici dei dati grezzi.
- Ci sarà una dashboard quasi in tempo reale che mostrerà i punteggi attuali e gli input dei dati grezzi.
- I punteggi aggregati dovrebbero essere aggiornati / aggiornati ogni volta che arrivano nuovi input di dati grezzi o se vengono modificati gli input di dati grezzi esistenti.
- Ci sarà una "UI scorekeeper" per l'immissione manuale di nuovi input, la regolazione manuale degli input esistenti e la regolazione manuale dei punteggi calcolati.
Le decisioni:
- I calcoli del punteggio devono essere eseguiti sul livello del database (T-SQL / SQL Server, nel mio caso) o sul livello dell'applicazione (C # / ASP.NET MVC, nel mio caso)?
- Quali sono alcuni approcci consigliati per calcolare i punteggi complessivi della squadra aggiornati ogni volta che arrivano nuovi input grezzi? Calcolando il punteggio totale di ciascuno dei team da zero ogni volta che arriva un nuovo input probabilmente rallenterà il sistema. Ho considerato una sorta di approccio "diff", ma questo approccio potrebbe porre problemi per le query ad-hoc e alcuni aggettivi. Sto provando a disegnare alcune analogie sportive, ma è difficile perché la maggior parte dei giochi consiste di non più di 20 o 30 elementi di punteggio per partita (sto pensando ad una partita di baseball ad alto punteggio, calcio e calcio hanno meno eventi di punteggio per partita) . Forse un'analogia del bilancio finanziario ha più senso perché i calc finanziari "bottom line" possono essere calcolati da 250.000 o più transazioni.
- Dovrei fare un uso intensivo del caching per questa applicazione?
- Esistono approcci ovvi o studi di casi simili che potrei ignorare?