举一个我不知道还能做什么的请求的例子:
该应用程序是保龄球得分/统计跟踪器。当有人在高级模式下输入他们的分数时,会计算一些统计数据以及他们的分数。数据建模为:
游戏 - 成员,如姓名、用户、保龄球馆的引用、得分 Frame - 每个球的落点、每个球上击倒球的布尔列表、关于球路径的信息(姿势、目标、实际去向)、该帧的得分等 GameStats - 存储整个游戏的计算统计数据,根据需要与其他游戏统计数据合并,以便跨游戏组显示统计数据。
可以在此处找到此信息在实践中的示例。
当游戏完成并更新一帧时,我必须更新游戏、帧、之后的每一帧,可能还有之前的一些(以确保他们的分数是正确的),以及统计数据。此操作始终标记 CPU 监视器。即使游戏没有完成,不需要计算统计数据,也需要更新分数等以向用户显示实时进度,因此这些也会被标记。这个处理程序的平均 CPU 时间超过 7000 mcycles,它甚至不显示视图。大多数人每个系列会打 3 到 4 场比赛——如果他们在球道上实时输入他们的分数,那大约是每 2 到 4 分钟 1 个请求,但如果他们把它全部写下来然后再输入,则有 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)