Pregunta

Para dar un ejemplo del tipo de solicitud que no puedo averiguar qué más hacer para:

La aplicación es un puntaje de bolos / rastreador de estadísticas . Cuando alguien ingresa sus puntajes en modo avanzado, se calculan varias estadísticas, así como su puntaje. Los datos se modelan como:

Juego: los miembros como nombre, usuario, referencia a la bolera, puntuación Cuadro: puntos de referencia para cada bola, listas booleanas para las que se han derribado los pernos en cada bola, información sobre la trayectoria de la bola (postura, objetivo, dónde fue en realidad), la puntuación a partir de ese cuadro, etc. GameStats: almacena estadísticas calculadas para todo el juego, que se fusionarán con otras estadísticas del juego según sea necesario para la visualización de estadísticas en grupos de juegos.

Puede encontrar un ejemplo de esta información en la práctica aquí .

Cuando se completa un juego y se actualiza un marco, tengo que actualizar el juego, el marco, todos los fotogramas posteriores y posiblemente algunos antes (para asegurarme de que sus puntuaciones son correctas) y las estadísticas. Esta operación siempre marca el monitor de la CPU. Incluso si el juego no está completo, y las estadísticas no necesitan ser calculadas, las puntuaciones y tales deben actualizarse para mostrar el progreso en tiempo real al usuario, y así también se marcan. El tiempo promedio de CPU para este controlador es de más de 7000 mcycles, y ni siquiera muestra una vista. La mayoría de la gente juega de 3 a 4 juegos por serie: si ingresan sus puntajes en tiempo real, en los carriles, eso equivale a aproximadamente 1 solicitud cada 2 a 4 minutos, pero si lo escriben todo y luego ingresan, hay 30-40 de estas solicitudes se realizan en una fila.


Según lo solicitado, el modelo de datos para las clases 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)
¿Fue útil?

Solución

Algunas sugerencias:

  • Puede almacenar las estadísticas de los marcos como parte de la misma entidad que el juego, en lugar de tener una entidad separada para cada uno, almacenándola como una lista de campos de bits (almacenados en números enteros) para los pines que se encuentran al final de Cada medio fotograma, por ejemplo. Déjeme saber si desea más detalles sobre cómo se implementaría esto.
  • Si falla eso, puede calcular algunas de las estadísticas más interrelacionadas sobre la recuperación. Por ejemplo, calcular el puntaje hasta el momento debería ser simple si tiene todo el juego cargado a la vez, lo que significa que puede evitar tener que actualizar varios marcos en cada solicitud.
  • Podemos ayudarlo si nos muestra su modelo de datos. :)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top