使用Google App Engine Datastore建模数据

1 投票
1 回答
712 浏览
提问于 2025-04-16 05:09

我目前正在使用Python在Google App Engine上构建一个网络应用,目的是收集马赛的数据。基本的数据结构是:赛道有很多场次,场次有很多比赛,比赛有很多马,马有一个骑师和一个训练师。到目前为止,我已经建立了以下模型(为了简洁起见,字段数量减少了)。

class Course(db.Model):
  course_number = db.IntegerProperty()     # course id (third party)
  course_description = db.StringProperty() # course name

class Meeting(db.Model):
  course = db.ReferenceProperty(Course)    # reference to course
  meeting_number = db.IntegerProperty()    # lifetime meeting number for course
  meeting_date = db.DateProperty()         # meeting date

class Race(db.Model):
  meeting = db.ReferenceProperty(Meeting)  # reference to meeting
  race_number = db.IntegerProperty()       # eg 1 for 1st race of meeting
  race_name = db.StringProperty()          # race name
  time_of_race = db.TimeProperty()         # race time

我在存储马、训练师和骑师的数据时遇到了困难。

我的应用会收集过去两年的数据,因此我需要保存与马、训练师和骑师相关的结果信息。某匹马的结果信息在某个时间点上与训练师和骑师是相同的。然而,随着时间的推移,一匹马可能会有不同的训练师和骑师。

我主要的困扰在于,我意识到在分析时可能需要查看某匹马、骑师或训练师最近10场比赛的结果。这些结果可能没有存储,因为这些比赛发生在英国赛马之外(数据仍然可用),或者是在我开始完整存储比赛之前的结果。

有没有人能帮我想想如何优化马、骑师和训练师的结果存储,以便我能适应这种情况?

数据来源:http://form.horseracing.betfair.com/timeform 所有需要的数据都可以通过JSON请求轻松访问。

1 个回答

0

你在使用HorseResult、TrainerResult和JockeyResult这些模型上走在正确的道路上。别忘了,数据存储系统没有分组或聚合的功能,所以在加载数据时,你可能需要提前计算一些你感兴趣的汇总数据或统计信息。

也许你还想要一些统计类型的模型,用来跟踪马、骑师和训练师的表现,甚至是它们之间的组合表现。比如可以创建一个HorseMonth模型,记录马在每个月参与了多少场比赛,以及它的名次。

我还建议你记录一下马和骑师,或者马和训练师的组合在一段时间内的表现。不幸的是,我对赛马了解不多,无法给你具体的建议,哪些组合是有意义的。

听起来这个工具主要是供你自己使用,你可以考虑看看mapper API。在你探索数据时,这可能会非常有用。

如果某场比赛不在你的数据中,除了扩大数据收集范围外,可能没有太多其他办法。你可能只想返回你已有的结果,或许还可以加上一些说明,表示在这个日期范围内数据不足?

撰写回答