举一个例子,说明我无法弄清楚还有什么要做的请求:
该应用程序是bowling score/stat tracker。当某人以高级模式输入他们的分数时,会计算一些统计数据以及他们的分数。数据建模为:
游戏 - 成员喜欢名字,用户,参考保龄球馆,得分 每个球的框架 - 布局,每个球上的针脚被击倒的布尔列表,关于球的路径的信息(站立,目标,实际去向),该帧的得分等 GameStats - 存储整个游戏的计算统计数据,与其他游戏统计数据合并,以便在各组游戏中显示统计数据。
可以在here找到实践中此信息的示例。
当一个游戏完成,一个框架被更新时,我必须更新游戏,框架,它后面的每一帧以及它之前可能的一些(以确保它们的分数是正确的)和统计数据。此操作始终标记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)
答案 0 :(得分:1)
一些建议: