Domanda

Per fare un esempio del tipo di richiesta per la quale non riesco a capire cos'altro fare per:

L'applicazione è un punteggio bowling / tracker stat . Quando qualcuno inserisce i suoi punteggi in modalità avanzata, vengono calcolati un numero di statistiche, nonché il loro punteggio. I dati sono modellati come:

Gioco: membri come nome, utente, riferimento alla pista da bowling, punteggio Frame - pinfalls per ogni palla, elenchi booleani per i quali i pin sono stati buttati giù su ogni palla, informazioni sul percorso della palla (posizione, bersaglio, dove è stata effettivamente eseguita), il punteggio a partire da quel frame, ecc. GameStats: memorizza le statistiche calcolate per l'intero gioco, da unire ad altre statistiche di gioco in base alle necessità per visualizzare le statistiche tra gruppi di giochi.

Un esempio di queste informazioni in pratica può essere trovato qui .

Quando un gioco è completo e un fotogramma viene aggiornato, devo aggiornare il gioco, il fotogramma, ogni fotogramma successivo e possibilmente alcuni prima di esso (per assicurarsi che i loro punteggi siano corretti) e le statistiche. Questa operazione contrassegna sempre il monitor della CPU. Anche se il gioco non è completo e non è necessario calcolare le statistiche, i punteggi e tali devono essere aggiornati per mostrare all'utente i progressi in tempo reale e quindi anche questi vengono contrassegnati. Il tempo medio della CPU per questo gestore è di oltre 7000 mcycles e non mostra nemmeno una vista. La maggior parte delle persone lancia da 3 a 4 partite per serie: se inseriscono i loro punteggi in tempo reale, nelle corsie, si tratta di circa 1 richiesta ogni 2-4 minuti, ma se scrivono tutto e lo inseriscono in un secondo momento, ci sono 30-40 di queste richieste vengono fatte di seguito.


Come richiesto, il modello di dati per le classi importanti:

class Stats(db.Model):
  version = db.IntegerProperty(default=1)
  first_balls=db.IntegerProperty(default=0)
  pocket_tracked=db.IntegerProperty(default=0)
  pocket=db.IntegerProperty(default=0)
  strike=db.IntegerProperty(default=0)
  carry=db.IntegerProperty(default=0)
  double=db.IntegerProperty(default=0)
  double_tries=db.IntegerProperty(default=0)
  target_hit=db.IntegerProperty(default=0)
  target_missed_left=db.IntegerProperty(default=0)
  target_missed_right=db.IntegerProperty(default=0)
  target_missed=db.FloatProperty(default=0.0)
  first_count=db.IntegerProperty(default=0)
  first_count_miss=db.IntegerProperty(default=0)

  second_balls=db.IntegerProperty(default=0)
  spare=db.IntegerProperty(default=0)
  single=db.IntegerProperty(default=0)
  single_made=db.IntegerProperty(default=0)
  multi=db.IntegerProperty(default=0)
  multi_made=db.IntegerProperty(default=0)
  split=db.IntegerProperty(default=0)
  split_made=db.IntegerProperty(default=0)

class Game(db.Model):
  version = db.IntegerProperty(default=3)
  user = db.UserProperty(required=True)
  series = db.ReferenceProperty(Series)
  score = db.IntegerProperty()
  game_number = db.IntegerProperty()
  pair = db.StringProperty()
  notes = db.TextProperty()
  simple_entry_mode = db.BooleanProperty(default=False)
  stats = db.ReferenceProperty(Stats)
  complete = db.BooleanProperty(default=False)

class Frame(db.Model):
  version = db.IntegerProperty(default=1)
  user = db.UserProperty()
  game = db.ReferenceProperty(Game, required=True)
  frame_number = db.IntegerProperty(required=True)
  first_count = db.IntegerProperty(required=True)
  second_count = db.IntegerProperty()
  total_count = db.IntegerProperty()
  score = db.IntegerProperty()
  ball = db.ReferenceProperty(Ball)
  stance = db.FloatProperty()
  target = db.FloatProperty()
  actual = db.FloatProperty()
  slide = db.FloatProperty()
  breakpoint = db.FloatProperty()
  pocket = db.BooleanProperty()
  pocket_type = db.StringProperty()
  notes = db.TextProperty()
  first_pinfall = db.ListProperty(bool)
  second_pinfall = db.ListProperty(bool)
  split = db.BooleanProperty(default=False)
È stato utile?

Soluzione

Alcuni suggerimenti:

  • È possibile memorizzare le statistiche per i frame come parte della stessa entità del gioco, anziché avere un'entità separata per ciascuno, memorizzandolo come un elenco di bitfield (memorizzati in numeri interi) per i pin che si trovano alla fine di ogni mezzo fotogramma, per esempio. Fammi sapere se vuoi maggiori dettagli su come questo sarebbe implementato.
  • In caso contrario, puoi calcolare alcune delle statistiche più correlate sul recupero. Ad esempio, calcolare il punteggio finora dovrebbe essere semplice se hai caricato l'intero gioco in una sola volta, il che significa che puoi evitare di aggiornare più frame su ogni richiesta.
  • Possiamo essere di maggiore aiuto se ci mostri il tuo modello di dati. :)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top