Question

Pour donner un exemple du type de demande pour laquelle je ne vois pas quoi faire d'autre:

L’application est un suivi des scores / statistiques des quilles . Lorsque quelqu'un entre ses scores en mode avancé, un certain nombre de statistiques sont calculées, ainsi que leur score. Les données sont modélisées comme suit:

Jeu - membres comme nom, utilisateur, référence à la piste de bowling, score Frame - chutes de punaises pour chaque balle, listes booléennes pour lesquelles des punaises ont été renversées sur chaque balle, informations sur le tracé de la balle (position, cible, où elle est réellement passée), le score de cette image, etc. GameStats - stocke les statistiques calculées pour le jeu entier, à fusionner avec d'autres statistiques de jeu si nécessaire pour afficher les statistiques sur plusieurs groupes de jeux.

Vous trouverez un exemple concret de ces informations ici .

Quand un jeu est terminé et qu'un cadre est mis à jour, je dois mettre à jour le jeu, le cadre, chaque cadre après et éventuellement certains avant (pour s'assurer que leurs scores sont corrects) et les statistiques. Cette opération marque toujours le moniteur de la CPU. Même si le jeu n'est pas complet et qu'il n'est pas nécessaire de calculer les statistiques, les scores et ces informations doivent être mis à jour pour indiquer la progression en temps réel à l'utilisateur, de sorte que ceux-ci soient également signalés. Le temps de calcul moyen de ce gestionnaire est supérieur à 7 000 mcycles et il n’affiche même pas de vue. La plupart des joueurs jouent 3 à 4 parties par série. S'ils saisissent leurs scores en temps réel, cela équivaut à environ 1 demande toutes les 2 à 4 minutes, mais s'ils écrivent tout cela et les inscrivent plus tard, 30 à 40 des ces demandes étant faites à la suite.

Comme demandé, le modèle de données pour les classes importantes:

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)
Était-ce utile?

La solution

Quelques suggestions:

  • Vous pouvez stocker les statistiques des images dans la même entité que le jeu, plutôt que de créer une entité distincte pour chacune d'elles, en la stockant sous forme de liste de champs de bits (stockés dans des entiers) pour les broches à la fin de chaque demi-image, par exemple. Faites-moi savoir si vous souhaitez plus de détails sur la manière dont cela serait mis en œuvre.
  • À défaut, vous pouvez calculer certaines statistiques plus interreliées lors de l'extraction. Par exemple, le calcul du score à ce jour devrait être simple si vous avez tout le jeu chargé en même temps, ce qui signifie que vous pouvez éviter de mettre à jour plusieurs cadres à chaque requête.
  • Nous pouvons vous aider davantage si vous nous montrez votre modèle de données. :)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top