2010-10-07 1 views
1

В настоящее время я создаю веб-приложение на Google App Engine в Python для сбора данных о скачках формы. Основная структура данных - это курс, в котором много совещаний имеет много гонок, у многих лошадей есть один жокей и один тренер. Пока у меня есть следующие модели (сокращенное количество полей для краткости).Моделирование данных с помощью Google App Engine Datastore

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 

У меня возникли проблемы с разработкой, как хранить данные о лошадях, тренерах, жокеях в хранилище данных.

Мое приложение будет собирать данные за последние 2 года, для этого я буду сохранять соответствующую информацию о результатах для лошади, тренера, жокея. Информация о конкретном результате лошадей одинакова для тренера и жокея в тот момент времени. Однако со временем у лошади могут быть разные тренеры и разные жокеи.

Моя основная боль в мозге приходит, когда я понимаю, что в анализе мне может понадобиться посмотреть результат за последние 10 гонок для лошадей, жокеев, тренеров. Результаты, которые не могут быть сохранены либо потому, что результаты произошли за пределами гонок Великобритании (данные по-прежнему доступны), либо произошли до даты начала полного гоночного хранения.

Может ли кто-нибудь пролить свет на то, как оптимизировать хранение результатов лошадей, жокеев, тренеров, чтобы я мог разместить для этого?

Источник данных: http://form.horseracing.betfair.com/timeform Все необходимые данные могут быть легко доступны через запросы JSON.

+0

Как вы хотите использовать данные? Будет ли он каким-то образом представлен пользователям? Собираетесь ли вы запустить какую-то статистику по данным? При моделировании данных в App Engine обычно следует начинать с того, как будут использоваться данные. Кроме того, не бойтесь денормализовать данные. –

+0

@Robert Kluin: Я буду использовать его исключительно для запуска статистики против для личного использования на данный момент. Я читал о денормализации данных и не имею никаких проблем с этим, на самом деле я делал это на протяжении веков с изворотливыми csvs в качестве таблиц базы данных в материалах PHP. Помимо этого, возможно, есть таблица HorseResult, JockeyResult, TrainerResult, которая связана с Race - но в этом я делаю, когда я не сохранил гонку, поскольку она находится за пределами моего диапазона урожая? – 2010-10-07 19:31:15

+1

Вместо того, чтобы пытаться связать лошадь, жокея и тренера вместе, почему бы не иметь экземпляр, который записывает конкретную лошадь в конкретной гонке - ссылку на лошадь, жокея и тренера, а также информацию о том, как она выполняется. Нет необходимости хранить постоянную связь между тремя объектами. –

ответ

0

Вы находитесь на правильном пути с использованием моделей HorseResult, TrainerResult и JockeyResult. Не забывайте, что хранилище данных не имеет группировки или агрегатных функций, поэтому вы можете предварительно вычислить любые агрегаты или статистику, представляющие интерес, когда вы загружаете данные.

Возможно, вы также захотите иметь модели типа статистики для отслеживания скорости лошади, жокея и тренера с течением времени и комбинаций каждого из них. Что-то вроде HorseMonth, которое может отслеживать, сколько гонок участвовало лошадь и как оно было помещено в месяц.

Я также хотел бы рассмотреть вопрос о том, как сочетались лошади и жокея, лошади и тренера со временем. К сожалению, я не знаю достаточно о скачках, чтобы дать вам конкретные предложения, какие комбинации имеют смысл.

Поскольку это звучит так, это инструмент, предназначенный в основном для вашего собственного использования, вы можете посмотреть на mapper API. Это может иметь большое значение при изучении данных.

Если гонка не включена в ваши данные, кроме расширения диапазона урожая, может быть не так много, что вы можете сделать. Вы, вероятно, просто захотите вернуть результаты, которые у вас есть, и, возможно, что-то, указывающее, что в диапазоне дат недостаточно данных?

 Смежные вопросы

  • Нет связанных вопросов^_^