Чтобы привести пример запроса, который я не могу понять, для чего еще:
Приложение представляет собой счет для боулинга / статистики . Когда кто-то вводит свои оценки в расширенном режиме, рассчитывается количество характеристик, а также их оценка. Данные моделируются как:
Game - участники, такие как имя, пользователь, ссылка на боулинг, счет
Кадр - метки для каждого шара, логические списки, для которых были выбиты булавки на каждом шаре, информация о пути мяча (позиция, цель, куда он фактически пошел), оценка по состоянию на этот кадр и т. Д.
GameStats - хранит рассчитанную статистику для всей игры, которая будет объединена с другой статистикой игры, необходимой для отображения статистики по группам игр.
Пример этой информации на практике можно найти здесь .
Когда игра завершена и кадр обновлен, я должен обновить игру, кадр, каждый кадр после него и, возможно, некоторые перед ним (чтобы убедиться, что их оценки верны) и статистику. Эта операция всегда помечает монитор процессора. Даже если игра не завершена, и статистику не нужно рассчитывать, необходимо обновить оценки и тому подобное, чтобы показать пользователю прогресс в реальном времени, и поэтому они также помечаются. Среднее время процессора для этого обработчика составляет более 7000 циклов, и он даже не отображает представление. Большинство людей играют 3–4 игры за серию - если они вводят свои результаты в режиме реального времени, на дорожках, это примерно 1 запрос каждые 2–4 минуты, но если они все записывают и вводят позже, есть 30–40 эти запросы выполняются подряд.
<Ч />
По запросу, модель данных для важных классов:
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)